From f092d8671855b25e080b6f3babfc895f5eca3565 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Thu, 3 Sep 2026 00:19:21 -0400 Subject: [PATCH 001/209] docs: spec for redesign foundation (tokens and typography) Piece 1 of 6 of the camel-website redesign. Covers the font migration to self-hosted Archivo and JetBrains Mono, the palette swap at :root in vars.css, and the container widths. Records three decisions the design handoff left open: splitting --heading-font-weight and --code-font-color where a single token was asked to carry two values, diverging the marketing container (1200px) from the docs article area (1366px), and deferring the dark syntax highlighting theme to its own piece. Co-Authored-By: Claude Opus 5 (1M context) --- ...-03-foundation-tokens-typography-design.md | 244 ++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md diff --git a/docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md b/docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md new file mode 100644 index 00000000000..3b412f0b2c4 --- /dev/null +++ b/docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md @@ -0,0 +1,244 @@ +# Foundation: tokens and typography + +Piece 1 of 6 of the camel-website redesign. Branch `feature/new-website-design`. + +The six pieces: 1 foundation (this document), 2 shared chrome, 3 Antora docs UI, +4 designed Hugo pages, 5 undesigned template sweep, 6 syntax highlighting theme. + +Design source: `Apache Camel Home.dc.html` and `Apache Camel Site Pages.dc.html`, +with decisions recorded in the design handoff `SCOPE.md` (2026-09-03). + +## Why this is its own piece + +The redesign replaces the site's palette and type system at `:root` in +`antora-ui-camel/src/css/vars.css`. That single stylesheet feeds both the Hugo +pages and the Antora documentation UI, so the swap repaints roughly 15 content +sections plus every documentation page at once. Nothing else in the redesign can +be evaluated until that repaint is stable, and if it makes documentation +unreadable we want to know before building twelve page layouts on top of it. + +This piece changes tokens and font plumbing only. It deliberately ships a site +that is half-repainted: new colors and type against old layouts. That is +expected and is not a defect to fix here. + +## Scope + +In scope: + +- Add Archivo and JetBrains Mono as self-hosted faces; remove Droid Sans Mono. +- Replace the color palette at `:root` and re-point the existing semantic vars. +- Set container widths and a shared horizontal gutter. +- Repair breakage in existing stylesheets that the repaint causes, limited to + restoring legibility and contrast. + +Out of scope, deferred to later pieces: + +- Header and footer markup or layout (piece 2). +- Antora nav, toolbar, article, and TOC treatments (piece 3). +- Any Hugo page layout, including the home page and `/projects/` (piece 4). +- Release notes and release partials (piece 5). +- The syntax highlighting theme in `highlight.css` (piece 6). + +## Decisions + +### 1. Fonts + +Add to `antora-ui-camel/package.json` devDependencies: + +- `@fontsource/archivo` at weights 500, 600, 700, 800. +- `@fontsource/jetbrains-mono` at weights 400, 500, 600. + +Remove `typeface-droid-sans-mono`. + +The repo currently mixes two font-package conventions: `@openfonts/*` for Open +Sans and the older `typeface-*` for Droid Sans Mono. We add a third, +`@fontsource/*`, because `@openfonts` is unmaintained and does not publish +Archivo. Removing Droid Sans Mono in the same change leaves two conventions +rather than three. Open Sans stays on `@openfonts` and is not touched. + +New `src/css/typeface-archivo.css` and `src/css/typeface-jetbrains-mono.css` +follow the `@font-face` pattern already used by `typeface-open-sans.css`: +`font-display: swap`, a `local()` entry first, then `~@fontsource/...` woff2 +and woff URLs. `postcss-url` rewrites the `~@` prefix and `gulp-rev-rewrite` +revs the files into `rev-manifest.json`; this must be confirmed by inspecting +the manifest after a bundle, not assumed. + +`site.css` imports both new stylesheets and drops the +`typeface-droid-sans-mono.css` import. + +### 2. Palette + +Replace the color block at the top of `vars.css` `:root`. New tokens: + +``` +--color-paper: #faf7f1 /* page background */ +--color-paper-2: #f4eee3 /* nav panel, table heads, tinted blocks */ +--color-line: #e7e0d5 /* borders */ +--color-line-soft: #f0e9dd /* row dividers */ +--color-line-hover: #d9ccb8 +--color-ink: #211c17 /* headings, dark blocks, footer */ +--color-ink-2: #3a332b /* body text */ +--color-ink-soft: #5c554c /* secondary text */ +--color-ink-muted: #8a8074 /* eyebrows, meta */ +--color-camel-orange: #e97826 /* unchanged; primary CTA */ +--color-orange-deep: #c95f12 /* links, CTA hover */ +--color-orange-tint: #fbead8 /* chips, tip badges */ +--color-orange-glow: #f2a05a /* accents on dark */ +--color-dark-2: #2b2620 /* code chrome on dark */ +--color-dark-line: #34302a +--color-on-dark: #faf7f1 +--color-on-dark-soft: #c4bbac +--color-on-dark-muted: #8f867a +``` + +`--color-camel-orange` keeps its current value, so it is retained rather than +redefined. `--color-camel-orange-light` and the greyscale ramp +(`--color-smoke-*`, `--color-gray-*`, `--color-jet-*`) stay declared until a +later piece proves nothing references them; deleting them here would break +stylesheets this piece is not otherwise touching. + +`--color-asf-dark-blue`, `--color-asf-moderate-blue`, and +`--color-asf-light-blue` stay declared but are removed from all UI chrome. They +remain available for the ASF logo and branding only. + +Semantic vars are re-pointed as follows: + +| var | new value | +|---|---| +| `--body-background` | `var(--color-paper)` | +| `--body-font-color`, `--doc-font-color` | `var(--color-ink-2)` | +| `--heading-font-color` | `var(--color-ink)` | +| `--link-font-color` | `var(--color-orange-deep)` | +| `--link_hover-font-color` | `var(--color-camel-orange)` | +| `--panel-background`, `--nav-background`, `--toolbar-background` | `var(--color-paper-2)` | +| `--panel-border-color`, `--nav-border-color`, `--toolbar-border-color`, `--toc-border-color` | `var(--color-line)` | +| `--nav-heading-font-color`, `--toc-heading-font-color` | `var(--color-ink)` | +| `--navbar-background` | `rgb(250 247 241 / 90%)` | +| `--navbar-font-color` | `var(--color-ink-soft)` | +| `--navbar-hover-font-color` | `var(--color-ink)` | +| `--footer-background` | `var(--color-ink)` | +| `--footer-font-color`, `--footer-link-font-color` | `var(--color-on-dark-soft)` | +| `--table-border-color` | `var(--color-line)` | + +### 3. Two vars that carry two values + +`SCOPE.md` specifies a single value for two contexts in two places. Both are +resolved here by splitting the token rather than by adding selector overrides, +so later pieces have something to bind to. + +Headings: `SCOPE.md` asks for weight 800 on h1 and 700 on h2 and h3. +`--heading-font-weight` becomes `700`, and a new `--heading-font-weight-display` +is `800` for h1 and any display heading. + +Code: `SCOPE.md` asks for ink backgrounds on `pre` blocks and paper-2 on inline +`code`, with inverted text colors to match. Split into: + +- `--pre-background: var(--color-ink)` and a new `--pre-font-color: + var(--color-on-dark)`. `--pre-font-color` does not exist today; `pre` inherits + its color, so `doc.css` needs to start binding it. +- `--code-background: var(--color-paper-2)`, `--code-font-color: var(--color-ink)` + +`--code-font-color` currently resolves to ASF moderate blue and is referenced by +`doc.css`; re-pointing it to ink is the change that removes blue from inline +code. + +### 4. Typography vars + +| var | new value | +|---|---| +| `--body-font-family` | `'Open Sans', system-ui, sans-serif` | +| `--display-font-family` (new) | `'Archivo', sans-serif` | +| `--monospace-font-family` | `'JetBrains Mono', ui-monospace, monospace` | + +`--rem-base` stays at 18. Every px value taken from the artboards is expressed +as `calc(N / var(--rem-base) * 1rem)`, matching the convention already used in +`projects.css` and `frontpage.css`. + +### 5. Containers + +The artboards lay out marketing pages as a centered 1200px container with 32px +side padding. The Antora docs screen is not a centered container: a 280px nav is +fixed left, and the article plus 220px TOC is capped at 1180px within the +remaining space, which fits inside the existing 1366px. So the two widths +diverge: + +| var | value | applies to | +|---|---|---| +| `--static-max-width--desktop` | `calc(1200 / var(--rem-base) * 1rem)` | `.static`, `.blog`, `.projects`, Hugo pages | +| `--frontpage-max-width` | `var(--static-max-width--desktop)` | home page | +| `--doc-max-width--desktop` | unchanged at 1366 | Antora article area | +| `--page-padding-x` (new) | `calc(32 / var(--rem-base) * 1rem)` | all containers | + +Header and footer inner containers bind `--static-max-width--desktop` on every +page, documentation included, so the site chrome aligns across Hugo and Antora +even though the docs article area stays wider. Applying that is piece 2's work; +this piece only defines the tokens it needs. + +## Files touched + +- `antora-ui-camel/package.json` — add two deps, remove one. +- `antora-ui-camel/src/css/vars.css` — the palette, semantic re-points, type, + containers. +- `antora-ui-camel/src/css/typeface-archivo.css` — new. +- `antora-ui-camel/src/css/typeface-jetbrains-mono.css` — new. +- `antora-ui-camel/src/css/site.css` — import changes. +- Existing stylesheets, for repaint repair only, expected to be `doc.css`, + `nav.css`, and `base.css`. `highlight.css` is deliberately not touched; see + "Accepted temporary regression" below. + +## Verification + +Evidence required before this piece is called done: + +1. `yarn workspace antora-ui-camel run build` completes, and `rev-manifest.json` + contains revved entries for the Archivo and JetBrains Mono woff2 files. +2. Stylelint passes as part of the bundle task. +3. `grep -ri "droid sans" antora-ui-camel/src` returns nothing. +4. `yarn build && yarn checks` passes, covering html-validate, deadlinks, and + redirects. +5. A Hugo page and an Antora documentation page are both loaded in a browser and + compared against the corresponding artboard screen. Body text, headings, + inline code, code blocks, tables, admonitions, and links are checked for + contrast and legibility. +6. No element still renders in ASF blue except the ASF logo. + +Item 5 is a judgment call and is the reason this piece exists. If documentation +legibility regresses, that is a finding to report and resolve before piece 2, +not something to work around in later pieces. Syntax-highlighted code is +excluded from item 5; see below. + +## Accepted temporary regression + +`highlight.css` is tuned against a light `--pre-background`. This piece sets +`--pre-background` to `--color-ink` without touching that theme, so highlighted +code renders light-on-dark token colors against a dark ground and will look +wrong on every page that carries a code block. That is a known and accepted +consequence, scoped to piece 6, not a defect to report during review of this +piece. + +The reason for splitting it: choosing a dark highlight theme is a design +decision with no reference in the artboards, and folding it into the token swap +would make the riskiest piece of the redesign larger and harder to review. The +cost of the split is that the branch carries visibly broken code blocks between +piece 1 and piece 6, so piece 6 should not be deferred far. + +## Risks + +- **The docs repaint is the whole risk.** Documentation was never designed + against this palette. The `Antora docs` screen in `Apache Camel Site Pages` + covers nav, toolbar, article, and TOC, but not every AsciiDoc construct the + documentation actually uses. Constructs with no design reference get tokens + and nothing else. +- **Admonitions.** `SCOPE.md` keeps the semantic hues but moves TIP and NOTE to + an orange tint with an orange left rule. The remaining three keep hues chosen + against a white background and need a contrast check on paper. +- **Mobile.** `--body-font-size` is 17px below desktop, so `calc(N / 18 * 1rem)` + values are about 6 percent smaller there. Existing behavior, but it means px + fidelity to the artboards holds only at desktop. + +## Follow-ups, not this piece + +- Removing the unused greyscale ramp once later pieces prove nothing binds it. +- Deciding whether `--color-camel-orange-light` survives the redesign. +- The `.button.dark/.light` pill radius change, which `SCOPE.md` puts in shared + chrome (piece 2). From c6b2dc0eab1ca8c786fe61c407bae301e78fb63a Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Thu, 3 Sep 2026 00:26:12 -0400 Subject: [PATCH 002/209] docs: stack piece 6 on piece 1 in the foundation spec Piece numbers become identities rather than sequence; landing order is 1, 6, 2, 3, 4, 5 so the branch is never reviewable with broken code blocks. SCOPE.md section 2a now specifies the dark hljs theme and the chroma mapping, so piece 6 is a spec rather than an open decision. Records that piece 1 cannot merge on its own as a result. Co-Authored-By: Claude Opus 5 (1M context) --- ...-03-foundation-tokens-typography-design.md | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md b/docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md index 3b412f0b2c4..8c950ed767d 100644 --- a/docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md +++ b/docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md @@ -5,6 +5,12 @@ Piece 1 of 6 of the camel-website redesign. Branch `feature/new-website-design`. The six pieces: 1 foundation (this document), 2 shared chrome, 3 Antora docs UI, 4 designed Hugo pages, 5 undesigned template sweep, 6 syntax highlighting theme. +Piece numbers are identities, not sequence. Landing order is **1, 6, 2, 3, 4, +5**: piece 6 stacks directly on piece 1 so the branch is never left in a +reviewable state with broken code blocks. Piece 6 is specified in `SCOPE.md` +section 2a, which gives the full hljs class-to-color table and the chroma +mapping for Hugo blog posts. + Design source: `Apache Camel Home.dc.html` and `Apache Camel Site Pages.dc.html`, with decisions recorded in the design handoff `SCOPE.md` (2026-09-03). @@ -37,7 +43,9 @@ Out of scope, deferred to later pieces: - Antora nav, toolbar, article, and TOC treatments (piece 3). - Any Hugo page layout, including the home page and `/projects/` (piece 4). - Release notes and release partials (piece 5). -- The syntax highlighting theme in `highlight.css` (piece 6). +- The syntax highlighting theme in `highlight.css` and the chroma mapping for + Hugo blog posts (piece 6, specified in `SCOPE.md` section 2a, landing + immediately after this piece). ## Decisions @@ -207,20 +215,24 @@ legibility regresses, that is a finding to report and resolve before piece 2, not something to work around in later pieces. Syntax-highlighted code is excluded from item 5; see below. -## Accepted temporary regression +## Code blocks between piece 1 and piece 6 `highlight.css` is tuned against a light `--pre-background`. This piece sets -`--pre-background` to `--color-ink` without touching that theme, so highlighted -code renders light-on-dark token colors against a dark ground and will look -wrong on every page that carries a code block. That is a known and accepted -consequence, scoped to piece 6, not a defect to report during review of this -piece. - -The reason for splitting it: choosing a dark highlight theme is a design -decision with no reference in the artboards, and folding it into the token swap -would make the riskiest piece of the redesign larger and harder to review. The -cost of the split is that the branch carries visibly broken code blocks between -piece 1 and piece 6, so piece 6 should not be deferred far. +`--pre-background` to `--color-ink` without touching that theme, so at the end +of piece 1 in isolation, highlighted code renders dark token colors against a +dark ground on every page carrying a code block. + +Piece 6 stacks directly on this one to close that window, so no reviewer sees a +branch state with broken code blocks. The consequence for this piece is narrow +but real: piece 1 cannot be merged on its own, and its verification pass has to +ignore syntax-highlighted code. Anything else about code blocks is in scope +here, including the `pre` background and radius, the `--pre-font-color` binding, +and inline `code`, none of which depend on the highlight theme. + +The split is kept rather than merging the two because the token swap and the +highlight theme fail in different ways and are worth reviewing separately: one +is a mechanical re-point across a shared stylesheet, the other is a color +palette that has to hold contrast across a dozen token classes. ## Risks From c670bc60d31fb2b50eb8d6c79249ae4e07c893b0 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Thu, 3 Sep 2026 00:47:28 -0400 Subject: [PATCH 003/209] docs: implementation plan for redesign foundation (piece 1) Co-Authored-By: Claude Opus 5 (1M context) --- ...2026-09-03-foundation-tokens-typography.md | 926 ++++++++++++++++++ 1 file changed, 926 insertions(+) create mode 100644 docs/superpowers/plans/2026-09-03-foundation-tokens-typography.md diff --git a/docs/superpowers/plans/2026-09-03-foundation-tokens-typography.md b/docs/superpowers/plans/2026-09-03-foundation-tokens-typography.md new file mode 100644 index 00000000000..5529b5957da --- /dev/null +++ b/docs/superpowers/plans/2026-09-03-foundation-tokens-typography.md @@ -0,0 +1,926 @@ +# Foundation: Tokens and Typography Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Replace the site's font stack, color palette, and container widths at `:root` in the shared Antora UI stylesheet, so every later piece of the redesign builds on settled tokens. + +**Architecture:** All work happens in `antora-ui-camel`, whose `src/css` bundle is consumed by both the Antora documentation and every Hugo page. Tokens are added first as unreferenced declarations, then the existing semantic vars are re-pointed at them in one atomic commit, then the stylesheets that hardcoded greys are repaired. No markup, no layout, no page templates. + +**Tech Stack:** CSS custom properties, gulp 4 + postcss (`postcss-import`, `postcss-url`, `postcss-custom-properties`, `autoprefixer`, `cssnano`), stylelint 15 with `stylelint-config-standard`, Yarn workspaces, Hugo, Antora. + +**Spec:** `docs/superpowers/specs/2026-09-03-foundation-tokens-typography-design.md` + +## Global Constraints + +- Branch is `feature/new-website-design`. This is a git worktree; never use bare `git stash` / `git stash pop`. +- `--rem-base` stays at `18`. Every px value from the artboards is written as `calc(N / var(--rem-base) * 1rem)`. +- `--color-camel-orange` keeps `#e97826`. Do not redeclare it; `stylelint-config-standard` rejects duplicate custom properties in one block. +- `--color-asf-dark-blue`, `--color-asf-moderate-blue`, `--color-asf-light-blue`, `--color-camel-orange-light`, and the `--color-smoke-*` / `--color-gray-*` / `--color-jet-*` ramps stay declared. Only their references change. +- No new dependencies beyond `@fontsource/archivo` and `@fontsource/jetbrains-mono`, both already approved. +- `highlight.css` is not touched by this plan. Piece 6 owns it and lands immediately after this piece. +- Every task ends with `yarn workspace antora-ui-camel run build` succeeding. That task runs stylelint, so a lint failure is a build failure. +- American English. No em dashes in code comments or docs. + +## Deviations from the spec + +The spec was written before the build pipeline and `base.css` were read in full. Six corrections, all reflected in the tasks below. Raise them with the author if any is unwelcome. + +1. **Verification item 1 is wrong.** Fonts are not revved. `gulp.d/tasks/build.js:41-53` uses `postcss-url` to copy each `woff`/`woff2` to `public/_/font/` and rewrite the URL to `../font/`. `rev-manifest.json` will never contain a font entry. The correct evidence is the file appearing in `public/_/font/` and the built CSS referencing it. +2. **Spec section 3 is wrong about `pre`.** It says "`pre` inherits its color". It does not: `base.css:49-54` sets `color: var(--code-font-color)` on `code, kbd, pre`. So re-pointing `--code-font-color` to ink and `--pre-background` to ink makes code blocks ink-on-ink. The `--pre-font-color` binding is therefore mandatory in the same commit as the re-point, not optional cleanup. Task 5 does both together. +3. **Added: bind `--display-font-family`.** The spec declares the token but never binds it to a selector. No heading anywhere binds a font family today; they all inherit `--body-font-family` from `body` in `base.css:29-35`. Without a binding, Archivo is downloaded and never rendered, and the piece cannot be evaluated against the artboards. Task 2 adds one element-level rule in `base.css`. +4. **Added: `gulpfile.js` needs an edit.** `glob.formatcss` (`gulpfile.js:21-25`) excludes the two generated typeface files from `gulp format`. Removing `typeface-droid-sans-mono.css` while leaving its exclusion behind leaves a stale path, and the two new typeface files need the same exclusion. Task 2 handles it. +5. **Flagged, not changed:** `.doc h1` through `.doc h6` carry `text-transform: uppercase` (`doc.css:19-31`). The artboards use sentence-case display headings. Uppercase Archivo at weight 800 will not match the design. This is a heading treatment, so it belongs to piece 3, but it means heading fidelity cannot be judged during this piece's visual check. +6. **Aliased vars need no separate edit.** `--nav-background` and `--toolbar-background` already resolve through `--panel-background`; `--toolbar-border-color` and `--toc-border-color` already resolve through `--panel-border-color`. Re-pointing the two parents satisfies the spec's table for all six. Do not add redundant declarations. + +## File structure + +| File | Responsibility | Tasks | +|---|---|---| +| `antora-ui-camel/package.json` | Font package dependencies | 1, 2 | +| `antora-ui-camel/src/css/typeface-archivo.css` | `@font-face` declarations for Archivo (new) | 1 | +| `antora-ui-camel/src/css/typeface-jetbrains-mono.css` | `@font-face` declarations for JetBrains Mono (new) | 1 | +| `antora-ui-camel/src/css/typeface-droid-sans-mono.css` | Deleted | 2 | +| `antora-ui-camel/src/css/site.css` | Import order | 1, 2 | +| `antora-ui-camel/gulpfile.js` | Format glob exclusions | 2 | +| `antora-ui-camel/src/css/vars.css` | All tokens: palette, semantics, type, widths | 3, 4, 5 | +| `antora-ui-camel/src/css/base.css` | Element defaults: heading font family | 2 | +| `antora-ui-camel/src/css/doc.css` | `--pre-font-color` binding, repaint repair | 5, 6 | + +Build output for every verification step is `antora-ui-camel/public/_/`, per `gulpfile.js:9-12` (`destDir = 'public/_'`). + +## A note on testing + +This piece has no unit-testable surface: it is a stylesheet token change, and the repo has no CSS test harness to add to. Classical TDD does not apply and pretending otherwise would produce tests that cannot fail. The substitute used throughout is a **shell assertion against the build output** that provably fails before the change and passes after. Each task states the failing command first and the same command as the pass check. Task 7 is the human visual gate that no assertion can replace. + +--- + +### Task 1: Add Archivo and JetBrains Mono faces + +Purely additive. Droid Sans Mono stays wired up, so nothing changes visually. This isolates "did the font pipeline accept a `@fontsource` package" from every later question. + +**Files:** +- Modify: `antora-ui-camel/package.json` (devDependencies) +- Create: `antora-ui-camel/src/css/typeface-archivo.css` +- Create: `antora-ui-camel/src/css/typeface-jetbrains-mono.css` +- Modify: `antora-ui-camel/src/css/site.css:1-2` + +**Interfaces:** +- Consumes: nothing. +- Produces: the font families `'Archivo'` (weights 500, 600, 700, 800) and `'JetBrains Mono'` (weights 400, 500, 600), available to any stylesheet in the bundle. + +- [ ] **Step 1: Write the failing assertion** + +Run this now and record the output. It is the check Step 7 repeats. + +```bash +cd antora-ui-camel && ls public/_/font/ 2>/dev/null | grep -c -E 'archivo|jetbrains' || echo 0 +``` + +Expected: `0`, or an error that `public/_/font/` does not exist. + +- [ ] **Step 2: Install the packages** + +```bash +yarn workspace antora-ui-camel add -D @fontsource/archivo @fontsource/jetbrains-mono +``` + +- [ ] **Step 3: Confirm the real filenames before writing any CSS** + +`@fontsource` v5 names static faces `--- + + + +
pending
+ + + +``` + +- [ ] **Step 2: Write the harness** + +Create `tests/hugo/build.sh`: + +```bash +#!/usr/bin/env bash +# Build the Hugo site, then optionally screenshot or measure pages from it. +# +# The release-note pages call getJSON against the GitHub API. Without a token +# those calls hit the unauthenticated rate limit and the build exits non-zero +# with about 32 errors, so this script resolves a token itself rather than +# making every caller do it. The token is exported to hugo only; it is never +# printed, logged, or passed as an argument. +# +# Usage: +# tests/hugo/build.sh build only +# tests/hugo/build.sh --shots / projects/ build, then screenshot each path +# tests/hugo/build.sh --measure / 'sel@color' build, then print computed styles +# +# Env: HUGO_OUT, HUGO_PORT (default 8899), SHOT_WIDTHS, SHOT_HEIGHT (default 2400) +set -euo pipefail + +REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$REPO" + +OUT="${HUGO_OUT:-$(mktemp -d)}" +SITE="$OUT/site" +LOG="$OUT/hugo-build.log" +SHOTS="$OUT/shots" +PORT="${HUGO_PORT:-8899}" +SHOT_HEIGHT="${SHOT_HEIGHT:-2400}" +CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" + +if [ -z "${GITHUB_TOKEN:-}" ]; then + if command -v gh >/dev/null 2>&1 && _tok="$(gh auth token 2>/dev/null)" && [ -n "$_tok" ]; then + GITHUB_TOKEN="$_tok" + export GITHUB_TOKEN + unset _tok + else + echo "warning: no GITHUB_TOKEN and 'gh auth token' failed." >&2 + echo " Expect ~32 getJSON rate-limit errors and a non-zero exit." >&2 + fi +fi + +if ! node_modules/.bin/hugo --cacheDir "$REPO/.hugo_data" -d "$SITE" >"$LOG" 2>&1; then + echo "hugo build FAILED. Last 20 lines of $LOG:" >&2 + tail -20 "$LOG" >&2 + exit 1 +fi + +errors="$(grep -c '^ERROR' "$LOG" || true)" +if [ "$errors" != "0" ]; then + echo "hugo exited 0 but logged $errors error(s). See $LOG" >&2 + exit 1 +fi +echo "hugo: 0 errors -> $SITE" + +start_server() { + python3 -m http.server "$PORT" --directory "$SITE" >/dev/null 2>&1 & + SERVER_PID=$! + trap 'kill "$SERVER_PID" 2>/dev/null || true' EXIT + for _ in 1 2 3 4 5 6 7 8 9 10; do + if curl -fsS -o /dev/null "http://localhost:$PORT/"; then return 0; fi + sleep 0.5 + done + echo "server did not come up on port $PORT" >&2 + exit 1 +} + +case "${1:-}" in + --shots) + shift + cp tests/hugo/_measure.html "$SITE/_measure.html" + mkdir -p "$SHOTS" + start_server + for path in "$@"; do + slug="$(printf '%s' "${path:-index}" | tr '/' '_' | sed 's/^_*//; s/_*$//')" + : "${slug:=index}" + for width in ${SHOT_WIDTHS:-1440 1024 626}; do + "$CHROME" --headless --disable-gpu --hide-scrollbars \ + --screenshot="$SHOTS/${slug}-${width}.png" \ + --window-size="${width},${SHOT_HEIGHT}" \ + --virtual-time-budget=5000 \ + "http://localhost:$PORT/$path" >/dev/null 2>&1 + done + done + echo "shots: $SHOTS" + ;; + --measure) + shift + path="${1:-/}" + query="${2:-}" + cp tests/hugo/_measure.html "$SITE/_measure.html" + start_server + "$CHROME" --headless --disable-gpu --virtual-time-budget=5000 --dump-dom \ + "http://localhost:$PORT/_measure.html#$(printf '%s|%s' "$path" "$query")" \ + 2>/dev/null | sed -n '/
/,/<\/pre>/p' | sed 's/<[^>]*>//g'
+    ;;
+esac
+```
+
+- [ ] **Step 3: Add the script entry**
+
+In `package.json`, after the `"build:antora-ui"` line, add:
+
+```json
+    "check:hugo": "bash tests/hugo/build.sh"
+```
+
+Remember the comma on the preceding line.
+
+- [ ] **Step 4: Prove the harness on the unmodified site**
+
+```bash
+bash tests/hugo/build.sh
+```
+Expected: `hugo: 0 errors -> /var/folders/.../site` and exit 0.
+
+```bash
+bash tests/hugo/build.sh --shots / projects/
+```
+Expected: `shots: ` and six PNG files. `projects/` does not exist yet, so its three shots are the 404 page. That is expected and confirms Task 2's necessity.
+
+```bash
+bash tests/hugo/build.sh --measure / '.navbar-brand@color;body@background-color'
+```
+Expected: two lines with real values and non-zero `box=`, not `NOT FOUND`.
+
+**Open the 1440px screenshot of `/` and confirm it renders the current site.** If the page is unstyled, the `_` asset tree did not copy and the harness is not usable.
+
+- [ ] **Step 5: Commit**
+
+The file needs its executable bit set in git without a `chmod` on disk:
+
+```bash
+git add tests/hugo/build.sh tests/hugo/_measure.html package.json
+git update-index --add --chmod=+x tests/hugo/build.sh
+git commit -m "test(hugo): add a build and screenshot harness
+
+Builds the site with an authenticated token resolved from gh, fails loudly
+on any Hugo error, and serves the output for screenshots and computed-style
+measurement. Without a token the build exits non-zero with about 32 getJSON
+rate-limit errors, so the harness owns the token rather than each caller.
+
+_measure.html reads computed styles from a same-origin iframe so measurement
+needs no browser-automation dependency."
+```
+
+---
+
+### Task 2: Land the /projects/ page
+
+**Files:**
+- Create: `data/projects.yaml`, `content/projects/_index.md`, `layouts/projects/list.html`, `antora-ui-camel/src/css/projects.css`
+- Modify: `antora-ui-camel/src/css/site.css`
+
+**Interfaces:**
+- Consumes: the harness from Task 1.
+- Produces: a working `/projects/` route. Task 9's tiles CTA links to it.
+
+**Context:** These files come from `design_handoff_camel_website_redesign/integration/`. Copy them, then apply the three corrections below. Two are defects that would break the build or the layout.
+
+- [ ] **Step 1: Copy the three files that need no structural change**
+
+Copy `integration/data/projects.yaml` to `data/projects.yaml` and `integration/content/projects/_index.md` to `content/projects/_index.md`, both byte-for-byte. Copy `integration/layouts/projects/list.html` to `layouts/projects/list.html`.
+
+- [ ] **Step 2: Correction 1, delete the line that breaks the build**
+
+In `layouts/projects/list.html`, delete line 3 entirely:
+
+```
+{{- $manifest := .Site.Data "rev-manifest" }}
+```
+
+`.Site.Data` is a map, not a method. Hugo aborts with "can't give argument to non-function .Site.Data". The variable is never read; the template resolves icons inline with `index site.Data "rev-manifest"`.
+
+- [ ] **Step 3: Correction 2, drop `static` from the article class**
+
+In `layouts/projects/list.html`, change:
+
+```html
+      
+``` + +to: + +```html +
+``` + +`static.css` contains `.static p { margin: 1rem 0 0; }` at specificity (0,1,1), which beats `.project-card-desc`, `.project-card-stats`, `.projects-intro`, and `.projects-footnote` at (0,1,0). Every card paragraph would take the wrong margin. `.projects` sets its own `max-width` and `margin: 0 auto`, so nothing from `.static` is needed. + +- [ ] **Step 4: Correction 3, retarget projects.css to the shared tokens** + +Copy `integration/antora-ui-camel/src/css/projects.css` to `antora-ui-camel/src/css/projects.css`, then replace the page-scoped variable block. SCOPE says the page-scoped vars go away. Delete these six lines from the `.projects` rule: + +```css + --projects-paper: #faf7f1; + --projects-line: #e7e0d5; + --projects-line-hover: #d9ccb8; + --projects-ink: #211c17; + --projects-ink-soft: #5c554c; + --projects-ink-muted: #8a8074; + --projects-mono: var(--monospace-font-family); +``` + +(`--projects-paper` is declared but never used; it goes with the rest.) + +Then substitute throughout the file: + +| Old | New | +|---|---| +| `var(--projects-line)` | `var(--color-line)` | +| `var(--projects-line-hover)` | `var(--color-line-hover)` | +| `var(--projects-ink)` | `var(--color-ink)` | +| `var(--projects-ink-soft)` | `var(--color-ink-soft)` | +| `var(--projects-ink-muted)` | `var(--color-ink-soft)` | +| `var(--projects-mono)` | `var(--monospace-font-family)` | + +`--projects-ink-muted` maps to `--color-ink-soft`, **not** `--color-ink-muted`. All five of its consumers carry small informational text: `.projects-back` (13px), `.projects-group-title` (15px), `.project-card-stats` (11.5px), `.projects-footnote` (14px), `.project-card-link--muted` (13.5px). `#8a8074` reaches only 3.35:1 on paper-2 and 3.62:1 on paper. `--color-ink-soft` reaches 6.36:1 and 6.87:1. This is spec decision D6. + +- [ ] **Step 5: Retarget the link colors and convert raw px** + +In `antora-ui-camel/src/css/projects.css`: + +```css +.projects-back:hover { + color: var(--link_hover-font-color); + text-decoration: none; +} +``` + +```css +.project-card-link { + color: var(--link-font-color); + font-size: calc(13.5 / var(--rem-base) * 1rem); + font-weight: 700; +} + +.project-card-link:hover { + color: var(--link_hover-font-color); + text-decoration: none; +} +``` + +Convert the three raw px values that are neither hairlines nor rule widths: + +```css +.project-card { + border-radius: calc(13 / var(--rem-base) * 1rem); +} + +.project-card-icon { + height: calc(34 / var(--rem-base) * 1rem); + width: calc(34 / var(--rem-base) * 1rem); +} + +.project-card-icon--lg { + height: calc(44 / var(--rem-base) * 1rem); + width: calc(44 / var(--rem-base) * 1rem); +} +``` + +Leave `box-shadow: 0 14px 34px -22px rgb(33 28 23 / 35%)` and the `1px` borders as raw px. + +- [ ] **Step 6: Register the module** + +In `antora-ui-camel/src/css/site.css`, add after the `docs.css` line: + +```css +@import url('projects.css'); +``` + +- [ ] **Step 7: Build and verify** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots projects/ +``` + +Expected: stylelint passes, `hugo: 0 errors`, three screenshots. + +```bash +bash tests/hugo/build.sh --measure projects/ '.projects@max-width;.project-card-stats@color;.projects-group-title@color;.project-card@border-radius' +``` + +Expected: `max-width=1200px`; both colors `rgb(92, 85, 76)`; `border-radius` 13px. A `NOT FOUND` on `.project-card-stats` means the data file did not load. + +**Open all three screenshots.** Confirm: four cards across in the primary group at 1440px, two across at 1024px, one at 626px; the specialized cards are icon-left rows; nothing overflows. + +- [ ] **Step 8: Commit** + +The bundle regenerates `public/_`, so stage everything rather than naming files: + +```bash +git add -A +git commit -m "feat(projects): add the All Camel Projects page + +Lands the handoff's pre-written /projects/ slice with three corrections: + +- layouts/projects/list.html called .Site.Data as a function, which aborts + the Hugo build. The variable was never read; the line is deleted. +- The article carried both 'static' and 'projects'. static.css has + '.static p' at (0,1,1), which beats every card paragraph rule at (0,1,0), + so every card paragraph took the wrong margin. 'static' is dropped. +- The page-scoped --projects-* vars are replaced by the shared tokens. The + muted text color maps to --color-ink-soft rather than --color-ink-muted; + all five consumers are small informational text and #8a8074 reaches only + 3.35:1 on paper-2." +``` + +--- + +### Task 3: Switch the home page over to data + +This is the one task that cannot be split: the old markup, the old CSS, and the old content must leave together, and something valid must replace them. It delivers a short but complete home page: header, hero, footer. + +**Files:** +- Create: `data/home.yaml` +- Modify: `content/_index.md`, `layouts/index.html`, `antora-ui-camel/src/css/frontpage.css`, `antora-ui-camel/src/css/vars.css` + +**Interfaces:** +- Consumes: Task 1's harness. +- Produces: `data/home.yaml` in full (later tasks read sections from it and add no keys); the CSS vocabulary `.home-section`, `.home-section-head`, `.home-eyebrow`, `.home-section-sub`, `.home-grid`, `.home-card`, which Tasks 5, 6, 7, and 9 reuse verbatim; and four new tokens. + +- [ ] **Step 1: Add the four new tokens** + +In `antora-ui-camel/src/css/vars.css`, add to `:root` beside the existing `--color-dark-2` and `--color-on-dark-soft` declarations: + +```css + --color-dark-3: #1c1813; + --color-prompt: #e0805a; + --color-on-dark-dim: #cabfb0; + --color-button-on-dark-border: #4a443c; +``` + +Keep the file's existing alphabetical or grouped ordering; do not reorder existing lines. + +- [ ] **Step 2: Point `.button.on-dark` at the new border token** + +In `antora-ui-camel/src/css/frontpage.css`, change the existing rule: + +```css +a.button.on-dark, +a.button.on-dark:hover { + background-color: transparent; + border: 1px solid var(--color-button-on-dark-border); + color: var(--color-on-dark); +} +``` + +`--color-dark-line` (`#34302a`) is nearly invisible against ink; the design uses `#4a443c`. + +- [ ] **Step 3: Write `data/home.yaml`** + +Create the complete file. Later tasks read from it and add nothing. + +```yaml +# Home page copy and figures. Rendered by layouts/index.html. +# +# The four figures under `stats` were measured on 2026-09-04 against +# apache/camel. The design reference's numbers were illustrative: two of them +# overstated the project and one understated it. Recheck with: +# gh api "repos/apache/camel/commits?per_page=1&sha=main" -i | grep -i '^link:' +# gh api "repos/apache/camel/contributors?per_page=1&anon=true" -i | grep -i '^link:' +# gh api "repos/apache/camel/tags?per_page=1" -i | grep -i '^link:' +# ls public/components/next/*-component.html | wc -l + +hero: + eyebrow: "In production since 2007 · Apache License 2.0" + title: Apache Camel + tagline: The Open Source Integration Framework + lead: >- + Connect anything. Route everything. 390+ connectors, written in Java, YAML, + or XML, deployed on Spring Boot, Quarkus, or standalone with the Camel CLI. + primary_cta: + label: "Get Started →" + url: /manual/getting-started.html + secondary_cta: + label: What is Camel? + url: /what-is-apache-camel/ + command: camel init hello.yaml && camel run hello.yaml + +stats: + label: Used by thousands of companies worldwide + items: + - num: 83,000+ + label: commits + source: 83,428 on apache/camel main, GitHub API, 2026-09-04 + - num: 1,500+ + label: contributors + source: 1,583 distinct authors (anon=true), GitHub API, 2026-09-04 + - num: 390+ + label: components + source: 398 component pages in the built docs, 2026-09-04 + - num: 300+ + label: releases + source: 307 tags on apache/camel, GitHub API, 2026-09-04 + +get_started: + eyebrow: Get Started Your Way + heading: Three clear paths + items: + - name: Spring Boot + badge: Most popular + description: >- + Add Camel to your existing Spring Boot project with a single starter + dependency. Starters for 390+ components. + code: | + # pom.xml + camel-spring-boot-starter + url: /camel-spring-boot/latest/ + - name: Quarkus + badge: "" + description: >- + Cloud-native Camel with fast startup and native compilation. Add + extensions to your Quarkus project. + code: | + quarkus ext add + camel-quarkus-kafka + url: /camel-quarkus/latest/ + - name: Camel CLI + badge: fastest + description: >- + Zero project setup. Just YAML and a terminal, perfect for prototyping, + learning, and AI-assisted workflows. + code: | + camel init hello.yaml + camel run hello.yaml + url: /manual/camel-jbang.html + +features: + eyebrow: Why developers choose Camel + heading: Built for real integration work + items: + - tag: 390+ + title: Connectors out of the box + body: >- + Kafka, REST, JDBC, AWS, Azure, GCP, SAP, Salesforce. Connect to + anything, all out of the box. + - tag: "3" + title: Write it your way + body: >- + Java DSL, YAML, or XML. The same routes, your choice of syntax, mixed + and matched across a project. + - tag: AI + title: AI-ready integration + body: >- + MCP server for AI coding assistants. Use camel trace and camel test to + verify AI-generated routes. + - tag: EIP + title: Battle-tested routing + body: >- + Route, transform, filter, split, and aggregate. Proven across millions + of production deployments. + - tag: CI + title: Standard build + body: >- + Export to Maven or Gradle and deploy with any CI/CD pipeline. A standard + Java app, no special runtime. + - tag: OSS + title: Open source + body: >- + Apache License 2.0, 1,500+ contributors. Fully open community, no vendor + lock-in. + +example: + eyebrow: See it in action + heading: Route messages from Kafka to a database + subhead: The same route, in your choice of syntax. No boilerplate. + run_command: camel run kafka-to-db.yaml + tabs: + - id: yaml + label: YAML + code: | + # Route messages from Kafka into a database + - from: + uri: kafka:orders + steps: + - unmarshal: + json: {} + - to: + uri: >- + sql:INSERT INTO orders (id, amount) + VALUES (:#id, :#amount) + - id: java + label: Java + code: | + from("kafka:orders") + .unmarshal().json() + .to("sql:INSERT INTO orders (id, amount) " + + "VALUES (:#id, :#amount)"); + - id: xml + label: XML + code: | + + + + + + +tiles: + eyebrow: Core Projects + heading: Start with what most teams use + subhead: The framework and its two primary runtimes, plus the CLI. + items: + - name: Camel Core + icon: logo-d + description: >- + The integration framework itself: routing engine, EIPs, and the + component model. + url: /camel-core/ + - name: Camel Spring Boot + icon: spring-boot + description: >- + Camel on Spring Boot with auto-configured starters for 390+ components. + url: /camel-spring-boot/latest/ + - name: Camel Quarkus + icon: quarkus + description: >- + Cloud-native Camel packaged as Quarkus extensions with native-image + support. + url: /camel-quarkus/latest/ + - name: Camel CLI + icon: cli + description: >- + Terminal tooling for dev, test, trace, and AI. Get started in seconds. + url: /manual/camel-jbang.html + cta: + label: "Explore all Camel projects →" + url: /projects/ + +closing: + heading: Camel is your project + body: >- + An Apache Software Foundation project under the Apache v2 license. A + complete open community, always listening to proposals, comments, and + contributions. + primary_cta: + label: Be involved + url: /community/ + secondary_cta: + label: How to contribute + url: /community/contributing/ +``` + +- [ ] **Step 4: Reduce `content/_index.md` to front matter** + +Replace the entire file with only its existing front matter block. Keep every key and value exactly as it is today; delete everything from the first blank line after the closing `---` to the end of the file. + +- [ ] **Step 5: Rewrite `layouts/index.html` with the hero only** + +```html +{{ partial "header.html" . }} +{{- $home := .Site.Data.home }} + +
+ + {{- with $home.hero }} +
+
+

{{ .eyebrow }}

+

{{ .title }}

+

{{ .tagline }}

+

{{ .lead }}

+

+ {{ .primary_cta.label }} + {{ .secondary_cta.label }} +

+
+ $ {{ .command }} + +
+
+
+ Apache Camel +
+
+ {{- end }} + +
+ +{{ partial "footer.html" . }} +``` + +Note: `{{- with $home.hero }}` rebinds the dot, so `.Site.Data` inside the block would resolve against the hero map and fail. Use `site.Data`, the global, for every rev-manifest lookup inside a `with` or `range`. `layouts/projects/list.html` does the same. + +- [ ] **Step 6: Rewrite `frontpage.css`** + +Replace the whole file. Keep only the `a.button` rules (they are consumed by `header.html` and five content files); everything else goes. + +```css +/* Buttons, shared by the header, the home page, and static content pages. */ + +a.button { + align-items: center; + background-image: none; + border-radius: calc(8 / var(--rem-base) * 1rem); + display: inline-flex; + font-size: calc(15 / var(--rem-base) * 1rem); + font-weight: 700; + gap: calc(8 / var(--rem-base) * 1rem); + line-height: 1; + margin: 0.5rem; + padding: calc(13 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem); + white-space: nowrap; +} + +a.button.dark { + background-color: var(--color-camel-orange); + color: var(--color-white); +} + +a.button.dark:hover { + background-color: var(--color-orange-deep); + color: var(--color-white); +} + +a.button.light, +a.button.light:hover { + background-color: var(--color-white); + border: 1px solid var(--color-line); + color: var(--color-ink); +} + +a.button.on-dark, +a.button.on-dark:hover { + background-color: transparent; + border: 1px solid var(--color-button-on-dark-border); + color: var(--color-on-dark); +} + +/* Home page (layouts/index.html, data/home.yaml) */ + +.home { + color: var(--color-ink-2); +} + +.home a { + background-image: none; + text-decoration: none; +} + +/* Shared section vocabulary, reused by every home section. */ + +.home-section { + margin: 0 auto; + max-width: var(--frontpage-max-width); + padding: calc(66 / var(--rem-base) * 1rem) var(--page-padding-x) + calc(20 / var(--rem-base) * 1rem); +} + +.home-section-head { + margin-bottom: calc(44 / var(--rem-base) * 1rem); + text-align: center; +} + +.home-eyebrow { + color: var(--color-orange-deep); + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.08em; + margin: 0; + text-transform: uppercase; +} + +.home-section-head h2 { + font-family: var(--display-font-family); + font-size: calc(38 / var(--rem-base) * 1rem); + font-weight: 800; + letter-spacing: -0.025em; + line-height: 1.15; + margin: calc(12 / var(--rem-base) * 1rem) 0 0; +} + +.home-section-sub { + color: var(--color-ink-soft); + font-size: calc(16 / var(--rem-base) * 1rem); + margin: calc(6 / var(--rem-base) * 1rem) 0 0; +} + +.home-grid { + display: grid; + list-style: none; + margin: 0; + padding: 0; +} + +.home-card { + background: var(--color-white); + border: 1px solid var(--color-line); + border-radius: calc(13 / var(--rem-base) * 1rem); + display: flex; + flex-direction: column; + transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s; +} + +.home-card:hover { + border-color: var(--color-line-hover); + box-shadow: 0 14px 34px -22px rgb(33 28 23 / 35%); + transform: translateY(-2px); +} + +/* Hero */ + +.home-hero { + align-items: center; + display: grid; + gap: calc(56 / var(--rem-base) * 1rem); + grid-template-columns: 1.05fr 0.95fr; + margin: 0 auto; + max-width: var(--frontpage-max-width); + padding: calc(64 / var(--rem-base) * 1rem) var(--page-padding-x) + calc(56 / var(--rem-base) * 1rem); +} + +.home-hero-badge { + align-items: center; + background: var(--color-orange-tint); + border-radius: calc(20 / var(--rem-base) * 1rem); + color: var(--color-orange-deep); + display: inline-flex; + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); + font-weight: 500; + gap: calc(8 / var(--rem-base) * 1rem); + letter-spacing: 0.02em; + margin: 0; + padding: calc(6 / var(--rem-base) * 1rem) calc(12 / var(--rem-base) * 1rem); +} + +.home-hero h1 { + color: var(--color-ink); + font-family: var(--display-font-family); + font-size: calc(60 / var(--rem-base) * 1rem); + font-weight: 800; + letter-spacing: -0.03em; + line-height: 1.02; + margin: calc(20 / var(--rem-base) * 1rem) 0 0; +} + +.home-hero-tagline { + color: var(--color-ink-2); + font-family: var(--display-font-family); + font-size: calc(25 / var(--rem-base) * 1rem); + font-weight: 600; + line-height: 1.2; + margin: calc(14 / var(--rem-base) * 1rem) 0 0; +} + +.home-hero-lead { + color: var(--color-ink-soft); + font-size: calc(17.5 / var(--rem-base) * 1rem); + line-height: 1.55; + margin: calc(20 / var(--rem-base) * 1rem) 0 0; + max-width: calc(520 / var(--rem-base) * 1rem); + text-wrap: pretty; +} + +.home-hero-actions { + display: flex; + gap: calc(14 / var(--rem-base) * 1rem); + margin: calc(30 / var(--rem-base) * 1rem) 0 0; +} + +.home-hero-actions .button { + font-size: calc(15.5 / var(--rem-base) * 1rem); + margin: 0; + padding: calc(14 / var(--rem-base) * 1rem) calc(26 / var(--rem-base) * 1rem); +} + +.home-hero-art { + align-items: center; + aspect-ratio: 1 / 0.86; + background: radial-gradient(circle at 50% 50%, var(--color-paper-2) 0%, var(--color-paper) 70%); + border: 1px solid var(--color-line); + border-radius: calc(16 / var(--rem-base) * 1rem); + display: flex; + justify-content: center; +} + +.home-hero-art img { + display: block; + filter: drop-shadow(0 30px 50px rgb(233 120 38 / 30%)); + height: auto; + width: 62%; +} + +/* Hero CLI bar */ + +.home-cli { + align-items: stretch; + background: var(--color-ink); + border: 1px solid var(--color-dark-line); + border-radius: calc(9 / var(--rem-base) * 1rem); + display: flex; + margin: calc(26 / var(--rem-base) * 1rem) 0 0; + max-width: calc(520 / var(--rem-base) * 1rem); + overflow: hidden; +} + +.home-cli-command { + color: var(--syntax-text); + flex: 1; + font-family: var(--monospace-font-family); + font-size: calc(13.5 / var(--rem-base) * 1rem); + overflow: hidden; + padding: calc(14 / var(--rem-base) * 1rem) calc(16 / var(--rem-base) * 1rem); + text-overflow: ellipsis; + white-space: nowrap; +} + +.home-cli-prompt { + color: var(--color-prompt); +} + +.home-cli-copy { + background: var(--color-dark-2); + border: 0; + border-left: 1px solid var(--color-dark-line); + color: var(--syntax-text); + cursor: pointer; + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + padding: 0 calc(16 / var(--rem-base) * 1rem); +} + +.home-cli-copy:hover { + background: #3a342c; +} +``` + +`a.button` carries `margin: 0.5rem`, which would put 16px between two adjacent buttons and defeat any `gap` smaller than that. `.home-hero-actions .button` therefore zeroes the margin so the 14px `gap` is the only spacing. Task 10 does the same for the closing band. + +`#3a342c` is a one-off hover value used exactly once and gets no token. + +- [ ] **Step 7: Build and verify** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots / +bash tests/hugo/build.sh --measure / '.home-hero@grid-template-columns;.home-hero h1@font-size,font-family,text-transform;.home-hero-badge@color,background-color;.home-cli-command@color;.home-hero-art@aspect-ratio' +``` + +Expected: `h1` font-size `60px`, family beginning `Archivo`, and `text-transform: none`. If it reports `uppercase`, an old `section.frontpage` rule survived the rewrite. `.home-hero` two columns. Badge color `rgb(201, 95, 18)` on `rgb(251, 234, 216)`. + +**Open the 1440px screenshot.** Confirm: no uppercase headings anywhere; the hero is two columns with the mark in a soft round panel; the dark CLI bar shows an orange `$` and a Copy button; the old "What's New?" blog strip and the four "Why Camel?" boxes are gone; the footer still renders. + +- [ ] **Step 8: Commit** + +```bash +git add -A +git commit -m "feat(home): move the front page onto data and rebuild the hero + +Replaces 250 lines of nested section/div/icon shortcodes in content/_index.md +with data/home.yaml plus a real template. content/_index.md keeps only its +front matter. + +frontpage.css is rewritten. The a.button rules stay, since the header and five +content pages consume them; everything else goes, including the +'text-transform: uppercase' on section.frontpage headings that was shouting +every h1 and h2 on the page. + +Adds four tokens for design values used more than once and with no existing +token: --color-dark-3, --color-prompt, --color-on-dark-dim, and +--color-button-on-dark-border. The last replaces --color-dark-line on +.button.on-dark, which was nearly invisible against ink." +``` + +--- + +### Task 4: Stat strip + +**Files:** Modify `layouts/index.html`, `antora-ui-camel/src/css/frontpage.css` + +**Interfaces:** Consumes `$home.stats` and the vocabulary from Task 3. + +- [ ] **Step 1: Add the markup** + +In `layouts/index.html`, immediately after the closing `` of `.home-hero` and before ``: + +```html + {{- with $home.stats }} +
+
+

{{ .label }}

+
    + {{- range .items }} +
  • + {{ .num }} + {{ .label }} +
  • + {{- end }} +
+
+
+ {{- end }} +``` + +The `source` key is deliberately not rendered. + +- [ ] **Step 2: Add the CSS** + +Append to `frontpage.css`: + +```css +/* Stat strip */ + +.home-stats { + background: var(--color-paper-2); + border-bottom: 1px solid var(--color-line); + border-top: 1px solid var(--color-line); +} + +.home-stats-inner { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: calc(12 / var(--rem-base) * 1rem) calc(48 / var(--rem-base) * 1rem); + margin: 0 auto; + max-width: var(--frontpage-max-width); + padding: calc(30 / var(--rem-base) * 1rem) var(--page-padding-x); +} + +.home-stats-label { + color: var(--color-ink-2); + font-family: var(--display-font-family); + font-size: calc(15 / var(--rem-base) * 1rem); + font-weight: 700; + margin: 0; + margin-right: auto; +} + +.home-stats-list { + display: flex; + gap: calc(44 / var(--rem-base) * 1rem); + list-style: none; + margin: 0; + padding: 0; +} + +.home-stat-num { + color: var(--color-orange-deep); + display: block; + font-family: var(--display-font-family); + font-size: calc(26 / var(--rem-base) * 1rem); + font-weight: 800; + letter-spacing: -0.02em; + line-height: 1; +} + +.home-stat-label { + color: var(--color-ink-soft); + display: block; + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.06em; + margin-top: calc(5 / var(--rem-base) * 1rem); + text-transform: uppercase; +} +``` + +`margin-right: auto` on the label replaces the design's spacer div, which would be non-semantic markup. + +The label color is `--color-ink-soft`, not the design's `#7a7164`. At 12px it must clear 4.5:1; `#7a7164` reaches 4.16:1 on paper-2 and `--color-ink-soft` reaches 6.36:1. This is spec decision D6. + +- [ ] **Step 3: Verify** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots / +bash tests/hugo/build.sh --measure / '.home-stat-label@color,font-size;.home-stat-num@color,font-size;.home-stats@background-color;.home-stats-list@gap' +``` + +Expected: label `rgb(92, 85, 76)` at `12px`; number `rgb(201, 95, 18)` at `26px`; strip background `rgb(244, 238, 227)`. + +**Open the screenshots.** At 1440px the label sits left and four stats sit right on one row. At 626px the list wraps without clipping. + +- [ ] **Step 4: Commit** + +```bash +git add -A && git commit -m "feat(home): add the stat strip + +Ships the four figures verified against apache/camel on 2026-09-04 rather +than the design reference's illustrative numbers, which overstated commits +(100k+ against 83,428) and contributors (1,600+ against 1,583) and +understated components (311 against 398). + +Stat labels take --color-ink-soft. The design's #7a7164 reaches only 4.16:1 +on paper-2 at 12px." +``` + +--- + +### Task 5: Get-started cards + +**Files:** Modify `layouts/index.html`, `antora-ui-camel/src/css/frontpage.css` + +**Interfaces:** Consumes `$home.get_started`, `.home-section`, `.home-section-head`, `.home-eyebrow`, `.home-grid`, `.home-card`. + +- [ ] **Step 1: Add the markup** + +After the stat strip section, before ``: + +```html + {{- with $home.get_started }} +
+
+

{{ .eyebrow }}

+

{{ .heading }}

+
+
    + {{- range .items }} +
  • +
    +

    {{ .name }}

    + {{- with .badge }}{{ . }}{{ end }} +
    +

    {{ .description }}

    +
    {{ .code }}
    + Start with {{ .name }} → +
  • + {{- end }} +
+
+ {{- end }} +``` + +`{{- with .badge }}` skips the empty string on the Quarkus card, so no empty chip renders. + +- [ ] **Step 2: Add the CSS** + +```css +/* Get started */ + +.home-grid--three { + gap: calc(22 / var(--rem-base) * 1rem); + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.home-started-card { + padding: calc(28 / var(--rem-base) * 1rem); +} + +.home-started-head { + align-items: center; + display: flex; + gap: calc(10 / var(--rem-base) * 1rem); +} + +.home-started-head h3 { + color: var(--color-ink); + font-family: var(--display-font-family); + font-size: calc(20 / var(--rem-base) * 1rem); + font-weight: 700; + margin: 0; +} + +.home-badge { + background: var(--color-camel-orange); + border-radius: calc(20 / var(--rem-base) * 1rem); + color: var(--color-white); + font-family: var(--monospace-font-family); + font-size: calc(10.5 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.04em; + padding: calc(3 / var(--rem-base) * 1rem) calc(8 / var(--rem-base) * 1rem); + text-transform: uppercase; + white-space: nowrap; +} + +.home-started-desc { + color: var(--color-ink-soft); + flex: 1; + font-size: calc(15 / var(--rem-base) * 1rem); + line-height: 1.55; + margin: calc(12 / var(--rem-base) * 1rem) 0 calc(20 / var(--rem-base) * 1rem); + text-wrap: pretty; +} + +.home-started-code { + background: var(--color-ink); + border-radius: calc(9 / var(--rem-base) * 1rem); + color: var(--syntax-text); + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); + line-height: 1.6; + margin: 0 0 calc(20 / var(--rem-base) * 1rem); + overflow-x: auto; + padding: calc(14 / var(--rem-base) * 1rem) calc(15 / var(--rem-base) * 1rem); +} + +.home-started-link { + align-self: flex-start; + color: var(--link-font-color); + font-size: calc(14.5 / var(--rem-base) * 1rem); + font-weight: 700; +} + +.home-started-link:hover { + color: var(--link_hover-font-color); +} +``` + +- [ ] **Step 3: Verify** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots / +bash tests/hugo/build.sh --measure / '.home-grid--three@grid-template-columns;.home-started-code@background-color,font-family;.home-badge@background-color;.home-started-card@padding-top' +``` + +Expected: three equal columns; code background `rgb(33, 28, 23)`; badge background `rgb(233, 120, 38)`. + +**Open the screenshots.** Confirm the three cards are equal height with their links aligned on a common baseline, the Quarkus card shows **no** empty badge chip, and no code block overflows its card. + +- [ ] **Step 4: Commit** + +```bash +git add -A && git commit -m "feat(home): add the three get-started cards" +``` + +--- + +### Task 6: Feature cards + +**Files:** Modify `layouts/index.html`, `antora-ui-camel/src/css/frontpage.css` + +**Interfaces:** Consumes `$home.features` and the shared vocabulary. + +- [ ] **Step 1: Add the markup** + +```html + {{- with $home.features }} +
+
+

{{ .eyebrow }}

+

{{ .heading }}

+
+
    + {{- range .items }} +
  • + {{ .tag }} +

    {{ .title }}

    +

    {{ .body }}

    +
  • + {{- end }} +
+
+ {{- end }} +``` + +- [ ] **Step 2: Add the CSS** + +```css +/* Features */ + +.home-grid--features { + gap: calc(20 / var(--rem-base) * 1rem); + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.home-feature { + padding: calc(26 / var(--rem-base) * 1rem); +} + +.home-feature-tag { + align-items: center; + align-self: flex-start; + background: var(--color-orange-tint); + border-radius: calc(9 / var(--rem-base) * 1rem); + color: var(--color-orange-deep); + display: inline-flex; + font-family: var(--display-font-family); + font-size: calc(16 / var(--rem-base) * 1rem); + font-weight: 800; + height: calc(38 / var(--rem-base) * 1rem); + justify-content: center; + min-width: calc(38 / var(--rem-base) * 1rem); + padding: 0 calc(7 / var(--rem-base) * 1rem); +} + +.home-feature h3 { + color: var(--color-ink); + font-family: var(--display-font-family); + font-size: calc(18 / var(--rem-base) * 1rem); + font-weight: 700; + margin: calc(16 / var(--rem-base) * 1rem) 0 0; +} + +.home-feature p { + color: var(--color-ink-soft); + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.55; + margin: calc(9 / var(--rem-base) * 1rem) 0 0; + text-wrap: pretty; +} +``` + +The design specifies a fixed 38px square. The tag content is now "390+", four characters, which clips in a 38px box at Archivo 800 16px. `min-width` plus horizontal padding and `width: auto` keeps the square look for one and two character tags while letting "390+" grow. `align-self: flex-start` stops the chip stretching to the card width, since the card is a column flex container. + +- [ ] **Step 3: Verify** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots / +bash tests/hugo/build.sh --measure / '.home-grid--features@grid-template-columns;.home-feature-tag@height,min-width,background-color;.home-feature p@color' +``` + +Expected: three columns; tag 38px high with background `rgb(251, 234, 216)`; paragraph `rgb(92, 85, 76)`. + +**Open the screenshots and look at the first tag specifically.** "390+" must be fully visible inside its chip, not clipped. Confirm two rows of three cards at 1440px. + +- [ ] **Step 4: Commit** + +```bash +git add -A && git commit -m "feat(home): add the six feature cards + +The tag chip takes min-width plus padding rather than the design's fixed +38px square. The first tag is now '390+', four characters, which clips at +Archivo 800 16px in a fixed 38px box." +``` + +--- + +### Task 7: DSL code example, markup and CSS + +**Files:** Modify `layouts/index.html`, `antora-ui-camel/src/css/frontpage.css` + +**Interfaces:** Consumes `$home.example`. Produces the DOM contract Task 8's JS drives: `.home-tab[role="tab"]` with `aria-controls` and `aria-selected`, and `.home-tabpanel[role="tabpanel"]` with `hidden`. + +- [ ] **Step 1: Add the markup** + +```html + {{- with $home.example }} +
+
+

{{ .eyebrow }}

+

{{ .heading }}

+

{{ .subhead }}

+
+
+
+ {{- range $i, $tab := .tabs }} + + {{- end }} +
+ {{- range $i, $tab := .tabs }} +
{{ $tab.code }}
+ {{- end }} +

+ $ + {{ .run_command }} +

+
+
+ {{- end }} +``` + +The `
` opens on the same line as the closing `>` of its parent so no leading newline enters the rendered code.
+
+- [ ] **Step 2: Add the CSS**
+
+```css
+/* Code example */
+
+.home-example {
+  background: var(--color-ink);
+  border: 1px solid var(--color-dark-line);
+  border-radius: calc(14 / var(--rem-base) * 1rem);
+  box-shadow: 0 24px 60px -30px rgb(33 28 23 / 50%);
+  margin: 0 auto;
+  max-width: calc(820 / var(--rem-base) * 1rem);
+  overflow: hidden;
+}
+
+.home-tablist {
+  border-bottom: 1px solid var(--color-dark-line);
+  display: flex;
+  gap: calc(2 / var(--rem-base) * 1rem);
+  padding: calc(12 / var(--rem-base) * 1rem) calc(14 / var(--rem-base) * 1rem) 0;
+}
+
+.home-tab {
+  background: none;
+  border: 0;
+  color: var(--code-tab-idle-font-color);
+  cursor: pointer;
+  font-family: var(--monospace-font-family);
+  font-size: calc(13 / var(--rem-base) * 1rem);
+  font-weight: 600;
+  padding: calc(9 / var(--rem-base) * 1rem) calc(16 / var(--rem-base) * 1rem)
+           calc(13 / var(--rem-base) * 1rem);
+  position: relative;
+}
+
+.home-tab[aria-selected='true'] {
+  color: var(--syntax-text);
+}
+
+.home-tab[aria-selected='true']::after {
+  background: var(--color-camel-orange);
+  bottom: -1px;
+  content: '';
+  height: 2px;
+  left: calc(12 / var(--rem-base) * 1rem);
+  position: absolute;
+  right: calc(12 / var(--rem-base) * 1rem);
+}
+
+.home-tabpanel pre {
+  color: var(--syntax-text);
+  font-family: var(--monospace-font-family);
+  font-size: calc(13.5 / var(--rem-base) * 1rem);
+  line-height: 1.7;
+  margin: 0;
+  min-height: calc(200 / var(--rem-base) * 1rem);
+  overflow-x: auto;
+  padding: calc(22 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem);
+}
+
+.home-example-run {
+  align-items: center;
+  background: var(--color-dark-3);
+  border-top: 1px solid var(--color-dark-line);
+  display: flex;
+  gap: calc(10 / var(--rem-base) * 1rem);
+  margin: 0;
+  padding: calc(14 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem);
+}
+
+.home-example-prompt {
+  color: var(--color-prompt);
+  font-family: var(--monospace-font-family);
+  font-size: calc(12.5 / var(--rem-base) * 1rem);
+}
+
+.home-example-command {
+  color: var(--color-on-dark-dim);
+  font-family: var(--monospace-font-family);
+  font-size: calc(12.5 / var(--rem-base) * 1rem);
+}
+```
+
+`height: 2px` on the underline is a rule width and stays raw px, matching `tabs.css`.
+
+- [ ] **Step 3: Verify**
+
+```bash
+yarn workspace antora-ui-camel run bundle
+bash tests/hugo/build.sh --shots /
+bash tests/hugo/build.sh --measure / '.home-example@max-width,background-color;.home-tab[aria-selected="true"]@color;.home-tabpanel pre@font-size;.home-example-run@background-color;#home-panel-java@display'
+```
+
+Expected: panel max-width `820px` on `rgb(33, 28, 23)`; active tab `rgb(240, 233, 223)`; run bar `rgb(28, 24, 19)`; **`#home-panel-java` display `none`**, because the `hidden` attribute is set. If it reports `block`, the `hidden` attribute did not render and all three panels are stacked.
+
+**Open the screenshots.** Exactly one code panel is visible, the YAML tab is the lit one with an orange underline beneath it, and the run bar sits at the bottom in a slightly darker band than the code.
+
+- [ ] **Step 4: Commit**
+
+```bash
+git add -A && git commit -m "feat(home): add the DSL code example
+
+Markup and styling only. The tabs are inert until the next task adds the
+JS; the YAML panel is visible and the other two carry the hidden attribute,
+which is also the no-JS end state."
+```
+
+---
+
+### Task 8: The home JS module
+
+**Files:** Create `antora-ui-camel/src/js/09-home.js`
+
+**Interfaces:** Consumes the DOM contract from Tasks 3 and 7. Produces no exports; it is a self-contained IIFE bundled with the other `src/js` modules.
+
+**Context:** `06-copy-to-clipboard.js` is hard-scoped to `.doc pre.highlight, .doc .literalblock pre` and rewrites Antora listing blocks. It cannot match the hero and must not be widened. This module loads on every page in the bundle, so both halves must no-op when their elements are absent.
+
+- [ ] **Step 1: Write the module**
+
+```js
+;(function () {
+  'use strict'
+
+  var COPIED_MS = 1600
+
+  // DSL tabs on the home page code example.
+  var tablist = document.querySelector('.home-tablist')
+  if (tablist) {
+    var tabs = [].slice.call(tablist.querySelectorAll('.home-tab'))
+
+    var select = function (tab, focus) {
+      tabs.forEach(function (candidate) {
+        var selected = candidate === tab
+        candidate.setAttribute('aria-selected', selected ? 'true' : 'false')
+        candidate.setAttribute('tabindex', selected ? '0' : '-1')
+        var panel = document.getElementById(candidate.getAttribute('aria-controls'))
+        if (panel) panel.hidden = !selected
+      })
+      if (focus) tab.focus()
+    }
+
+    tabs.forEach(function (tab, index) {
+      tab.addEventListener('click', function () {
+        select(tab, false)
+      })
+      tab.addEventListener('keydown', function (event) {
+        var next
+        if (event.key === 'ArrowRight') next = tabs[(index + 1) % tabs.length]
+        else if (event.key === 'ArrowLeft') next = tabs[(index - 1 + tabs.length) % tabs.length]
+        else if (event.key === 'Home') next = tabs[0]
+        else if (event.key === 'End') next = tabs[tabs.length - 1]
+        if (!next) return
+        event.preventDefault()
+        select(next, true)
+      })
+    })
+  }
+
+  // Copy button on the hero CLI bar.
+  var copy = document.querySelector('.home-cli-copy')
+  if (copy) {
+    if (!(window.navigator && window.navigator.clipboard)) {
+      copy.remove()
+    } else {
+      var idle = copy.textContent
+      var timer
+      copy.addEventListener('click', function () {
+        window.navigator.clipboard.writeText(copy.dataset.command).then(function () {
+          copy.textContent = 'Copied!'
+          clearTimeout(timer)
+          timer = setTimeout(function () {
+            copy.textContent = idle
+          }, COPIED_MS)
+        })
+      })
+    }
+  }
+})()
+```
+
+- [ ] **Step 2: Verify the bundle picks it up**
+
+```bash
+yarn workspace antora-ui-camel run bundle
+grep -l "home-tablist" public/_/js/site-*.js
+```
+
+Expected: one matching revved bundle. `gulp.d/tasks/build.js:70` concatenates `src/js/*.js` into `js/site.js` in filename order, so `09-home.js` needs no registration. If the grep matches nothing, the module was not picked up and nothing downstream will work.
+
+- [ ] **Step 3: Verify behavior**
+
+```bash
+bash tests/hugo/build.sh --shots /
+bash tests/hugo/build.sh --measure / '#home-panel-yaml@display;#home-panel-java@display;.home-cli-copy@display'
+```
+
+Expected: yaml `block`, java `none`, copy button present. The measurement runs after JS executes, so this also proves the module did not throw on load. A `NOT FOUND` on `.home-cli-copy` in headless Chrome means `navigator.clipboard` was absent and the button removed itself, which is correct behavior but should be noted in the report.
+
+Then confirm the click path with a direct DOM check:
+
+```bash
+bash tests/hugo/build.sh --measure / '.home-tab[aria-selected="true"]@color'
+```
+
+Expected: `rgb(240, 233, 223)`, proving exactly one tab is selected after init.
+
+**Open the screenshot** and confirm the example panel looks identical to Task 7's, that is, JS did not disturb the initial render.
+
+- [ ] **Step 4: Commit**
+
+```bash
+git add -A && git commit -m "feat(home): drive the DSL tabs and the hero copy button
+
+A new module rather than an extension of 06-copy-to-clipboard.js, which is
+hard-scoped to Antora listing blocks and rewrites their DOM. Both halves
+no-op when their elements are absent, since the bundle loads on every page.
+
+The copy button removes itself when navigator.clipboard is unavailable
+rather than presenting a control that does nothing."
+```
+
+---
+
+### Task 9: Project tiles
+
+**Files:** Modify `layouts/index.html`, `antora-ui-camel/src/css/frontpage.css`
+
+**Interfaces:** Consumes `$home.tiles`. Its CTA targets `/projects/` from Task 2.
+
+- [ ] **Step 1: Add the markup**
+
+```html
+  {{- with $home.tiles }}
+  
+
+

{{ .eyebrow }}

+

{{ .heading }}

+

{{ .subhead }}

+
+
    + {{- range .items }} +
  • + +

    {{ .name }}

    +

    {{ .description }}

    + Read more → +
  • + {{- end }} +
+

+ {{ .cta.label }} +

+
+ {{- end }} +``` + +Use `site.Data`, the global, not `.Site.Data`: the dot is rebound by `with` and `range`. This matches `layouts/projects/list.html`. + +- [ ] **Step 2: Add the CSS** + +```css +/* Project tiles */ + +.home-grid--four { + gap: calc(18 / var(--rem-base) * 1rem); + grid-template-columns: repeat(4, minmax(0, 1fr)); +} + +.home-tile { + padding: calc(24 / var(--rem-base) * 1rem); +} + +.home-tile-icon { + display: block; + height: calc(34 / var(--rem-base) * 1rem); + object-fit: contain; + width: calc(34 / var(--rem-base) * 1rem); +} + +.home-tile h3 { + color: var(--color-ink); + font-family: var(--display-font-family); + font-size: calc(17 / var(--rem-base) * 1rem); + font-weight: 700; + margin: calc(16 / var(--rem-base) * 1rem) 0 0; +} + +.home-tile p { + color: var(--color-ink-soft); + flex: 1; + font-size: calc(14 / var(--rem-base) * 1rem); + line-height: 1.5; + margin: calc(8 / var(--rem-base) * 1rem) 0 calc(16 / var(--rem-base) * 1rem); + text-wrap: pretty; +} + +.home-tile-link { + align-self: flex-start; + color: var(--link-font-color); + font-size: calc(13.5 / var(--rem-base) * 1rem); + font-weight: 700; +} + +.home-tile-link:hover { + color: var(--link_hover-font-color); +} + +.home-tiles-cta { + margin: calc(34 / var(--rem-base) * 1rem) 0 0; + text-align: center; +} +``` + +- [ ] **Step 3: Verify** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots / projects/ +bash tests/hugo/build.sh --measure / '.home-grid--four@grid-template-columns;.home-tile-icon@width;.home-tile-link@color' +``` + +Expected: four equal columns; icon 34px; link `rgb(201, 95, 18)`. + +Confirm the CTA is not a dead link. The `--shots` run above already screenshotted `projects/`; open its 1440px shot and confirm it is the projects page and not the 404 page. + +**Open the screenshots.** Four tiles across, each with a distinct icon (not four copies of the same mark), equal heights, links on a common baseline, and the ghost CTA centered below. + +- [ ] **Step 4: Commit** + +```bash +git add -A && git commit -m "feat(home): add the four core project tiles" +``` + +--- + +### Task 10: Closing band + +**Files:** Modify `layouts/index.html`, `antora-ui-camel/src/css/frontpage.css` + +**Interfaces:** Consumes `$home.closing` and `.button.on-dark` from Task 3. + +- [ ] **Step 1: Add the markup** + +```html + {{- with $home.closing }} +
+
+
+

{{ .heading }}

+

{{ .body }}

+
+

+ {{ .primary_cta.label }} + {{ .secondary_cta.label }} +

+
+
+ {{- end }} +``` + +- [ ] **Step 2: Add the CSS** + +```css +/* Closing band */ + +.home-closing { + margin: calc(72 / var(--rem-base) * 1rem) auto 0; + max-width: var(--frontpage-max-width); + padding: 0 var(--page-padding-x); +} + +.home-closing-inner { + align-items: center; + background: var(--color-ink); + border-radius: calc(18 / var(--rem-base) * 1rem); + display: flex; + flex-wrap: wrap; + gap: calc(24 / var(--rem-base) * 1rem); + padding: calc(52 / var(--rem-base) * 1rem) calc(48 / var(--rem-base) * 1rem); +} + +.home-closing-copy { + flex: 1; + min-width: calc(280 / var(--rem-base) * 1rem); +} + +.home-closing-copy h2 { + color: var(--color-on-dark); + font-family: var(--display-font-family); + font-size: calc(30 / var(--rem-base) * 1rem); + font-weight: 800; + letter-spacing: -0.02em; + margin: 0; +} + +.home-closing-copy p { + color: var(--color-on-dark-soft); + font-size: calc(16 / var(--rem-base) * 1rem); + line-height: 1.55; + margin: calc(12 / var(--rem-base) * 1rem) 0 0; + max-width: calc(560 / var(--rem-base) * 1rem); +} + +.home-closing-actions { + display: flex; + gap: calc(14 / var(--rem-base) * 1rem); + margin: 0; +} + +.home-closing-actions .button { + margin: 0; +} +``` + +The `.button` margin is zeroed here for the same reason as the hero: `a.button`'s own `margin: 0.5rem` would otherwise force 16px between the two buttons regardless of `gap`. + +- [ ] **Step 3: Verify** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots / +bash tests/hugo/build.sh --measure / '.home-closing-inner@background-color,border-radius;.home-closing-copy h2@color;.home-closing-copy p@color;.home-closing-actions .on-dark@border-top-color' +``` + +Expected: band `rgb(33, 28, 23)` with 18px radius; heading `rgb(250, 247, 241)`; body `rgb(196, 187, 172)`; the ghost button border `rgb(74, 68, 60)`, proving Task 3's token change reached it. + +**Open the screenshots.** The band is a dark rounded card inset from the page edges, not full bleed; both buttons are legible against ink and the outlined one's border is actually visible; the footer follows without a gap collapse. + +- [ ] **Step 4: Commit** + +```bash +git add -A && git commit -m "feat(home): add the closing community band" +``` + +--- + +### Task 11: Header search restyle and the Docs menu label + +**Files:** Modify `antora-ui-camel/src/css/header.css`, `config.toml` + +**Interfaces:** Independent of the home page sections; touches only the shared header. + +**Context:** Spec decision D3. Piece 3 moved search into the Antora nav panel. Hugo pages have no nav panel, so the header field stays for them and is restyled to the new tokens. Read the current `.header .navbar-search` and `.header #search` rules before changing anything; piece 3 scoped them under `.header` and three Critical defects came from properties silently lost during that move. Change colors and shape only. Do not remove, re-scope, or reorder any declaration. + +- [ ] **Step 1: Inventory the current rules** + +```bash +grep -n "navbar-search\|#search\|search-cancel\|search_results" antora-ui-camel/src/css/header.css +``` + +Record every property each selector currently declares. The restyle must end with the same property set, changed values only. + +- [ ] **Step 2: Restyle the field** + +**There is no `.header #search` rule.** The field is styled by `.header .navbar-search input` at `header.css:205`, with its focus state at `.header .navbar-search input:focus-within` on line 221. Edit those two rules in place. Do **not** add a `#search` rule: an id selector at (1,0,0) would outrank the existing (0,2,1) rule and leave two competing definitions of the same field. + +In the existing `.header .navbar-search input` rule, set these values, leaving every other declaration in the rule untouched: + +```css + background: var(--color-white); + border: 1px solid var(--color-line); + border-radius: calc(7 / var(--rem-base) * 1rem); + color: var(--color-ink); + font-family: var(--body-font-family); + font-size: calc(13.5 / var(--rem-base) * 1rem); +``` + +If the rule does not currently declare one of these properties, add it to that same rule. Do not create a second rule. + +In the existing `.header .navbar-search input:focus-within` rule, set: + +```css + border-color: var(--color-line-hover); +``` + +`:focus-within` reads oddly on an input, but an element matches it when the element itself is focused, so the selector works and is piece 3's. Leave the selector as it is; changing it is out of scope for this task. + +There is also a mobile override block near line 359 that re-declares `.header .navbar-search` and `.header .navbar-search input`. Check whether your value changes need mirroring there, and note the answer in the report either way. + +- [ ] **Step 3: Rename the menu entry** + +In `config.toml`, change the first `[[menu.main]]` block's name: + +```toml +[[menu.main]] + name = "Docs" + identifier = "docs" + weight = 1 + url = "/docs/" +``` + +Change `name` only. The `identifier`, `weight`, and `url` stay, so nothing that keys off them breaks. + +- [ ] **Step 4: Verify** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots / projects/ +bash tests/hugo/build.sh --measure / '#search@background-color,border-radius,font-size;.navbar-menu a@color' +``` + +Expected: field white with a 7px radius at 13.5px. + +Confirm no property was lost: + +```bash +grep -n "navbar-search\|#search\|search-cancel\|search_results" antora-ui-camel/src/css/header.css +``` + +Diff this against Step 1's record. Any property that appears in Step 1 and not here is a regression, which is exactly the failure mode from piece 3. + +**Open the screenshots.** The header search field is visible and legible on the paper background, the clear button still sits inside it, and the first menu item reads "Docs". + +- [ ] **Step 5: Commit** + +```bash +git add -A && git commit -m "style(header): restyle the search field and shorten the Docs label + +Search stays in the header on Hugo pages, which have no nav panel to host +it; docs pages keep the nav-panel field piece 3 added. Property set is +unchanged, values only." +``` + +--- + +### Task 12: Responsive sweep + +**Files:** Modify `antora-ui-camel/src/css/frontpage.css` + +**Interfaces:** Consumes every class from Tasks 3 through 10. + +- [ ] **Step 1: Add the breakpoints** + +Append to `frontpage.css`. The repo's existing breakpoints are 1024px and 626px; do not introduce new ones. + +```css +/* Tablet */ + +@media screen and (width <= 1024px) { + .home-hero { + gap: calc(36 / var(--rem-base) * 1rem); + grid-template-columns: minmax(0, 1fr); + padding-top: calc(40 / var(--rem-base) * 1rem); + } + + .home-hero h1 { + font-size: calc(44 / var(--rem-base) * 1rem); + } + + .home-hero-art { + order: -1; + } + + .home-section-head h2 { + font-size: calc(30 / var(--rem-base) * 1rem); + } + + .home-grid--three, + .home-grid--features, + .home-grid--four { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .home-closing-inner { + padding: calc(36 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem); + } +} + +/* Mobile */ + +@media screen and (width <= 626px) { + .home-hero h1 { + font-size: calc(36 / var(--rem-base) * 1rem); + } + + .home-hero-actions { + flex-wrap: wrap; + } + + .home-grid--three, + .home-grid--features, + .home-grid--four { + grid-template-columns: minmax(0, 1fr); + } + + .home-stats-list { + gap: calc(24 / var(--rem-base) * 1rem); + flex-wrap: wrap; + } + + .home-closing-actions { + flex-wrap: wrap; + width: 100%; + } + + .home-tabpanel pre { + font-size: calc(12 / var(--rem-base) * 1rem); + } +} +``` + +`order: -1` puts the art above the copy when the hero stacks, matching the current page's `column-reverse` behavior. + +- [ ] **Step 2: Verify at all three widths** + +```bash +yarn workspace antora-ui-camel run bundle +bash tests/hugo/build.sh --shots / projects/ +``` + +**Open all six screenshots.** At each width confirm: no horizontal scrollbar; no text clipped or overlapping; the hero art sits above the copy at 1024px and below 626px; grids show 2 columns at 1024px and 1 at 626px; the CLI bar and the code panel do not overflow the viewport; the stat strip wraps cleanly. + +Then confirm the page has no horizontal overflow: + +```bash +bash tests/hugo/build.sh --measure / 'body@overflow-x;.home-example@max-width' +``` + +- [ ] **Step 3: Full gate** + +```bash +yarn workspace antora-ui-camel run bundle +SITE_DIR="$(HUGO_OUT=/tmp/home-gate bash tests/hugo/build.sh | tail -1 | sed 's/^hugo: 0 errors -> //')" +node_modules/.bin/html-validate "$SITE_DIR/index.html" "$SITE_DIR/projects/index.html" +``` + +`yarn check:html` validates `public`, which this harness does not write, so point `html-validate` at the two pages this piece actually changed. Expected: no errors. Common failures here are a `

` wrapping a block element and a missing `alt`. + +- [ ] **Step 4: Commit** + +```bash +git add -A && git commit -m "style(home): collapse the grids at 1024px and 626px + +Reuses the repo's existing two breakpoints. The hero art moves above the +copy when the hero stacks, matching the outgoing page's column-reverse." +``` + +--- + +## Self-Review + +**Spec coverage.** D1 is Tasks 3 through 10. D2 is Task 3's data file and Task 4. D3 is Task 11. D4 is Task 3's hero. D5 is Task 2. D6 is Tasks 2 and 4. D7 is Task 8. The four new tokens are Task 3 and are each consumed: `--color-dark-3` in Task 7, `--color-prompt` in Tasks 3 and 7, `--color-on-dark-dim` in Task 7, `--color-button-on-dark-border` in Tasks 3 and 10. The verification protocol is Task 1 and every later task's verify step. + +**Placeholder scan.** Every code step carries the literal content to write. The only judgment left to an implementer is Task 11 Step 2, which deliberately says to read the current rules first, because the file's present state is the input. + +**Type consistency.** `data/home.yaml`'s keys are written once in Task 3 and consumed unchanged: `hero`, `stats`, `get_started`, `features`, `example`, `tiles`, `closing`. The DOM contract between Tasks 7 and 8 is `.home-tablist`, `.home-tab`, `.home-tabpanel`, `aria-controls`, `aria-selected`, and `hidden`; the JS references exactly these. `.home-cli-copy` and its `data-command` attribute are written in Task 3 and read in Task 8. The shared CSS classes are defined in Task 3 and used by name in Tasks 5, 6, 7, 9, and 12. + +**Known conflict, resolved.** Tasks 5, 6, and 9 all append grid rules to `frontpage.css`, and Task 12 appends media queries referencing all three. Task 12 runs last, so every selector it names exists. `.home-grid--three`, `.home-grid--features`, and `.home-grid--four` are three distinct selectors, so `no-duplicate-selectors` does not fire when Task 12 groups them. + +## Pre-flight corrections + +Six defects were found in this plan before dispatch and are already fixed above. They are +recorded so a reviewer can tell a correction from an oversight. + +1. **Task 3's hero template called `.Site.Data` inside a `with` block.** The dot is rebound to + the hero map there, so the rev-manifest lookup would have failed at build time. Now `site.Data`. +2. **The hero and closing button gaps were arithmetically impossible.** `a.button` carries + `margin: 0.5rem`, forcing 16px between adjacent buttons, so no `gap` below 16px could take + effect. Both containers now zero the button margin and set `gap: 14px`. +3. **Task 11 targeted `.header #search`, which does not exist.** The field is styled by + `.header .navbar-search input` at `header.css:205`. Following the original text would have + added a competing id-specificity rule instead of editing the real one. +4. **Task 2's commit step named a nonsense path.** Replaced with `git add -A`, which is correct + anyway because the bundle regenerates `public/_`. +5. **Task 8 guessed the JS bundle output path.** It is `public/_/js/site-*.js`, produced by + `gulp.d/tasks/build.js:70`. +6. **Task 12's html-validate step pointed at `public`,** which this harness never writes. It now + validates the two pages the piece changes, out of the harness output directory. From 0d6351a0843d99602b1bfcca601db69c651dc6e6 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 12:54:44 -0400 Subject: [PATCH 075/209] test(hugo): add a build and screenshot harness Builds the site with an authenticated token resolved from gh, fails loudly on any Hugo error, and serves the output for screenshots and computed-style measurement. Without a token the build exits non-zero with about 32 getJSON rate-limit errors, so the harness owns the token rather than each caller. _measure.html reads computed styles from a same-origin iframe so measurement needs no browser-automation dependency. --- package.json | 3 +- tests/hugo/_measure.html | 42 ++++++++++++++++++ tests/hugo/build.sh | 94 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 tests/hugo/_measure.html create mode 100755 tests/hugo/build.sh diff --git a/package.json b/package.json index 52da297160b..8c232853e77 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,8 @@ "build:antora-local-full2": "antora antora-playbook-local-full.yml --stacktrace --clean --fetch", "build:antora-local-partial2": "antora antora-playbook-local-partial.yml --stacktrace", "build:antora-local-quick": "antora antora-playbook-local-quick.yml --stacktrace", - "build:antora-ui": "tests/antora-ui/build.sh" + "build:antora-ui": "tests/antora-ui/build.sh", + "check:hugo": "bash tests/hugo/build.sh" }, "devDependencies": { "@antora/cli": "^3.1.15", diff --git a/tests/hugo/_measure.html b/tests/hugo/_measure.html new file mode 100644 index 00000000000..fed5027b5bb --- /dev/null +++ b/tests/hugo/_measure.html @@ -0,0 +1,42 @@ + + + + +measure + + + + +

pending
+ + + diff --git a/tests/hugo/build.sh b/tests/hugo/build.sh new file mode 100755 index 00000000000..3c29d9365d8 --- /dev/null +++ b/tests/hugo/build.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +# Build the Hugo site, then optionally screenshot or measure pages from it. +# +# The release-note pages call getJSON against the GitHub API. Without a token +# those calls hit the unauthenticated rate limit and the build exits non-zero +# with about 32 errors, so this script resolves a token itself rather than +# making every caller do it. The token is exported to hugo only; it is never +# printed, logged, or passed as an argument. +# +# Usage: +# tests/hugo/build.sh build only +# tests/hugo/build.sh --shots / projects/ build, then screenshot each path +# tests/hugo/build.sh --measure / 'sel@color' build, then print computed styles +# +# Env: HUGO_OUT, HUGO_PORT (default 8899), SHOT_WIDTHS, SHOT_HEIGHT (default 2400) +set -euo pipefail + +REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$REPO" + +OUT="${HUGO_OUT:-$(mktemp -d)}" +SITE="$OUT/site" +LOG="$OUT/hugo-build.log" +SHOTS="$OUT/shots" +PORT="${HUGO_PORT:-8899}" +SHOT_HEIGHT="${SHOT_HEIGHT:-2400}" +CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" + +if [ -z "${GITHUB_TOKEN:-}" ]; then + if command -v gh >/dev/null 2>&1 && _tok="$(gh auth token 2>/dev/null)" && [ -n "$_tok" ]; then + GITHUB_TOKEN="$_tok" + export GITHUB_TOKEN + unset _tok + else + echo "warning: no GITHUB_TOKEN and 'gh auth token' failed." >&2 + echo " Expect ~32 getJSON rate-limit errors and a non-zero exit." >&2 + fi +fi + +if ! node_modules/.bin/hugo --cacheDir "$REPO/.hugo_data" -d "$SITE" >"$LOG" 2>&1; then + echo "hugo build FAILED. Last 20 lines of $LOG:" >&2 + tail -20 "$LOG" >&2 + exit 1 +fi + +errors="$(grep -c '^ERROR' "$LOG" || true)" +if [ "$errors" != "0" ]; then + echo "hugo exited 0 but logged $errors error(s). See $LOG" >&2 + exit 1 +fi +echo "hugo: 0 errors -> $SITE" + +start_server() { + python3 -m http.server "$PORT" --directory "$SITE" >/dev/null 2>&1 & + SERVER_PID=$! + trap 'kill "$SERVER_PID" 2>/dev/null || true' EXIT + for _ in 1 2 3 4 5 6 7 8 9 10; do + if curl -fsS -o /dev/null "http://localhost:$PORT/"; then return 0; fi + sleep 0.5 + done + echo "server did not come up on port $PORT" >&2 + exit 1 +} + +case "${1:-}" in + --shots) + shift + cp tests/hugo/_measure.html "$SITE/_measure.html" + mkdir -p "$SHOTS" + start_server + for path in "$@"; do + slug="$(printf '%s' "${path:-index}" | tr '/' '_' | sed 's/^_*//; s/_*$//')" + : "${slug:=index}" + for width in ${SHOT_WIDTHS:-1440 1024 626}; do + "$CHROME" --headless --disable-gpu --hide-scrollbars \ + --screenshot="$SHOTS/${slug}-${width}.png" \ + --window-size="${width},${SHOT_HEIGHT}" \ + --virtual-time-budget=5000 \ + "http://localhost:$PORT/$path" >/dev/null 2>&1 + done + done + echo "shots: $SHOTS" + ;; + --measure) + shift + path="${1:-/}" + query="${2:-}" + cp tests/hugo/_measure.html "$SITE/_measure.html" + start_server + "$CHROME" --headless --disable-gpu --virtual-time-budget=5000 --dump-dom \ + "http://localhost:$PORT/_measure.html#$(printf '%s|%s' "$path" "$query")" \ + 2>/dev/null | sed -n '/
/,/<\/pre>/p' | sed 's/<[^>]*>//g'
+    ;;
+esac

From 6f5e02dfbda5466e825cd29929a6c3d5c7144a43 Mon Sep 17 00:00:00 2001
From: Adriano Machado <60320+ammachado@users.noreply.github.com>
Date: Fri, 4 Sep 2026 13:08:02 -0400
Subject: [PATCH 076/209] fix(hugo-harness): detect a squatted port instead of
 measuring stale content

start_server's readiness loop only checked that something answered on the
port, so an already-occupied port let curl succeed against someone else's
server while our own python3 failed to bind, and the harness exited 0
having screenshotted or measured unrelated content instead of the built
site. It now confirms the spawned SERVER_PID is both alive and the actual
listener on the port (via lsof) before declaring the server ready, and
fails loudly, naming the port, when it is not.

Also verified the fail-loud path fires for real: with GITHUB_TOKEN unset
and gh made unresolvable via PATH, the unauthenticated build hits the
getJSON rate limit and the harness exits non-zero.
---
 tests/hugo/build.sh | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tests/hugo/build.sh b/tests/hugo/build.sh
index 3c29d9365d8..d679d8855d3 100755
--- a/tests/hugo/build.sh
+++ b/tests/hugo/build.sh
@@ -55,7 +55,14 @@ start_server() {
   SERVER_PID=$!
   trap 'kill "$SERVER_PID" 2>/dev/null || true' EXIT
   for _ in 1 2 3 4 5 6 7 8 9 10; do
-    if curl -fsS -o /dev/null "http://localhost:$PORT/"; then return 0; fi
+    if ! kill -0 "$SERVER_PID" 2>/dev/null; then
+      echo "server process for port $PORT exited before it became ready (port may already be in use)" >&2
+      exit 1
+    fi
+    if curl -fsS -o /dev/null "http://localhost:$PORT/" \
+       && lsof -ti tcp:"$PORT" -sTCP:LISTEN 2>/dev/null | grep -qx "$SERVER_PID"; then
+      return 0
+    fi
     sleep 0.5
   done
   echo "server did not come up on port $PORT" >&2

From 619fb84baa1a174eb2437f8a75ee0cb79df7ed4a Mon Sep 17 00:00:00 2001
From: Adriano Machado <60320+ammachado@users.noreply.github.com>
Date: Fri, 4 Sep 2026 13:27:06 -0400
Subject: [PATCH 077/209] feat(projects): add the All Camel Projects page

Lands the handoff's pre-written /projects/ slice with three corrections:

- layouts/projects/list.html called .Site.Data as a function, which aborts
  the Hugo build. The variable was never read; the line is deleted.
- The article carried both 'static' and 'projects'. static.css has
  '.static p' at (0,1,1), which beats every card paragraph rule at (0,1,0),
  so every card paragraph took the wrong margin. 'static' is dropped.
- The page-scoped --projects-* vars are replaced by the shared tokens. The
  muted text color maps to --color-ink-soft rather than --color-ink-muted;
  all five consumers are small informational text and #8a8074 reaches only
  3.35:1 on paper-2.
---
 ...ite-8824ff6b36.css => site-b398d54a0f.css} |   2 +-
 .../public/_/data/rev-manifest.json           |   2 +-
 antora-ui-camel/public/_/helpers/asset.js     |   2 +-
 .../public/_/partials/head-styles.hbs         |   2 +-
 antora-ui-camel/public/_/rev-manifest         |   2 +-
 antora-ui-camel/src/css/projects.css          | 212 ++++++++++++++++++
 antora-ui-camel/src/css/site.css              |   1 +
 content/projects/_index.md                    |  14 ++
 data/projects.yaml                            |  71 ++++++
 layouts/projects/list.html                    |  55 +++++
 10 files changed, 358 insertions(+), 5 deletions(-)
 rename antora-ui-camel/public/_/css/{site-8824ff6b36.css => site-b398d54a0f.css} (90%)
 create mode 100644 antora-ui-camel/src/css/projects.css
 create mode 100644 content/projects/_index.md
 create mode 100644 data/projects.yaml
 create mode 100644 layouts/projects/list.html

diff --git a/antora-ui-camel/public/_/css/site-8824ff6b36.css b/antora-ui-camel/public/_/css/site-b398d54a0f.css
similarity index 90%
rename from antora-ui-camel/public/_/css/site-8824ff6b36.css
rename to antora-ui-camel/public/_/css/site-b398d54a0f.css
index 86812c81db2..e4500c25983 100644
--- a/antora-ui-camel/public/_/css/site-8824ff6b36.css
+++ b/antora-ui-camel/public/_/css/site-b398d54a0f.css
@@ -18,5 +18,5 @@
     identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace),
     .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a
     color). .go, generic command output, is content the reader needs rather
-    than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}section.frontpage h1,section.frontpage h2{font-weight:700;color:#211c17;line-height:1.3;margin:1rem 0 0;text-transform:uppercase;word-wrap:break-word}section.frontpage{color:#3a332b;font-size:inherit;line-height:1.6;margin:0 auto;max-width:66.66667rem}section.frontpage a{color:#a84e0d;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}section.frontpage a:hover{color:#853c09}section.frontpage h1{width:100%;text-align:center;margin-bottom:1rem;font-size:2.5rem}section.frontpage h2{text-align:center}header.frontpage{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:2rem 3rem 2.5rem}header.frontpage img{width:45vw;max-height:50vh}header.frontpage .main-heading{width:50vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-left:2rem}header.frontpage h1{font-size:5vw;color:#211c17;margin-bottom:.5rem}header.frontpage p{font-size:1.2rem;margin-bottom:2rem;line-height:1.7rem}a.button,section.frontpage a.button{white-space:nowrap;margin:.5rem;background-image:none;border-radius:.44444rem;font-weight:700;font-size:.83333rem;padding:.72222rem 1.33333rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem;line-height:1}header.frontpage a.button{padding:.77778rem 1.44444rem;font-size:.86111rem}a.button.dark,section.frontpage a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover,section.frontpage a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #34302a;color:#faf7f1}div.frontpage.news{padding:.2rem 0;width:20%;text-align:center;margin-left:3rem;background-color:#f5f5f5;border-radius:1rem 1rem 0 0}div.frontpage.news h2{margin-bottom:.5rem}section.frontpage.columns.blog-posts{margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding:1rem 1rem 1rem 3rem;max-width:none;border-top:none;background-color:#f5f5f5}section.frontpage.blog-posts ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0}li.blog-post .content{padding:1rem .5rem 1rem 1rem}li.blog-post .content h2{text-align:left;margin:0}li.blog-post .content p{margin:.2rem 0}li.blog-post .content a{font-weight:700;white-space:nowrap;background:none}li.blog-post{display:-webkit-box;display:-ms-flexbox;display:flex;width:30vw;margin:0;padding-right:1rem}li.blog-post:last-child{padding-right:0}li.blog-post time.date{margin-top:1rem;text-align:center;color:#211c17;text-transform:uppercase}li.blog-post time.date .day{font-size:3.2rem;font-weight:700;padding:0;line-height:1;display:block}li.blog-post time.date .month{font-size:1.5rem;font-weight:700;line-height:1.2;display:block}section.frontpage.columns.functionalities p,section.frontpage.projects .project .content p{margin-bottom:1.5rem}section.frontpage.apache,section.frontpage.functionalities,section.frontpage.projects{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #f5f5f5;padding:2rem 1rem 1rem}section.frontpage.columns.functionalities{border:none}section.frontpage.columns.functionalities h2,section.frontpage.projects .project .content h2,section.frontpage.projects .project .content p{text-align:left;text-transform:none}section.frontpage.columns.functionalities .box{width:70%;display:-webkit-box;display:-ms-flexbox;display:flex;margin:2vw auto}section.frontpage.columns.functionalities .box .content{width:55vw;margin:0 1vw}section.frontpage.columns.functionalities .box .icon{width:30vw;text-align:center}section.frontpage.columns.functionalities img{height:12rem;margin:0 1vw}section.frontpage.projects{width:80%;max-width:none;margin:0 auto}section.frontpage.projects .project{display:-webkit-box;display:-ms-flexbox;display:flex;width:50%;padding:1rem}section.frontpage.projects .project .icon{min-width:8rem;margin-right:1rem;text-align:center}section.frontpage.projects .project img{height:6rem;margin-top:2rem}.split{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;padding:1rem 0 2rem}.split img{max-width:100%}@media screen and (width <= 1024px){header.frontpage h1{font-size:3rem;text-align:center}section.frontpage h1{font-size:2.5rem}.split{margin:0 1rem;-webkit-box-flex:100%;-ms-flex:100%;flex:100%}.split img{display:block;margin:auto}header.frontpage .main-heading,section.frontpage.apache,section.frontpage.blog-posts .blog-post,section.frontpage.columns.functionalities,section.frontpage.columns.projects{width:90%;margin:0 auto}section.frontpage.columns.blog-posts ul{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}section.frontpage.blog-posts .blog-post .date,section.frontpage.projects .project .icon{min-width:25%}section.frontpage.columns.functionalities .box,section.frontpage.projects .project{width:100%}section.frontpage.functionalities .icon img,section.frontpage.projects .icon img{max-width:25vw;margin:auto}section.frontpage.functionalities .content{width:70vw}header.frontpage p{font-size:inherit;text-align:center}header.frontpage{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;margin:0}header.frontpage img{width:60%;max-height:45vh;margin:0 auto}div.frontpage.news{width:100%;margin:1.5rem 0 0;text-transform:uppercase;border-radius:0}a.button,section.frontpage a.button{line-height:1.5rem}}@media screen and (width <= 626px){header.frontpage .main-heading,section.frontpage.apache,section.frontpage.columns.blog-posts,section.frontpage.columns.functionalities,section.frontpage.projects{width:100%;margin:0;padding:1rem}section.frontpage.columns.functionalities .box.left,section.frontpage.projects .project{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0}section.frontpage.columns.functionalities .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;margin:0;padding:0}section.frontpage.columns.functionalities .box .content,section.frontpage.columns.functionalities .box .content h2,section.frontpage.columns.functionalities .box .icon,section.frontpage.columns.functionalities p,section.frontpage.projects .project .content h2,section.frontpage.projects .project .content p,section.frontpage.projects .project .icon{text-align:center;margin:0;width:100%}section.frontpage.columns.functionalities .box .content p,section.frontpage.projects .project .content p{margin:1rem 0 1.5rem}section.frontpage.columns.functionalities .box .icon img{max-width:50%;height:auto;margin-top:2rem}section.frontpage h1{font-size:2rem}header.frontpage h1{font-size:2.5rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}
+    than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}section.frontpage h1,section.frontpage h2{font-weight:700;color:#211c17;line-height:1.3;margin:1rem 0 0;text-transform:uppercase;word-wrap:break-word}section.frontpage{color:#3a332b;font-size:inherit;line-height:1.6;margin:0 auto;max-width:66.66667rem}section.frontpage a{color:#a84e0d;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}section.frontpage a:hover{color:#853c09}section.frontpage h1{width:100%;text-align:center;margin-bottom:1rem;font-size:2.5rem}section.frontpage h2{text-align:center}header.frontpage{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:2rem 3rem 2.5rem}header.frontpage img{width:45vw;max-height:50vh}header.frontpage .main-heading{width:50vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-left:2rem}header.frontpage h1{font-size:5vw;color:#211c17;margin-bottom:.5rem}header.frontpage p{font-size:1.2rem;margin-bottom:2rem;line-height:1.7rem}a.button,section.frontpage a.button{white-space:nowrap;margin:.5rem;background-image:none;border-radius:.44444rem;font-weight:700;font-size:.83333rem;padding:.72222rem 1.33333rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem;line-height:1}header.frontpage a.button{padding:.77778rem 1.44444rem;font-size:.86111rem}a.button.dark,section.frontpage a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover,section.frontpage a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #34302a;color:#faf7f1}div.frontpage.news{padding:.2rem 0;width:20%;text-align:center;margin-left:3rem;background-color:#f5f5f5;border-radius:1rem 1rem 0 0}div.frontpage.news h2{margin-bottom:.5rem}section.frontpage.columns.blog-posts{margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding:1rem 1rem 1rem 3rem;max-width:none;border-top:none;background-color:#f5f5f5}section.frontpage.blog-posts ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0}li.blog-post .content{padding:1rem .5rem 1rem 1rem}li.blog-post .content h2{text-align:left;margin:0}li.blog-post .content p{margin:.2rem 0}li.blog-post .content a{font-weight:700;white-space:nowrap;background:none}li.blog-post{display:-webkit-box;display:-ms-flexbox;display:flex;width:30vw;margin:0;padding-right:1rem}li.blog-post:last-child{padding-right:0}li.blog-post time.date{margin-top:1rem;text-align:center;color:#211c17;text-transform:uppercase}li.blog-post time.date .day{font-size:3.2rem;font-weight:700;padding:0;line-height:1;display:block}li.blog-post time.date .month{font-size:1.5rem;font-weight:700;line-height:1.2;display:block}section.frontpage.columns.functionalities p,section.frontpage.projects .project .content p{margin-bottom:1.5rem}section.frontpage.apache,section.frontpage.functionalities,section.frontpage.projects{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #f5f5f5;padding:2rem 1rem 1rem}section.frontpage.columns.functionalities{border:none}section.frontpage.columns.functionalities h2,section.frontpage.projects .project .content h2,section.frontpage.projects .project .content p{text-align:left;text-transform:none}section.frontpage.columns.functionalities .box{width:70%;display:-webkit-box;display:-ms-flexbox;display:flex;margin:2vw auto}section.frontpage.columns.functionalities .box .content{width:55vw;margin:0 1vw}section.frontpage.columns.functionalities .box .icon{width:30vw;text-align:center}section.frontpage.columns.functionalities img{height:12rem;margin:0 1vw}section.frontpage.projects{width:80%;max-width:none;margin:0 auto}section.frontpage.projects .project{display:-webkit-box;display:-ms-flexbox;display:flex;width:50%;padding:1rem}section.frontpage.projects .project .icon{min-width:8rem;margin-right:1rem;text-align:center}section.frontpage.projects .project img{height:6rem;margin-top:2rem}.split{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;padding:1rem 0 2rem}.split img{max-width:100%}@media screen and (width <= 1024px){header.frontpage h1{font-size:3rem;text-align:center}section.frontpage h1{font-size:2.5rem}.split{margin:0 1rem;-webkit-box-flex:100%;-ms-flex:100%;flex:100%}.split img{display:block;margin:auto}header.frontpage .main-heading,section.frontpage.apache,section.frontpage.blog-posts .blog-post,section.frontpage.columns.functionalities,section.frontpage.columns.projects{width:90%;margin:0 auto}section.frontpage.columns.blog-posts ul{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}section.frontpage.blog-posts .blog-post .date,section.frontpage.projects .project .icon{min-width:25%}section.frontpage.columns.functionalities .box,section.frontpage.projects .project{width:100%}section.frontpage.functionalities .icon img,section.frontpage.projects .icon img{max-width:25vw;margin:auto}section.frontpage.functionalities .content{width:70vw}header.frontpage p{font-size:inherit;text-align:center}header.frontpage{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;margin:0}header.frontpage img{width:60%;max-height:45vh;margin:0 auto}div.frontpage.news{width:100%;margin:1.5rem 0 0;text-transform:uppercase;border-radius:0}a.button,section.frontpage a.button{line-height:1.5rem}}@media screen and (width <= 626px){header.frontpage .main-heading,section.frontpage.apache,section.frontpage.columns.blog-posts,section.frontpage.columns.functionalities,section.frontpage.projects{width:100%;margin:0;padding:1rem}section.frontpage.columns.functionalities .box.left,section.frontpage.projects .project{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0}section.frontpage.columns.functionalities .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;margin:0;padding:0}section.frontpage.columns.functionalities .box .content,section.frontpage.columns.functionalities .box .content h2,section.frontpage.columns.functionalities .box .icon,section.frontpage.columns.functionalities p,section.frontpage.projects .project .content h2,section.frontpage.projects .project .content p,section.frontpage.projects .project .icon{text-align:center;margin:0;width:100%}section.frontpage.columns.functionalities .box .content p,section.frontpage.projects .project .content p{margin:1rem 0 1.5rem}section.frontpage.columns.functionalities .box .icon img{max-width:50%;height:auto;margin-top:2rem}section.frontpage h1{font-size:2rem}header.frontpage h1{font-size:2.5rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}
 /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0}
\ No newline at end of file
diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json
index 797c82efccb..89007ff108f 100644
--- a/antora-ui-camel/public/_/data/rev-manifest.json
+++ b/antora-ui-camel/public/_/data/rev-manifest.json
@@ -1,5 +1,5 @@
 {
-  "css/site.css": "css/site-8824ff6b36.css",
+  "css/site.css": "css/site-b398d54a0f.css",
   "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
   "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
   "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js
index 39929e618b6..b2be77b19fc 100644
--- a/antora-ui-camel/public/_/helpers/asset.js
+++ b/antora-ui-camel/public/_/helpers/asset.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const manifest = {
-  "css/site.css": "css/site-8824ff6b36.css",
+  "css/site.css": "css/site-b398d54a0f.css",
   "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
   "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
   "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs
index e42bd0eff8a..6dbb9694f45 100644
--- a/antora-ui-camel/public/_/partials/head-styles.hbs
+++ b/antora-ui-camel/public/_/partials/head-styles.hbs
@@ -1 +1 @@
-    
+    
diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest
index 797c82efccb..89007ff108f 100644
--- a/antora-ui-camel/public/_/rev-manifest
+++ b/antora-ui-camel/public/_/rev-manifest
@@ -1,5 +1,5 @@
 {
-  "css/site.css": "css/site-8824ff6b36.css",
+  "css/site.css": "css/site-b398d54a0f.css",
   "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
   "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
   "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
diff --git a/antora-ui-camel/src/css/projects.css b/antora-ui-camel/src/css/projects.css
new file mode 100644
index 00000000000..ba7750939ab
--- /dev/null
+++ b/antora-ui-camel/src/css/projects.css
@@ -0,0 +1,212 @@
+/* All Camel Projects page (content/projects, layouts/projects/list.html) */
+
+.projects {
+  width: 100%;
+  max-width: var(--static-max-width--desktop);
+  margin: 0 auto;
+  padding: 3rem 2rem 4rem;
+  color: var(--color-ink);
+  font-size: calc(15 / var(--rem-base) * 1rem);
+  line-height: 1.55;
+}
+
+/* hero */
+
+.projects-hero {
+  max-width: 44rem;
+  margin-bottom: 2.5rem;
+}
+
+.projects-back {
+  font-family: var(--monospace-font-family);
+  font-size: calc(13 / var(--rem-base) * 1rem);
+  font-weight: 600;
+  color: var(--color-ink-soft);
+}
+
+.projects-back:hover {
+  color: var(--link_hover-font-color);
+  text-decoration: none;
+}
+
+.projects h1 {
+  margin: 1rem 0 0;
+  font-size: calc(46 / var(--rem-base) * 1rem);
+  font-weight: 800;
+  line-height: 1.05;
+  letter-spacing: -0.03em;
+  color: var(--color-ink);
+}
+
+.projects-intro {
+  margin: 0.8rem 0 0;
+  font-size: calc(17.5 / var(--rem-base) * 1rem);
+  color: var(--color-ink-soft);
+  text-wrap: pretty;
+}
+
+/* groups */
+
+.projects-group + .projects-group {
+  margin-top: 2.9rem;
+}
+
+.projects-group-title {
+  margin: 0 0 1.1rem;
+  padding-bottom: 0.8rem;
+  border-bottom: 1px solid var(--color-line);
+  font-size: calc(15 / var(--rem-base) * 1rem);
+  font-weight: 700;
+  letter-spacing: 0.08em;
+  text-transform: uppercase;
+  color: var(--color-ink-soft);
+}
+
+.projects-grid {
+  display: grid;
+  gap: 1rem;
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+
+.projects-grid--four {
+  grid-template-columns: repeat(4, minmax(0, 1fr));
+}
+
+.projects-grid--two {
+  grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+
+/* cards */
+
+.project-card {
+  display: flex;
+  flex-direction: column;
+  padding: 1.35rem;
+  background: var(--color-white);
+  border: 1px solid var(--color-line);
+  border-radius: calc(13 / var(--rem-base) * 1rem);
+  transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s;
+}
+
+.project-card:hover {
+  border-color: var(--color-line-hover);
+  box-shadow: 0 14px 34px -22px rgb(33 28 23 / 35%);
+  transform: translateY(-2px);
+}
+
+.project-card--row {
+  flex-direction: row;
+  gap: 1.1rem;
+  align-items: flex-start;
+  padding: 1.45rem 1.55rem;
+}
+
+.project-card-icon {
+  height: calc(34 / var(--rem-base) * 1rem);
+  width: calc(34 / var(--rem-base) * 1rem);
+  flex: none;
+  object-fit: contain;
+}
+
+.project-card-icon--lg {
+  height: calc(44 / var(--rem-base) * 1rem);
+  width: calc(44 / var(--rem-base) * 1rem);
+}
+
+.project-card-body {
+  flex: 1;
+  min-width: 0;
+}
+
+.project-card-title {
+  margin: 0.9rem 0 0;
+  font-size: calc(17 / var(--rem-base) * 1rem);
+  font-weight: 700;
+  line-height: 1.2;
+  color: var(--color-ink);
+}
+
+.project-card--row .project-card-title {
+  margin-top: 0;
+  font-size: calc(19 / var(--rem-base) * 1rem);
+}
+
+.project-card-desc {
+  margin: 0.45rem 0 0.8rem;
+  font-size: calc(13.5 / var(--rem-base) * 1rem);
+  color: var(--color-ink-soft);
+  text-wrap: pretty;
+}
+
+.project-card--row .project-card-desc {
+  font-size: calc(14.5 / var(--rem-base) * 1rem);
+}
+
+.project-card-stats {
+  margin: 0;
+  font-family: var(--monospace-font-family);
+  font-size: calc(11.5 / var(--rem-base) * 1rem);
+  line-height: 1.7;
+  color: var(--color-ink-soft);
+}
+
+.project-card-meta {
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  gap: 0.9rem;
+}
+
+.project-card-link {
+  color: var(--link-font-color);
+  font-size: calc(13.5 / var(--rem-base) * 1rem);
+  font-weight: 700;
+}
+
+.project-card-link:hover {
+  color: var(--link_hover-font-color);
+  text-decoration: none;
+}
+
+.project-card-link--muted {
+  color: var(--color-ink-soft);
+}
+
+.projects-footnote {
+  margin: 1.4rem 0 0;
+  font-size: calc(14 / var(--rem-base) * 1rem);
+  color: var(--color-ink-soft);
+  text-wrap: pretty;
+}
+
+/* responsive */
+
+@media screen and (width <= 1024px) {
+  .projects {
+    padding: 2rem 1.25rem 3rem;
+  }
+
+  .projects-grid--four {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .projects-grid--two {
+    grid-template-columns: minmax(0, 1fr);
+  }
+
+  .projects h1 {
+    font-size: calc(36 / var(--rem-base) * 1rem);
+  }
+}
+
+@media screen and (width <= 626px) {
+  .projects-grid--four {
+    grid-template-columns: minmax(0, 1fr);
+  }
+
+  .project-card--row {
+    flex-direction: column;
+  }
+}
diff --git a/antora-ui-camel/src/css/site.css b/antora-ui-camel/src/css/site.css
index b72d35771ce..67f02d9bc0c 100644
--- a/antora-ui-camel/src/css/site.css
+++ b/antora-ui-camel/src/css/site.css
@@ -25,6 +25,7 @@
 @import url('release.css');
 @import url('misc.css');
 @import url('docs.css');
+@import url('projects.css');
 @import url('sitemap.css');
 @import url('videos.css');
 @import url('download.css');
diff --git a/content/projects/_index.md b/content/projects/_index.md
new file mode 100644
index 00000000000..cec82bcbec4
--- /dev/null
+++ b/content/projects/_index.md
@@ -0,0 +1,14 @@
+---
+title: "All Camel Projects"
+description: Every Apache Camel project — Camel Core, Spring Boot, Quarkus, CLI, Camel K, Kamelets, Karavan, Kafka Connector and Karaf — with descriptions, documentation links and activity.
+layout: list
+keywords:
+- apache camel
+- camel k
+- camel quarkus
+- camel spring boot
+- kamelets
+- karavan
+- kafka connector
+- karaf
+---
diff --git a/data/projects.yaml b/data/projects.yaml
new file mode 100644
index 00000000000..33f7d74e2cc
--- /dev/null
+++ b/data/projects.yaml
@@ -0,0 +1,71 @@
+# All Camel Projects — drives layouts/projects/list.html
+# Icons resolve through the Antora UI rev-manifest: antora-ui-camel/src/img/.svg
+# Activity figures are maintained by hand (commits · contributors · GitHub stars, 2025–2026).
+
+intro: >-
+  Every Camel project, with descriptions and current activity. The primary
+  runtimes are featured on the home page; the projects below serve more
+  specialized needs.
+
+primary:
+  - name: Camel Core
+    icon: logo-d
+    description: The integration framework and routing engine.
+    stats: 7,641 commits · 192 contributors · 6,222 ★
+    docs: /camel-core/
+    source: https://github.com/apache/camel/
+  - name: Camel Spring Boot
+    icon: spring-boot
+    description: Camel on Spring Boot with component starters.
+    stats: 859 commits · 42 contributors · 187 ★
+    docs: /camel-spring-boot/latest/
+    source: https://github.com/apache/camel-spring-boot
+  - name: Camel Quarkus
+    icon: quarkus
+    description: Camel as cloud-native Quarkus extensions.
+    stats: 1,285 commits · 40 contributors · 292 ★
+    docs: /camel-quarkus/latest/
+    source: https://github.com/apache/camel-quarkus/
+  - name: Camel CLI
+    icon: cli
+    description: Terminal tooling; ships with Camel Core.
+    stats: Part of the Camel Core project
+    docs: /manual/camel-jbang.html
+    source: https://github.com/apache/camel/tree/main/dsl/camel-jbang
+
+specialized:
+  - name: Camel K
+    icon: kubernetes
+    description: A lightweight integration framework that runs natively on Kubernetes, built for serverless workloads.
+    stats: 634 commits · 22 contributors · 917 ★
+    docs: /camel-k/latest/
+    source: https://github.com/apache/camel-k/
+  - name: Camel Kamelets
+    icon: logo-d
+    description: Reusable, high-level connectors that snap together to build routes with minimal configuration.
+    stats: 578 commits · 15 contributors · 69 ★
+    docs: /camel-kamelets/latest/
+    source: https://github.com/apache/camel-kamelets
+  - name: Camel Karavan
+    icon: karavan
+    description: A low-code, visual data-integration platform for designing and managing Camel routes.
+    stats: 210 commits · 14 contributors · 590 ★
+    docs: ""
+    source: https://github.com/apache/camel-karavan
+  - name: Camel Kafka Connector
+    icon: apache-kafka
+    description: Embeds Camel within Kafka Connect, exposing every Camel component as a Kafka connector.
+    stats: See GitHub for current activity
+    docs: /camel-kafka-connector/latest/
+    source: https://github.com/apache/camel-kafka-connector/
+  - name: Camel Karaf
+    icon: apache-karaf
+    description: Runs Camel inside the Apache Karaf OSGi container for modular deployments.
+    stats: See GitHub for current activity
+    docs: /camel-karaf/latest/
+    source: https://github.com/apache/camel-karaf
+
+footnote: >-
+  Nothing has been removed — these projects remain fully supported and
+  documented. Activity figures reflect commits, contributors, and GitHub stars
+  over 2025–2026.
diff --git a/layouts/projects/list.html b/layouts/projects/list.html
new file mode 100644
index 00000000000..3717b3e0240
--- /dev/null
+++ b/layouts/projects/list.html
@@ -0,0 +1,55 @@
+{{ partial "header.html" . }}
+{{- $data := .Site.Data.projects }}
+
+
+
+
+
+ +
+ ← Back to home +

{{ .Title }}

+

{{ $data.intro }}

+
+ +
+

Primary projects

+
    + {{- range $data.primary }} +
  • + +

    {{ .name }}

    +

    {{ .description }}

    +

    {{ .stats }}

    +
  • + {{- end }} +
+
+ +
+

Specialized & ecosystem projects

+
    + {{- range $data.specialized }} +
  • + +
    +

    {{ .name }}

    +

    {{ .description }}

    +
    + {{ .stats }} + {{- with .docs }}Read more →{{ end }} + {{- with .source }}Source{{ end }} +
    +
    +
  • + {{- end }} +
+

{{ $data.footnote }}

+
+ +
+
+
+
+ +{{ partial "footer.html" . }} From 628f8cea731ae4c13954993eb7d60dae7ae4bfad Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 13:33:44 -0400 Subject: [PATCH 078/209] fix(tests): sync the antora-ui bundle into documentation/_ before Hugo builds config.toml serves the site's "_" assets from documentation/_ (staticDir includes it, and the "data" module mount reads rev-manifest.json from there), but "yarn workspace antora-ui-camel run build" only writes to antora-ui-camel/public/_. Nothing connected the two, so the harness could build successfully and report confident computed-style values against a stale bundle: Task 2 hit exactly this, where a CSS retarget produced correct diffs but wrong --measure output until the bundle was manually copied over. Before Hugo runs, copy css/js/img/font/data from antora-ui-camel/public/_ into documentation/_, refusing to run if the bundle's rev-manifest.json is missing, and failing loudly if anything under antora-ui-camel/src is newer than that manifest, so a future task cannot edit CSS, forget to rebuild the bundle, and get a green result from stale output. --- tests/hugo/build.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/hugo/build.sh b/tests/hugo/build.sh index d679d8855d3..48cee887a09 100755 --- a/tests/hugo/build.sh +++ b/tests/hugo/build.sh @@ -37,6 +37,32 @@ if [ -z "${GITHUB_TOKEN:-}" ]; then fi fi +# config.toml serves the site's "_" assets from documentation/_ (staticDir and the +# "data" module mount both point there), but `yarn workspace antora-ui-camel run +# build` only writes to antora-ui-camel/public/_. Nothing else connects the two, so +# without this sync the site would silently serve a stale bundle and every --measure +# reading below would be a confident lie. +BUNDLE="$REPO/antora-ui-camel/public/_" +MANIFEST="$BUNDLE/data/rev-manifest.json" + +if [ ! -f "$MANIFEST" ]; then + echo "missing $MANIFEST -- run 'yarn workspace antora-ui-camel run build' first" >&2 + exit 1 +fi + +if find "$REPO/antora-ui-camel/src" -newer "$MANIFEST" -print -quit | grep -q .; then + echo "antora-ui-camel bundle is stale (source newer than rev-manifest.json) -- run 'yarn workspace antora-ui-camel run build'" >&2 + exit 1 +fi + +mkdir -p "$REPO/documentation/_" +for asset_dir in css js img font data; do + if [ -d "$BUNDLE/$asset_dir" ]; then + mkdir -p "$REPO/documentation/_/$asset_dir" + cp -R "$BUNDLE/$asset_dir/." "$REPO/documentation/_/$asset_dir/" + fi +done + if ! node_modules/.bin/hugo --cacheDir "$REPO/.hugo_data" -d "$SITE" >"$LOG" 2>&1; then echo "hugo build FAILED. Last 20 lines of $LOG:" >&2 tail -20 "$LOG" >&2 From e15463bfface6bae731fa6dc835be43cbf267f37 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 13:52:02 -0400 Subject: [PATCH 079/209] feat(home): move the front page onto data and rebuild the hero Replaces 250 lines of nested section/div/icon shortcodes in content/_index.md with data/home.yaml plus a real template. content/_index.md keeps only its front matter. frontpage.css is rewritten. The a.button rules stay, since the header and five content pages consume them; everything else goes, including the 'text-transform: uppercase' on section.frontpage headings that was shouting every h1 and h2 on the page. Adds four tokens for design values used more than once and with no existing token: --color-dark-3, --color-prompt, --color-on-dark-dim, and --color-button-on-dark-border. The last replaces --color-dark-line on .button.on-dark, which was nearly invisible against ink. --- ...ite-b398d54a0f.css => site-cc3962afb3.css} | 2 +- .../public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- .../public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 515 ++++++------------ antora-ui-camel/src/css/vars.css | 4 + content/_index.md | 259 --------- data/home.yaml | 187 +++++++ layouts/index.html | 66 +-- 10 files changed, 380 insertions(+), 661 deletions(-) rename antora-ui-camel/public/_/css/{site-b398d54a0f.css => site-cc3962afb3.css} (68%) create mode 100644 data/home.yaml diff --git a/antora-ui-camel/public/_/css/site-b398d54a0f.css b/antora-ui-camel/public/_/css/site-cc3962afb3.css similarity index 68% rename from antora-ui-camel/public/_/css/site-b398d54a0f.css rename to antora-ui-camel/public/_/css/site-cc3962afb3.css index e4500c25983..fde804d557b 100644 --- a/antora-ui-camel/public/_/css/site-b398d54a0f.css +++ b/antora-ui-camel/public/_/css/site-cc3962afb3.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}section.frontpage h1,section.frontpage h2{font-weight:700;color:#211c17;line-height:1.3;margin:1rem 0 0;text-transform:uppercase;word-wrap:break-word}section.frontpage{color:#3a332b;font-size:inherit;line-height:1.6;margin:0 auto;max-width:66.66667rem}section.frontpage a{color:#a84e0d;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}section.frontpage a:hover{color:#853c09}section.frontpage h1{width:100%;text-align:center;margin-bottom:1rem;font-size:2.5rem}section.frontpage h2{text-align:center}header.frontpage{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:2rem 3rem 2.5rem}header.frontpage img{width:45vw;max-height:50vh}header.frontpage .main-heading{width:50vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-left:2rem}header.frontpage h1{font-size:5vw;color:#211c17;margin-bottom:.5rem}header.frontpage p{font-size:1.2rem;margin-bottom:2rem;line-height:1.7rem}a.button,section.frontpage a.button{white-space:nowrap;margin:.5rem;background-image:none;border-radius:.44444rem;font-weight:700;font-size:.83333rem;padding:.72222rem 1.33333rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem;line-height:1}header.frontpage a.button{padding:.77778rem 1.44444rem;font-size:.86111rem}a.button.dark,section.frontpage a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover,section.frontpage a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #34302a;color:#faf7f1}div.frontpage.news{padding:.2rem 0;width:20%;text-align:center;margin-left:3rem;background-color:#f5f5f5;border-radius:1rem 1rem 0 0}div.frontpage.news h2{margin-bottom:.5rem}section.frontpage.columns.blog-posts{margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding:1rem 1rem 1rem 3rem;max-width:none;border-top:none;background-color:#f5f5f5}section.frontpage.blog-posts ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0}li.blog-post .content{padding:1rem .5rem 1rem 1rem}li.blog-post .content h2{text-align:left;margin:0}li.blog-post .content p{margin:.2rem 0}li.blog-post .content a{font-weight:700;white-space:nowrap;background:none}li.blog-post{display:-webkit-box;display:-ms-flexbox;display:flex;width:30vw;margin:0;padding-right:1rem}li.blog-post:last-child{padding-right:0}li.blog-post time.date{margin-top:1rem;text-align:center;color:#211c17;text-transform:uppercase}li.blog-post time.date .day{font-size:3.2rem;font-weight:700;padding:0;line-height:1;display:block}li.blog-post time.date .month{font-size:1.5rem;font-weight:700;line-height:1.2;display:block}section.frontpage.columns.functionalities p,section.frontpage.projects .project .content p{margin-bottom:1.5rem}section.frontpage.apache,section.frontpage.functionalities,section.frontpage.projects{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #f5f5f5;padding:2rem 1rem 1rem}section.frontpage.columns.functionalities{border:none}section.frontpage.columns.functionalities h2,section.frontpage.projects .project .content h2,section.frontpage.projects .project .content p{text-align:left;text-transform:none}section.frontpage.columns.functionalities .box{width:70%;display:-webkit-box;display:-ms-flexbox;display:flex;margin:2vw auto}section.frontpage.columns.functionalities .box .content{width:55vw;margin:0 1vw}section.frontpage.columns.functionalities .box .icon{width:30vw;text-align:center}section.frontpage.columns.functionalities img{height:12rem;margin:0 1vw}section.frontpage.projects{width:80%;max-width:none;margin:0 auto}section.frontpage.projects .project{display:-webkit-box;display:-ms-flexbox;display:flex;width:50%;padding:1rem}section.frontpage.projects .project .icon{min-width:8rem;margin-right:1rem;text-align:center}section.frontpage.projects .project img{height:6rem;margin-top:2rem}.split{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;padding:1rem 0 2rem}.split img{max-width:100%}@media screen and (width <= 1024px){header.frontpage h1{font-size:3rem;text-align:center}section.frontpage h1{font-size:2.5rem}.split{margin:0 1rem;-webkit-box-flex:100%;-ms-flex:100%;flex:100%}.split img{display:block;margin:auto}header.frontpage .main-heading,section.frontpage.apache,section.frontpage.blog-posts .blog-post,section.frontpage.columns.functionalities,section.frontpage.columns.projects{width:90%;margin:0 auto}section.frontpage.columns.blog-posts ul{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}section.frontpage.blog-posts .blog-post .date,section.frontpage.projects .project .icon{min-width:25%}section.frontpage.columns.functionalities .box,section.frontpage.projects .project{width:100%}section.frontpage.functionalities .icon img,section.frontpage.projects .icon img{max-width:25vw;margin:auto}section.frontpage.functionalities .content{width:70vw}header.frontpage p{font-size:inherit;text-align:center}header.frontpage{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;margin:0}header.frontpage img{width:60%;max-height:45vh;margin:0 auto}div.frontpage.news{width:100%;margin:1.5rem 0 0;text-transform:uppercase;border-radius:0}a.button,section.frontpage a.button{line-height:1.5rem}}@media screen and (width <= 626px){header.frontpage .main-heading,section.frontpage.apache,section.frontpage.columns.blog-posts,section.frontpage.columns.functionalities,section.frontpage.projects{width:100%;margin:0;padding:1rem}section.frontpage.columns.functionalities .box.left,section.frontpage.projects .project{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0}section.frontpage.columns.functionalities .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;margin:0;padding:0}section.frontpage.columns.functionalities .box .content,section.frontpage.columns.functionalities .box .content h2,section.frontpage.columns.functionalities .box .icon,section.frontpage.columns.functionalities p,section.frontpage.projects .project .content h2,section.frontpage.projects .project .content p,section.frontpage.projects .project .icon{text-align:center;margin:0;width:100%}section.frontpage.columns.functionalities .box .content p,section.frontpage.projects .project .content p{margin:1rem 0 1.5rem}section.frontpage.columns.functionalities .box .icon img{max-width:50%;height:auto;margin-top:2rem}section.frontpage h1{font-size:2rem}header.frontpage h1{font-size:2.5rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 89007ff108f..0c5164104a5 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-b398d54a0f.css", + "css/site.css": "css/site-cc3962afb3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index b2be77b19fc..8ca4ce71944 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-b398d54a0f.css", + "css/site.css": "css/site-cc3962afb3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 6dbb9694f45..80888e8115c 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 89007ff108f..0c5164104a5 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-b398d54a0f.css", + "css/site.css": "css/site-cc3962afb3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index 542a938e320..4787193767d 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -1,109 +1,25 @@ -/* common css for sections */ - -section.frontpage h1, -section.frontpage h2 { - font-weight: var(--heading-font-weight); - color: var(--heading-font-color); - line-height: 1.3; - margin: 1rem 0 0; - text-transform: uppercase; - word-wrap: break-word; -} - -section.frontpage { - color: var(--doc-font-color); - font-size: var(--doc-font-size); - /* Pinned rather than tracking --doc-line-height, which moved to 1.7 for the - article. The home page is redesigned in piece 4. */ - line-height: 1.6; - margin: 0 auto; - max-width: var(--frontpage-max-width); -} - -section.frontpage a { - color: var(--link-font-color); - text-decoration: none; - background-image: linear-gradient(to right, var(--link-font-color) 50%, transparent 50%); - background-position: 0 1.1em; - background-repeat: repeat-x; - background-size: 7px 1px; -} - -section.frontpage a:hover { - color: var(--link_hover-font-color); -} - -section.frontpage h1 { - width: 100%; - text-align: center; - margin-bottom: 1rem; - font-size: 2.5rem; -} - -section.frontpage h2 { - text-align: center; -} - -/* css for header section */ - -header.frontpage { - display: flex; - flex-direction: row; - margin: 2rem 3rem 2.5rem; -} - -header.frontpage img { - width: 45vw; - max-height: 50vh; -} - -header.frontpage .main-heading { - width: 50vw; - display: flex; - flex-direction: column; - margin-left: 2rem; -} - -header.frontpage h1 { - font-size: 5vw; - color: var(--color-ink); - margin-bottom: 0.5rem; -} - -header.frontpage p { - font-size: 1.2rem; - margin-bottom: 2rem; - line-height: 1.7rem; -} +/* Buttons, shared by the header, the home page, and static content pages. */ -a.button, -section.frontpage a.button { - white-space: nowrap; - margin: 0.5rem; +a.button { + align-items: center; background-image: none; border-radius: calc(8 / var(--rem-base) * 1rem); - font-weight: 700; - font-size: calc(15 / var(--rem-base) * 1rem); - padding: calc(13 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem); display: inline-flex; - align-items: center; + font-size: calc(15 / var(--rem-base) * 1rem); + font-weight: 700; gap: calc(8 / var(--rem-base) * 1rem); line-height: 1; + margin: 0.5rem; + padding: calc(13 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem); + white-space: nowrap; } -header.frontpage a.button { - padding: calc(14 / var(--rem-base) * 1rem) calc(26 / var(--rem-base) * 1rem); - font-size: calc(15.5 / var(--rem-base) * 1rem); -} - -a.button.dark, -section.frontpage a.button.dark { +a.button.dark { background-color: var(--color-camel-orange); color: var(--color-white); } -a.button.dark:hover, -section.frontpage a.button.dark:hover { +a.button.dark:hover { background-color: var(--color-orange-deep); color: var(--color-white); } @@ -118,318 +34,207 @@ a.button.light:hover { a.button.on-dark, a.button.on-dark:hover { background-color: transparent; - border: 1px solid var(--color-dark-line); + border: 1px solid var(--color-button-on-dark-border); color: var(--color-on-dark); } -/* css for blog section */ +/* Home page (layouts/index.html, data/home.yaml) */ -div.frontpage.news { - padding: 0.2rem 0; - width: 20%; - text-align: center; - margin-left: 3rem; - background-color: var(--color-smoke-50); - border-radius: 1rem 1rem 0 0; +.home { + color: var(--color-ink-2); } -div.frontpage.news h2 { - margin-bottom: 0.5rem; +.home a { + background-image: none; + text-decoration: none; } -section.frontpage.columns.blog-posts { - margin: 0; - display: flex; - flex-direction: row; - padding: 1rem 1rem 1rem 3rem; - max-width: none; - border-top: none; - background-color: var(--color-smoke-50); -} +/* Shared section vocabulary, reused by every home section. */ -section.frontpage.blog-posts ul { - display: flex; - flex-wrap: wrap; - margin: 0; - padding: 0; +.home-section { + margin: 0 auto; + max-width: var(--frontpage-max-width); + padding: calc(66 / var(--rem-base) * 1rem) var(--page-padding-x) + calc(20 / var(--rem-base) * 1rem); } -li.blog-post .content { - padding: 1rem; - padding-right: 0.5rem; +.home-section-head { + margin-bottom: calc(44 / var(--rem-base) * 1rem); + text-align: center; } -li.blog-post .content h2 { - text-align: left; +.home-eyebrow { + color: var(--color-orange-deep); + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.08em; margin: 0; + text-transform: uppercase; } -li.blog-post .content p { - margin: 0.2rem 0; +.home-section-head h2 { + font-family: var(--display-font-family); + font-size: calc(38 / var(--rem-base) * 1rem); + font-weight: 800; + letter-spacing: -0.025em; + line-height: 1.15; + margin: calc(12 / var(--rem-base) * 1rem) 0 0; } -li.blog-post .content a { - font-weight: bold; - white-space: nowrap; - background: none; +.home-section-sub { + color: var(--color-ink-soft); + font-size: calc(16 / var(--rem-base) * 1rem); + margin: calc(6 / var(--rem-base) * 1rem) 0 0; } -li.blog-post { - display: flex; - width: 30vw; +.home-grid { + display: grid; + list-style: none; margin: 0; - padding-right: 1rem; -} - -li.blog-post:last-child { - padding-right: 0; -} - -li.blog-post time.date { - margin-top: 1rem; - text-align: center; - color: var(--color-ink); - text-transform: uppercase; -} - -li.blog-post time.date .day { - font-size: 3.2rem; - font-weight: bold; padding: 0; - line-height: 1; - display: block; -} - -li.blog-post time.date .month { - font-size: 1.5rem; - font-weight: bold; - line-height: 1.2; - display: block; } -/* common css for columns section */ - -section.frontpage.columns.functionalities p, -section.frontpage.projects .project .content p { - margin-bottom: 1.5rem; -} - -section.frontpage.projects, -section.frontpage.apache, -section.frontpage.functionalities { +.home-card { + background: var(--color-white); + border: 1px solid var(--color-line); + border-radius: calc(13 / var(--rem-base) * 1rem); display: flex; - flex-wrap: wrap; - border-top: 1px solid var(--color-smoke-50); - padding: 2rem 1rem 1rem; -} - -section.frontpage.columns.functionalities { - border: none; + flex-direction: column; + transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s; } -section.frontpage.columns.functionalities h2, -section.frontpage.projects .project .content h2, -section.frontpage.projects .project .content p { - text-align: left; - text-transform: none; +.home-card:hover { + border-color: var(--color-line-hover); + box-shadow: 0 14px 34px -22px rgb(33 28 23 / 35%); + transform: translateY(-2px); } -/* css for functionalities section */ +/* Hero */ -section.frontpage.columns.functionalities .box { - width: 70%; - display: flex; - margin: 2vw auto; +.home-hero { + align-items: center; + display: grid; + gap: calc(56 / var(--rem-base) * 1rem); + grid-template-columns: 1.05fr 0.95fr; + margin: 0 auto; + max-width: var(--frontpage-max-width); + padding: calc(64 / var(--rem-base) * 1rem) var(--page-padding-x) + calc(56 / var(--rem-base) * 1rem); } -section.frontpage.columns.functionalities .box .content { - width: 55vw; - margin: 0 1vw; +.home-hero-badge { + align-items: center; + background: var(--color-orange-tint); + border-radius: calc(20 / var(--rem-base) * 1rem); + color: var(--color-orange-deep); + display: inline-flex; + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); + font-weight: 500; + gap: calc(8 / var(--rem-base) * 1rem); + letter-spacing: 0.02em; + margin: 0; + padding: calc(6 / var(--rem-base) * 1rem) calc(12 / var(--rem-base) * 1rem); } -section.frontpage.columns.functionalities .box .icon { - width: 30vw; - text-align: center; +.home-hero h1 { + color: var(--color-ink); + font-family: var(--display-font-family); + font-size: calc(60 / var(--rem-base) * 1rem); + font-weight: 800; + letter-spacing: -0.03em; + line-height: 1.02; + margin: calc(20 / var(--rem-base) * 1rem) 0 0; +} + +.home-hero-tagline { + color: var(--color-ink-2); + font-family: var(--display-font-family); + font-size: calc(25 / var(--rem-base) * 1rem); + font-weight: 600; + line-height: 1.2; + margin: calc(14 / var(--rem-base) * 1rem) 0 0; } -section.frontpage.columns.functionalities img { - height: 12rem; - margin: 0 1vw; +.home-hero-lead { + color: var(--color-ink-soft); + font-size: calc(17.5 / var(--rem-base) * 1rem); + line-height: 1.55; + margin: calc(20 / var(--rem-base) * 1rem) 0 0; + max-width: calc(520 / var(--rem-base) * 1rem); + text-wrap: pretty; } -/* css for projects section */ -section.frontpage.projects { - width: 80%; - max-width: none; - margin: 0 auto; +.home-hero-actions { + display: flex; + gap: calc(14 / var(--rem-base) * 1rem); + margin: calc(30 / var(--rem-base) * 1rem) 0 0; } -section.frontpage.projects .project { - display: flex; - width: 50%; - padding: 1rem; +.home-hero-actions .button { + font-size: calc(15.5 / var(--rem-base) * 1rem); + margin: 0; + padding: calc(14 / var(--rem-base) * 1rem) calc(26 / var(--rem-base) * 1rem); } -section.frontpage.projects .project .icon { - min-width: 8rem; - margin-right: 1rem; - text-align: center; +.home-hero-art { + align-items: center; + aspect-ratio: 1 / 0.86; + background: radial-gradient(circle at 50% 50%, var(--color-paper-2) 0%, var(--color-paper) 70%); + border: 1px solid var(--color-line); + border-radius: calc(16 / var(--rem-base) * 1rem); + display: flex; + justify-content: center; } -section.frontpage.projects .project img { - height: 6rem; - margin-top: 2rem; +.home-hero-art img { + display: block; + filter: drop-shadow(0 30px 50px rgb(233 120 38 / 30%)); + height: auto; + width: 62%; } -/* css for apache section */ +/* Hero CLI bar */ -.split { - flex: 50%; - padding: 1rem 0 2rem; +.home-cli { + align-items: stretch; + background: var(--color-ink); + border: 1px solid var(--color-dark-line); + border-radius: calc(9 / var(--rem-base) * 1rem); + display: flex; + margin: calc(26 / var(--rem-base) * 1rem) 0 0; + max-width: calc(520 / var(--rem-base) * 1rem); + overflow: hidden; +} + +.home-cli-command { + color: var(--syntax-text); + flex: 1; + font-family: var(--monospace-font-family); + font-size: calc(13.5 / var(--rem-base) * 1rem); + overflow: hidden; + padding: calc(14 / var(--rem-base) * 1rem) calc(16 / var(--rem-base) * 1rem); + text-overflow: ellipsis; + white-space: nowrap; } -.split img { - max-width: 100%; +.home-cli-prompt { + color: var(--color-prompt); } -/* css for tablet view */ - -@media screen and (width <= 1024px) { - header.frontpage h1 { - font-size: 3rem; - text-align: center; - } - - section.frontpage h1 { - font-size: 2.5rem; - } - - .split { - margin: 0 1rem; - flex: 100%; - } - - .split img { - display: block; - margin: auto; - } - - header.frontpage .main-heading, - section.frontpage.columns.functionalities, - section.frontpage.columns.projects, - section.frontpage.apache, - section.frontpage.blog-posts .blog-post { - width: 90%; - margin: 0 auto; - } - - section.frontpage.columns.blog-posts ul { - flex-direction: column; - } - - section.frontpage.blog-posts .blog-post .date, - section.frontpage.projects .project .icon { - min-width: 25%; - } - - section.frontpage.projects .project, - section.frontpage.columns.functionalities .box { - width: 100%; - } - - section.frontpage.functionalities .icon img, - section.frontpage.projects .icon img { - max-width: 25vw; - margin: auto; - } - - section.frontpage.functionalities .content { - width: 70vw; - } - - header.frontpage p { - font-size: inherit; - text-align: center; - } - - header.frontpage { - flex-direction: column-reverse; - margin: 0; - } - - header.frontpage img { - width: 60%; - max-height: 45vh; - margin: 0 auto; - } - - div.frontpage.news { - width: 100%; - margin: 1.5rem 0 0; - text-transform: uppercase; - border-radius: 0; - } - - a.button, - section.frontpage a.button { - line-height: 1.5rem; - } +.home-cli-copy { + background: var(--color-dark-2); + border: 0; + border-left: 1px solid var(--color-dark-line); + color: var(--syntax-text); + cursor: pointer; + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + padding: 0 calc(16 / var(--rem-base) * 1rem); } -/* css for mobile view */ - -@media screen and (width <= 626px) { - header.frontpage .main-heading, - section.frontpage.columns.functionalities, - section.frontpage.columns.blog-posts, - section.frontpage.projects, - section.frontpage.apache { - width: 100%; - margin: 0; - padding: 1rem; - } - - section.frontpage.projects .project, - section.frontpage.columns.functionalities .box.left { - flex-direction: column; - margin: 0; - padding: 0; - } - - section.frontpage.columns.functionalities .box.right { - flex-direction: column-reverse; - margin: 0; - padding: 0; - } - - section.frontpage.projects .project .content h2, - section.frontpage.projects .project .icon, - section.frontpage.columns.functionalities .box .content h2, - section.frontpage.columns.functionalities .box .content, - section.frontpage.columns.functionalities .box .icon, - section.frontpage.columns.functionalities p, - section.frontpage.projects .project .content p { - text-align: center; - margin: 0; - width: 100%; - } - - section.frontpage.columns.functionalities .box .content p, - section.frontpage.projects .project .content p { - margin: 1rem 0 1.5rem; - } - - section.frontpage.columns.functionalities .box .icon img { - max-width: 50%; - height: auto; - margin-top: 2rem; - } - - section.frontpage h1 { - font-size: 2rem; - } - - header.frontpage h1 { - font-size: 2.5rem; - } +.home-cli-copy:hover { + background: #3a342c; } diff --git a/antora-ui-camel/src/css/vars.css b/antora-ui-camel/src/css/vars.css index 9cd2020abba..9be8deb0c78 100644 --- a/antora-ui-camel/src/css/vars.css +++ b/antora-ui-camel/src/css/vars.css @@ -47,10 +47,14 @@ --color-orange-tint: #fbead8; --color-orange-glow: #f2a05a; --color-dark-2: #2b2620; + --color-dark-3: #1c1813; + --color-prompt: #e0805a; --color-dark-line: #34302a; --color-on-dark: #faf7f1; --color-on-dark-soft: #c4bbac; + --color-on-dark-dim: #cabfb0; --color-on-dark-muted: #8f867a; + --color-button-on-dark-border: #4a443c; /* 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 */ diff --git a/content/_index.md b/content/_index.md index 1fd67ccd7e5..a401d967751 100644 --- a/content/_index.md +++ b/content/_index.md @@ -19,262 +19,3 @@ keywords: - mcp - cli --- - - -{{< section "frontpage columns functionalities" >}} - -# Why Camel? - -{{< div "box right" >}} - -{{< div "content">}} - -## Based on Enterprise Integration Patterns - -Camel supports most of the Enterprise Integration Patterns from the excellent book by Gregor Hohpe and Bobby Woolf, and newer integration patterns from microservice architectures to help you solve your integration problem by applying best practices out of the box. - -

Read more on EIP

- -{{< /div >}} - -{{< div "icon" >}} - -component icon - -{{< /div >}} - -{{< /div >}} - - -{{< div "box left" >}} - -{{< div "icon" >}} - -runtime icon - -{{< /div >}} - -{{< div "content">}} - -## Runs Everywhere - -Apache Camel is standalone, and can be embedded as a library within Spring Boot, Quarkus, Application Servers, and in the clouds. Camel subprojects focus on making your work easy. - -

Go to Camel Subprojects

- -{{< /div >}} - -{{< /div >}} - -{{< div "box right" >}} - -{{< div "content">}} - -## Packed with Components -Packed with several hundred components that are used to access databases, message queues, APIs or basically anything under the sun. Helping you integrate with everything. - -

Go to Component Reference

- -{{< /div >}} - -{{< div "icon" >}} - -component icon - -{{< /div >}} - -{{< /div >}} - -{{< div "box left" >}} - -{{< div "icon" >}} - -data icon - -{{< /div >}} - -{{< div "content">}} - -## Supports over 50 Data Formats - -Camel supports around 50 data formats, allowing to translate messages in multiple formats, and with support from industry standard formats from finance, telco, health-care, and more. -

See Supported Formats

- -{{< /div >}} - -{{< /div >}} - -{{< /section >}} - -{{< section "frontpage projects" >}} - -# Apache Camel Projects - -{{< div "project" >}} - -{{< div "icon" >}} - -{{< icon "logo-d" "Apache Camel logo" >}} - -{{< /div >}} - -{{< div "content" >}} - -## Camel Core -Apache Camel helps you integrate various systems consuming or producing data. -

Read More

- -{{< /div >}} - -{{< /div >}} - -{{< div "project" >}} - -{{< div "icon" >}} - -{{< icon "kubernetes" "Kubernetes logo" >}} - -{{< /div >}} - -{{< div "content" >}} - -## Camel K -Apache Camel K is a lightweight integration framework that runs natively on Kubernetes. -

Read More

- -{{< /div >}} - -{{< /div >}} - -{{< div "project" >}} - -{{< div "icon" >}} - -{{< icon "quarkus" "Quarkus logo" >}} - -{{< /div >}} - -{{< div "content" >}} - -## Camel Quarkus -Apache Camel Quarkus packages 280+ Camel components as Quarkus extensions. -

Read More

- -{{< /div >}} - -{{< /div >}} - -{{< div "project" >}} - -{{< div "icon" >}} - -{{< icon "apache-kafka" "Apache Kafka logo" >}} - -{{< /div >}} - -{{< div "content" >}} - -## Camel Kafka Connector -Apache Camel Kafka Connector embeds Camel within Kafka Connect. - -

Read More

- -{{< /div >}} - -{{< /div >}} - -{{< div "project" >}} - -{{< div "icon" >}} - -{{< icon "spring-boot" "Spring Boot logo" >}} - -{{< /div >}} - -{{< div "content" >}} - -## Camel Spring Boot -Apache Camel Spring Boot runs Camel on Spring Boot and provides starters for Camel components. -

Read More

- -{{< /div >}} - -{{< /div >}} - -{{< div "project" >}} - -{{< div "icon" >}} - -{{< icon "apache-karaf" "Apache Karaf logo" >}} - -{{< /div >}} - -{{< div "content" >}} - -## Camel Karaf -Apache Camel Karaf makes running Camel in the OSGi container. -

Read More

- -{{< /div >}} - -{{< /section >}} - -{{< div "project" >}} - -{{< div "icon" >}} - -{{< icon "karavan" "Karavan logo" >}} - -{{< /div >}} - -{{< div "content" >}} - -## Camel Karavan -Apache Camel Karavan a Low-code Data Integration Platform. -

Read More

- -{{< /div >}} - -{{< /div >}} - -{{< div "project" >}} - -{{< div "icon" >}} - -{{< icon "cli" "CLI icon" >}} - -{{< /div >}} - -{{< div "content" >}} - -## Camel CLI - -Camel CLI lets you easily get started with Apache Camel and build low-code integrations — all from the command line. - -

Read More

- -{{< /div >}} - -{{< /div >}} - -# Apache & OpenSource - -{{< div "split" >}} -{{< icon "asf_logo_wide" "The ASF, Est. 1999" >}} -{{< /div >}} - -{{< div "split" >}} - -**Camel is your project!** - -Camel is an [Apache Software Foundation](https://www.apache.org) project, available under the [Apache v2 license](https://apache.org/licenses/LICENSE-2.0). It's a complete open community, always listening to proposals and comments. - -[Sources](./community/sources/), [mailing lists](./community/mailing-list/), [issue tracker](./community/support/): it's fully open, you can access directly. - -We also love contributions: don't hesitate to [contribute](./community/contributing/). You can contribute by editing this page! - -[Be Involved In The Community](./community/contributing/) | [How To Contribute](./community/contributing/) - -{{< /div >}} - -{{< /section >}} diff --git a/data/home.yaml b/data/home.yaml new file mode 100644 index 00000000000..95a7bf231a6 --- /dev/null +++ b/data/home.yaml @@ -0,0 +1,187 @@ +# Home page copy and figures. Rendered by layouts/index.html. +# +# The four figures under `stats` were measured on 2026-09-04 against +# apache/camel. The design reference's numbers were illustrative: two of them +# overstated the project and one understated it. Recheck with: +# gh api "repos/apache/camel/commits?per_page=1&sha=main" -i | grep -i '^link:' +# gh api "repos/apache/camel/contributors?per_page=1&anon=true" -i | grep -i '^link:' +# gh api "repos/apache/camel/tags?per_page=1" -i | grep -i '^link:' +# ls public/components/next/*-component.html | wc -l + +hero: + eyebrow: "In production since 2007 · Apache License 2.0" + title: Apache Camel + tagline: The Open Source Integration Framework + lead: >- + Connect anything. Route everything. 390+ connectors, written in Java, YAML, + or XML, deployed on Spring Boot, Quarkus, or standalone with the Camel CLI. + primary_cta: + label: "Get Started →" + url: /manual/getting-started.html + secondary_cta: + label: What is Camel? + url: /what-is-apache-camel/ + command: camel init hello.yaml && camel run hello.yaml + +stats: + label: Used by thousands of companies worldwide + items: + - num: 83,000+ + label: commits + source: 83,428 on apache/camel main, GitHub API, 2026-09-04 + - num: 1,500+ + label: contributors + source: 1,583 distinct authors (anon=true), GitHub API, 2026-09-04 + - num: 390+ + label: components + source: 398 component pages in the built docs, 2026-09-04 + - num: 300+ + label: releases + source: 307 tags on apache/camel, GitHub API, 2026-09-04 + +get_started: + eyebrow: Get Started Your Way + heading: Three clear paths + items: + - name: Spring Boot + badge: Most popular + description: >- + Add Camel to your existing Spring Boot project with a single starter + dependency. Starters for 390+ components. + code: | + # pom.xml + camel-spring-boot-starter + url: /camel-spring-boot/latest/ + - name: Quarkus + badge: "" + description: >- + Cloud-native Camel with fast startup and native compilation. Add + extensions to your Quarkus project. + code: | + quarkus ext add + camel-quarkus-kafka + url: /camel-quarkus/latest/ + - name: Camel CLI + badge: fastest + description: >- + Zero project setup. Just YAML and a terminal, perfect for prototyping, + learning, and AI-assisted workflows. + code: | + camel init hello.yaml + camel run hello.yaml + url: /manual/camel-jbang.html + +features: + eyebrow: Why developers choose Camel + heading: Built for real integration work + items: + - tag: 390+ + title: Connectors out of the box + body: >- + Kafka, REST, JDBC, AWS, Azure, GCP, SAP, Salesforce. Connect to + anything, all out of the box. + - tag: "3" + title: Write it your way + body: >- + Java DSL, YAML, or XML. The same routes, your choice of syntax, mixed + and matched across a project. + - tag: AI + title: AI-ready integration + body: >- + MCP server for AI coding assistants. Use camel trace and camel test to + verify AI-generated routes. + - tag: EIP + title: Battle-tested routing + body: >- + Route, transform, filter, split, and aggregate. Proven across millions + of production deployments. + - tag: CI + title: Standard build + body: >- + Export to Maven or Gradle and deploy with any CI/CD pipeline. A standard + Java app, no special runtime. + - tag: OSS + title: Open source + body: >- + Apache License 2.0, 1,500+ contributors. Fully open community, no vendor + lock-in. + +example: + eyebrow: See it in action + heading: Route messages from Kafka to a database + subhead: The same route, in your choice of syntax. No boilerplate. + run_command: camel run kafka-to-db.yaml + tabs: + - id: yaml + label: YAML + code: | + # Route messages from Kafka into a database + - from: + uri: kafka:orders + steps: + - unmarshal: + json: {} + - to: + uri: >- + sql:INSERT INTO orders (id, amount) + VALUES (:#id, :#amount) + - id: java + label: Java + code: | + from("kafka:orders") + .unmarshal().json() + .to("sql:INSERT INTO orders (id, amount) " + + "VALUES (:#id, :#amount)"); + - id: xml + label: XML + code: | + + + + + + +tiles: + eyebrow: Core Projects + heading: Start with what most teams use + subhead: The framework and its two primary runtimes, plus the CLI. + items: + - name: Camel Core + icon: logo-d + description: >- + The integration framework itself: routing engine, EIPs, and the + component model. + url: /camel-core/ + - name: Camel Spring Boot + icon: spring-boot + description: >- + Camel on Spring Boot with auto-configured starters for 390+ components. + url: /camel-spring-boot/latest/ + - name: Camel Quarkus + icon: quarkus + description: >- + Cloud-native Camel packaged as Quarkus extensions with native-image + support. + url: /camel-quarkus/latest/ + - name: Camel CLI + icon: cli + description: >- + Terminal tooling for dev, test, trace, and AI. Get started in seconds. + url: /manual/camel-jbang.html + cta: + label: "Explore all Camel projects →" + url: /projects/ + +closing: + heading: Camel is your project + body: >- + An Apache Software Foundation project under the Apache v2 license. A + complete open community, always listening to proposals, comments, and + contributions. + primary_cta: + label: Be involved + url: /community/ + secondary_cta: + label: How to contribute + url: /community/contributing/ diff --git a/layouts/index.html b/layouts/index.html index fc1a1344f86..718232fb42e 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,48 +1,30 @@ {{ partial "header.html" . }} +{{- $home := .Site.Data.home }} -
-
-

Apache Camel

-

- Camel is an Open Source integration framework that empowers you - to quickly and easily integrate various systems consuming or producing data. -

-

- Get Started What is Camel? -

-
- Computer with gears depicting data processing -
+
-
-

What's New?

-
+ {{- with $home.hero }} +
+
+

{{ .eyebrow }}

+

{{ .title }}

+

{{ .tagline }}

+

{{ .lead }}

+

+ {{ .primary_cta.label }} + {{ .secondary_cta.label }} +

+
+ $ {{ .command }} + +
+
+
+ Apache Camel +
+
+ {{- end }} -
-
    - {{with .Site.GetPage "section" "blog"}} - {{range .Pages | first 3}} - -
  • - -
    -

    {{ .Title }}

    -

    {{ .Params.preview }}... Read More

    -
    -
  • - {{end}} - {{end}} -
-
- -{{ .Content }} +
{{ partial "footer.html" . }} From 65bc1c587785f4cc0cb02e5950efb37ab2bb0e85 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 14:03:24 -0400 Subject: [PATCH 080/209] feat(home): add the stat strip Ships the four figures verified against apache/camel on 2026-09-04 rather than the design reference's illustrative numbers, which overstated commits (100k+ against 83,428) and contributors (1,600+ against 1,583) and understated components (311 against 398). Stat labels take --color-ink-soft. The design's #7a7164 reaches only 4.16:1 on paper-2 at 12px. --- ...ite-cc3962afb3.css => site-ea722592e3.css} | 2 +- .../public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- .../public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 55 +++++++++++++++++++ layouts/index.html | 16 ++++++ 7 files changed, 76 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/css/{site-cc3962afb3.css => site-ea722592e3.css} (77%) diff --git a/antora-ui-camel/public/_/css/site-cc3962afb3.css b/antora-ui-camel/public/_/css/site-ea722592e3.css similarity index 77% rename from antora-ui-camel/public/_/css/site-cc3962afb3.css rename to antora-ui-camel/public/_/css/site-ea722592e3.css index fde804d557b..7a170d26a16 100644 --- a/antora-ui-camel/public/_/css/site-cc3962afb3.css +++ b/antora-ui-camel/public/_/css/site-ea722592e3.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 0c5164104a5..e6be3a52e25 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-cc3962afb3.css", + "css/site.css": "css/site-ea722592e3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 8ca4ce71944..bae60bf140b 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-cc3962afb3.css", + "css/site.css": "css/site-ea722592e3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 80888e8115c..0af5696c79a 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 0c5164104a5..e6be3a52e25 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-cc3962afb3.css", + "css/site.css": "css/site-ea722592e3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index 4787193767d..3c480e02a3f 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -238,3 +238,58 @@ a.button.on-dark:hover { .home-cli-copy:hover { background: #3a342c; } + +/* Stat strip */ + +.home-stats { + background: var(--color-paper-2); + border-bottom: 1px solid var(--color-line); + border-top: 1px solid var(--color-line); +} + +.home-stats-inner { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: calc(12 / var(--rem-base) * 1rem) calc(48 / var(--rem-base) * 1rem); + margin: 0 auto; + max-width: var(--frontpage-max-width); + padding: calc(30 / var(--rem-base) * 1rem) var(--page-padding-x); +} + +.home-stats-label { + color: var(--color-ink-2); + font-family: var(--display-font-family); + font-size: calc(15 / var(--rem-base) * 1rem); + font-weight: 700; + margin: 0; + margin-right: auto; +} + +.home-stats-list { + display: flex; + gap: calc(44 / var(--rem-base) * 1rem); + list-style: none; + margin: 0; + padding: 0; +} + +.home-stat-num { + color: var(--color-orange-deep); + display: block; + font-family: var(--display-font-family); + font-size: calc(26 / var(--rem-base) * 1rem); + font-weight: 800; + letter-spacing: -0.02em; + line-height: 1; +} + +.home-stat-label { + color: var(--color-ink-soft); + display: block; + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.06em; + margin-top: calc(5 / var(--rem-base) * 1rem); + text-transform: uppercase; +} diff --git a/layouts/index.html b/layouts/index.html index 718232fb42e..26c2716b66c 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -25,6 +25,22 @@

{{ .title }}

{{- end }} + {{- with $home.stats }} +
+
+

{{ .label }}

+
    + {{- range .items }} +
  • + {{ .num }} + {{ .label }} +
  • + {{- end }} +
+
+
+ {{- end }} + {{ partial "footer.html" . }} From 3ea2984ae428f63ca6108e989ca45ae36f38cd5a Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 14:11:43 -0400 Subject: [PATCH 081/209] fix(home): clear .footer-tools on .home, not the stat strip footer.css pulls .footer-tools up 2rem (36px at --rem-base: 18) into whatever ends
. The stat strip's own bottom padding is only 30px, so the utility line ("Edit this Page / Back to top") painted onto the strip's --color-paper-2 band instead of the plain page background. Padding the stat strip itself would only move the problem: .home-stats is the last child of
only until later tasks append more sections, at which point the same overlap would land on whatever section is last, including the dark .home-closing band where it would be worse. Instead, give .home 48px of bottom padding, clearing the 36px pull with margin to spare regardless of which section ends the page. --- .../_/css/{site-ea722592e3.css => site-8e0321b39b.css} | 2 +- antora-ui-camel/public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- antora-ui-camel/public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 5 +++++ 6 files changed, 10 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/css/{site-ea722592e3.css => site-8e0321b39b.css} (71%) diff --git a/antora-ui-camel/public/_/css/site-ea722592e3.css b/antora-ui-camel/public/_/css/site-8e0321b39b.css similarity index 71% rename from antora-ui-camel/public/_/css/site-ea722592e3.css rename to antora-ui-camel/public/_/css/site-8e0321b39b.css index 7a170d26a16..172cea6d87d 100644 --- a/antora-ui-camel/public/_/css/site-ea722592e3.css +++ b/antora-ui-camel/public/_/css/site-8e0321b39b.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index e6be3a52e25..d2bd1b1e626 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-ea722592e3.css", + "css/site.css": "css/site-8e0321b39b.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index bae60bf140b..2c9ac23bc55 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-ea722592e3.css", + "css/site.css": "css/site-8e0321b39b.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 0af5696c79a..f5b69bf17a6 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index e6be3a52e25..d2bd1b1e626 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-ea722592e3.css", + "css/site.css": "css/site-8e0321b39b.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index 3c480e02a3f..c54ec29d204 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -42,6 +42,11 @@ a.button.on-dark:hover { .home { color: var(--color-ink-2); + /* footer.css pulls .footer-tools up 2rem (36px at --rem-base: 18) into + whatever ends
. Clear that here, on .home itself, so the utility + line always lands on plain page background regardless of which section + is last in the page (see footer.css:126-141). */ + padding-bottom: calc(48 / var(--rem-base) * 1rem); } .home a { From 1be2ac74368e09650c2f8f19c6223c7f38099058 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 14:19:20 -0400 Subject: [PATCH 082/209] feat(home): add the three get-started cards --- ...ite-8e0321b39b.css => site-5ae5e0b0d8.css} | 2 +- .../public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- .../public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 70 +++++++++++++++++++ layouts/index.html | 22 ++++++ 7 files changed, 97 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/css/{site-8e0321b39b.css => site-5ae5e0b0d8.css} (77%) diff --git a/antora-ui-camel/public/_/css/site-8e0321b39b.css b/antora-ui-camel/public/_/css/site-5ae5e0b0d8.css similarity index 77% rename from antora-ui-camel/public/_/css/site-8e0321b39b.css rename to antora-ui-camel/public/_/css/site-5ae5e0b0d8.css index 172cea6d87d..00e0de0ae8e 100644 --- a/antora-ui-camel/public/_/css/site-8e0321b39b.css +++ b/antora-ui-camel/public/_/css/site-5ae5e0b0d8.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#e97826;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index d2bd1b1e626..7fd9c80f1f7 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-8e0321b39b.css", + "css/site.css": "css/site-5ae5e0b0d8.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 2c9ac23bc55..27dd63f1b2c 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-8e0321b39b.css", + "css/site.css": "css/site-5ae5e0b0d8.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index f5b69bf17a6..1cd0d875bc6 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index d2bd1b1e626..7fd9c80f1f7 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-8e0321b39b.css", + "css/site.css": "css/site-5ae5e0b0d8.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index c54ec29d204..10d1fcf2cc6 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -298,3 +298,73 @@ a.button.on-dark:hover { margin-top: calc(5 / var(--rem-base) * 1rem); text-transform: uppercase; } + +/* Get started */ + +.home-grid--three { + gap: calc(22 / var(--rem-base) * 1rem); + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.home-started-card { + padding: calc(28 / var(--rem-base) * 1rem); +} + +.home-started-head { + align-items: center; + display: flex; + gap: calc(10 / var(--rem-base) * 1rem); +} + +.home-started-head h3 { + color: var(--color-ink); + font-family: var(--display-font-family); + font-size: calc(20 / var(--rem-base) * 1rem); + font-weight: 700; + margin: 0; +} + +.home-badge { + background: var(--color-camel-orange); + border-radius: calc(20 / var(--rem-base) * 1rem); + color: var(--color-white); + font-family: var(--monospace-font-family); + font-size: calc(10.5 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.04em; + padding: calc(3 / var(--rem-base) * 1rem) calc(8 / var(--rem-base) * 1rem); + text-transform: uppercase; + white-space: nowrap; +} + +.home-started-desc { + color: var(--color-ink-soft); + flex: 1; + font-size: calc(15 / var(--rem-base) * 1rem); + line-height: 1.55; + margin: calc(12 / var(--rem-base) * 1rem) 0 calc(20 / var(--rem-base) * 1rem); + text-wrap: pretty; +} + +.home-started-code { + background: var(--color-ink); + border-radius: calc(9 / var(--rem-base) * 1rem); + color: var(--syntax-text); + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); + line-height: 1.6; + margin: 0 0 calc(20 / var(--rem-base) * 1rem); + overflow-x: auto; + padding: calc(14 / var(--rem-base) * 1rem) calc(15 / var(--rem-base) * 1rem); +} + +.home-started-link { + align-self: flex-start; + color: var(--link-font-color); + font-size: calc(14.5 / var(--rem-base) * 1rem); + font-weight: 700; +} + +.home-started-link:hover { + color: var(--link_hover-font-color); +} diff --git a/layouts/index.html b/layouts/index.html index 26c2716b66c..8d5da2feb16 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -41,6 +41,28 @@

{{ .title }}

{{- end }} + {{- with $home.get_started }} +
+
+

{{ .eyebrow }}

+

{{ .heading }}

+
+
    + {{- range .items }} +
  • +
    +

    {{ .name }}

    + {{- with .badge }}{{ . }}{{ end }} +
    +

    {{ .description }}

    +
    {{ .code }}
    + Start with {{ .name }} → +
  • + {{- end }} +
+
+ {{- end }} +
{{ partial "footer.html" . }} From 609fc9f857bf6ebe7822c0bb458e7de17234f13f Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 14:27:49 -0400 Subject: [PATCH 083/209] fix(home): raise get-started badge contrast to 5.58:1 .home-badge used --color-white on --color-camel-orange at 10.5px, measuring 2.93:1 against the plan's 4.5:1 minimum for text below 18.66px. Swap the background to --color-orange-deep, the codebase's already-established accessible orange (used by --link-font-color, .home-stat-num, .home-eyebrow), which measures 5.58:1 with the same white text. Radius, padding, font, letter-spacing, and uppercase are unchanged. a.button.dark has the same white-on-camel-orange issue but predates this piece and is the site's primary CTA everywhere; left untouched, raised separately. --- .../public/_/css/{site-5ae5e0b0d8.css => site-a6de13407f.css} | 2 +- antora-ui-camel/public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- antora-ui-camel/public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename antora-ui-camel/public/_/css/{site-5ae5e0b0d8.css => site-a6de13407f.css} (99%) diff --git a/antora-ui-camel/public/_/css/site-5ae5e0b0d8.css b/antora-ui-camel/public/_/css/site-a6de13407f.css similarity index 99% rename from antora-ui-camel/public/_/css/site-5ae5e0b0d8.css rename to antora-ui-camel/public/_/css/site-a6de13407f.css index 00e0de0ae8e..22de9400a3f 100644 --- a/antora-ui-camel/public/_/css/site-5ae5e0b0d8.css +++ b/antora-ui-camel/public/_/css/site-a6de13407f.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#e97826;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 7fd9c80f1f7..2fc3b3342b9 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-5ae5e0b0d8.css", + "css/site.css": "css/site-a6de13407f.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 27dd63f1b2c..831f45986a0 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-5ae5e0b0d8.css", + "css/site.css": "css/site-a6de13407f.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 1cd0d875bc6..e62a514835b 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 7fd9c80f1f7..2fc3b3342b9 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-5ae5e0b0d8.css", + "css/site.css": "css/site-a6de13407f.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index 10d1fcf2cc6..941e456e468 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -325,7 +325,7 @@ a.button.on-dark:hover { } .home-badge { - background: var(--color-camel-orange); + background: var(--color-orange-deep); border-radius: calc(20 / var(--rem-base) * 1rem); color: var(--color-white); font-family: var(--monospace-font-family); From 4b4db6bcfcd1cc7e616759096f6949e3e61ff588 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 14:32:15 -0400 Subject: [PATCH 084/209] feat(home): add the six feature cards The tag chip takes min-width plus padding rather than the design's fixed 38px square. The first tag is now '390+', four characters, which clips at Archivo 800 16px in a fixed 38px box. --- ...ite-a6de13407f.css => site-6428393c55.css} | 2 +- .../public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- .../public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 43 +++++++++++++++++++ layouts/index.html | 18 ++++++++ 7 files changed, 66 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/css/{site-a6de13407f.css => site-6428393c55.css} (78%) diff --git a/antora-ui-camel/public/_/css/site-a6de13407f.css b/antora-ui-camel/public/_/css/site-6428393c55.css similarity index 78% rename from antora-ui-camel/public/_/css/site-a6de13407f.css rename to antora-ui-camel/public/_/css/site-6428393c55.css index 22de9400a3f..483d2832646 100644 --- a/antora-ui-camel/public/_/css/site-a6de13407f.css +++ b/antora-ui-camel/public/_/css/site-6428393c55.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 2fc3b3342b9..0e3ee609db7 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-a6de13407f.css", + "css/site.css": "css/site-6428393c55.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 831f45986a0..e4ec54a9dff 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-a6de13407f.css", + "css/site.css": "css/site-6428393c55.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index e62a514835b..390baa78e90 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 2fc3b3342b9..0e3ee609db7 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-a6de13407f.css", + "css/site.css": "css/site-6428393c55.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index 941e456e468..ea38ec60276 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -368,3 +368,46 @@ a.button.on-dark:hover { .home-started-link:hover { color: var(--link_hover-font-color); } + +/* Features */ + +.home-grid--features { + gap: calc(20 / var(--rem-base) * 1rem); + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.home-feature { + padding: calc(26 / var(--rem-base) * 1rem); +} + +.home-feature-tag { + align-items: center; + align-self: flex-start; + background: var(--color-orange-tint); + border-radius: calc(9 / var(--rem-base) * 1rem); + color: var(--color-orange-deep); + display: inline-flex; + font-family: var(--display-font-family); + font-size: calc(16 / var(--rem-base) * 1rem); + font-weight: 800; + height: calc(38 / var(--rem-base) * 1rem); + justify-content: center; + min-width: calc(38 / var(--rem-base) * 1rem); + padding: 0 calc(7 / var(--rem-base) * 1rem); +} + +.home-feature h3 { + color: var(--color-ink); + font-family: var(--display-font-family); + font-size: calc(18 / var(--rem-base) * 1rem); + font-weight: 700; + margin: calc(16 / var(--rem-base) * 1rem) 0 0; +} + +.home-feature p { + color: var(--color-ink-soft); + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.55; + margin: calc(9 / var(--rem-base) * 1rem) 0 0; + text-wrap: pretty; +} diff --git a/layouts/index.html b/layouts/index.html index 8d5da2feb16..95af49146e0 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -63,6 +63,24 @@

{{ .name }}

{{- end }} + {{- with $home.features }} +
+
+

{{ .eyebrow }}

+

{{ .heading }}

+
+
    + {{- range .items }} +
  • + {{ .tag }} +

    {{ .title }}

    +

    {{ .body }}

    +
  • + {{- end }} +
+
+ {{- end }} +
{{ partial "footer.html" . }} From 4ad48e9f720e92187b93f3efeeb9c448f18390dd Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 14:41:42 -0400 Subject: [PATCH 085/209] feat(home): add the DSL code example Markup and styling only. The tabs are inert until the next task adds the JS; the YAML panel is visible and the other two carry the hidden attribute, which is also the no-JS end state. --- ...ite-6428393c55.css => site-2a3faed06a.css} | 2 +- .../public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- .../public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 79 +++++++++++++++++++ layouts/index.html | 31 ++++++++ 7 files changed, 115 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/css/{site-6428393c55.css => site-2a3faed06a.css} (77%) diff --git a/antora-ui-camel/public/_/css/site-6428393c55.css b/antora-ui-camel/public/_/css/site-2a3faed06a.css similarity index 77% rename from antora-ui-camel/public/_/css/site-6428393c55.css rename to antora-ui-camel/public/_/css/site-2a3faed06a.css index 483d2832646..e2dbe480e42 100644 --- a/antora-ui-camel/public/_/css/site-6428393c55.css +++ b/antora-ui-camel/public/_/css/site-2a3faed06a.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 0e3ee609db7..d4f80d7794e 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-6428393c55.css", + "css/site.css": "css/site-2a3faed06a.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index e4ec54a9dff..3c7e140e750 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-6428393c55.css", + "css/site.css": "css/site-2a3faed06a.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 390baa78e90..f12ec8e6b4b 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 0e3ee609db7..d4f80d7794e 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-6428393c55.css", + "css/site.css": "css/site-2a3faed06a.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index ea38ec60276..70f2a15dc4e 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -411,3 +411,82 @@ a.button.on-dark:hover { margin: calc(9 / var(--rem-base) * 1rem) 0 0; text-wrap: pretty; } + +/* Code example */ + +.home-example { + background: var(--color-ink); + border: 1px solid var(--color-dark-line); + border-radius: calc(14 / var(--rem-base) * 1rem); + box-shadow: 0 24px 60px -30px rgb(33 28 23 / 50%); + margin: 0 auto; + max-width: calc(820 / var(--rem-base) * 1rem); + overflow: hidden; +} + +.home-tablist { + border-bottom: 1px solid var(--color-dark-line); + display: flex; + gap: calc(2 / var(--rem-base) * 1rem); + padding: calc(12 / var(--rem-base) * 1rem) calc(14 / var(--rem-base) * 1rem) 0; +} + +.home-tab { + background: none; + border: 0; + color: var(--code-tab-idle-font-color); + cursor: pointer; + font-family: var(--monospace-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + font-weight: 600; + padding: calc(9 / var(--rem-base) * 1rem) calc(16 / var(--rem-base) * 1rem) + calc(13 / var(--rem-base) * 1rem); + position: relative; +} + +.home-tab[aria-selected='true'] { + color: var(--syntax-text); +} + +.home-tab[aria-selected='true']::after { + background: var(--color-camel-orange); + bottom: -1px; + content: ''; + height: 2px; + left: calc(12 / var(--rem-base) * 1rem); + position: absolute; + right: calc(12 / var(--rem-base) * 1rem); +} + +.home-tabpanel pre { + color: var(--syntax-text); + font-family: var(--monospace-font-family); + font-size: calc(13.5 / var(--rem-base) * 1rem); + line-height: 1.7; + margin: 0; + min-height: calc(200 / var(--rem-base) * 1rem); + overflow-x: auto; + padding: calc(22 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem); +} + +.home-example-run { + align-items: center; + background: var(--color-dark-3); + border-top: 1px solid var(--color-dark-line); + display: flex; + gap: calc(10 / var(--rem-base) * 1rem); + margin: 0; + padding: calc(14 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem); +} + +.home-example-prompt { + color: var(--color-prompt); + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); +} + +.home-example-command { + color: var(--color-on-dark-dim); + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); +} diff --git a/layouts/index.html b/layouts/index.html index 95af49146e0..4e0058b7b98 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -81,6 +81,37 @@

{{ .title }}

{{- end }} + {{- with $home.example }} +
+
+

{{ .eyebrow }}

+

{{ .heading }}

+

{{ .subhead }}

+
+
+
+ {{- range $i, $tab := .tabs }} + + {{- end }} +
+ {{- range $i, $tab := .tabs }} +
{{ $tab.code }}
+ {{- end }} +

+ $ + {{ .run_command }} +

+
+
+ {{- end }} +
{{ partial "footer.html" . }} From ada8580c8cd9de09bc674fcabed89db6a9b996da Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 14:50:18 -0400 Subject: [PATCH 086/209] feat(home): drive the DSL tabs and the hero copy button A new module rather than an extension of 06-copy-to-clipboard.js, which is hard-scoped to Antora listing blocks and rewrites their DOM. Both halves no-op when their elements are absent, since the bundle loads on every page. The copy button removes itself when navigator.clipboard is unavailable rather than presenting a control that does nothing. Also adds tabindex="0" to each .home-tabpanel div in layouts/index.html so the scrollable code panels are reachable by keyboard, per the WAI-ARIA tabs pattern. --- .../public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- ...{site-319f1b41a2.js => site-48ffd3a465.js} | 8 ++- .../public/_/partials/footer-scripts.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/js/09-home.js | 58 +++++++++++++++++++ layouts/index.html | 1 + 7 files changed, 70 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/js/{site-319f1b41a2.js => site-48ffd3a465.js} (91%) create mode 100644 antora-ui-camel/src/js/09-home.js diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index d4f80d7794e..c9982153cbc 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -44,7 +44,7 @@ "img/team.svg": "img/team-899f1050c2.svg", "img/tooling.svg": "img/tooling-f5e235c238.svg", "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg", - "js/site.js": "js/site-319f1b41a2.js", + "js/site.js": "js/site-48ffd3a465.js", "js/vendor/algoliasearch.js": "js/vendor/algoliasearch-6711ef4b37.js", "js/vendor/highlight.js": "js/vendor/highlight-de2def4bea.js", "js/vendor/svg4everybody.js": "js/vendor/svg4everybody-a0c573f2b9.js", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 3c7e140e750..79b15e7f06a 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -46,7 +46,7 @@ const manifest = { "img/team.svg": "img/team-899f1050c2.svg", "img/tooling.svg": "img/tooling-f5e235c238.svg", "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg", - "js/site.js": "js/site-319f1b41a2.js", + "js/site.js": "js/site-48ffd3a465.js", "js/vendor/algoliasearch.js": "js/vendor/algoliasearch-6711ef4b37.js", "js/vendor/highlight.js": "js/vendor/highlight-de2def4bea.js", "js/vendor/svg4everybody.js": "js/vendor/svg4everybody-a0c573f2b9.js", diff --git a/antora-ui-camel/public/_/js/site-319f1b41a2.js b/antora-ui-camel/public/_/js/site-48ffd3a465.js similarity index 91% rename from antora-ui-camel/public/_/js/site-319f1b41a2.js rename to antora-ui-camel/public/_/js/site-48ffd3a465.js index 5848399e61a..979b27a824e 100644 --- a/antora-ui-camel/public/_/js/site-319f1b41a2.js +++ b/antora-ui-camel/public/_/js/site-48ffd3a465.js @@ -11,5 +11,11 @@ document.addEventListener("DOMContentLoaded",(function(){var e=function(e){retur |||||||| parent of 27f17e7a (chore: regen antora-ui bundle for the docs UI redesign):antora-ui-camel/public/_/js/site-8f57dbea6b.js document.addEventListener("DOMContentLoaded",(function(){var e=function(e){return".*"+e+".*"},n=document.querySelector(".nav-panel-menu input.search");if(n){var t=document.querySelectorAll(".nav-link");n.addEventListener("keyup",(function(){for(var r=n.value.split(""),i=new RegExp(r.map(e).join(""),"i"),a=0;a"+o[u]+"",l=++u;u>>>>>>> 27f17e7a (chore: regen antora-ui bundle for the docs UI redesign):antora-ui-camel/public/_/js/site-319f1b41a2.js + +||||||| original + +======= +!function(){"use strict";var e=document.querySelector(".home-tablist");if(e){var t=[].slice.call(e.querySelectorAll(".home-tab")),n=function(e,n){t.forEach((function(t){var n=t===e;t.setAttribute("aria-selected",n?"true":"false"),t.setAttribute("tabindex",n?"0":"-1");var o=document.getElementById(t.getAttribute("aria-controls"));o&&(o.hidden=!n)})),n&&e.focus()};t.forEach((function(e,o){e.addEventListener("click",(function(){n(e,!1)})),e.addEventListener("keydown",(function(e){var i;"ArrowRight"===e.key?i=t[(o+1)%t.length]:"ArrowLeft"===e.key?i=t[(o-1+t.length)%t.length]:"Home"===e.key?i=t[0]:"End"===e.key&&(i=t[t.length-1]),i&&(e.preventDefault(),n(i,!0))}))}))}var o=document.querySelector(".home-cli-copy");if(o)if(window.navigator&&window.navigator.clipboard){var i,r=o.textContent;o.addEventListener("click",(function(){window.navigator.clipboard.writeText(o.dataset.command).then((function(){o.textContent="Copied!",clearTimeout(i),i=setTimeout((function(){o.textContent=r}),1600)}))}))}else o.remove()}(); +>>>>>>> theirs \ No newline at end of file diff --git a/antora-ui-camel/public/_/partials/footer-scripts.hbs b/antora-ui-camel/public/_/partials/footer-scripts.hbs index cc1972c1b55..141e42e00f7 100644 --- a/antora-ui-camel/public/_/partials/footer-scripts.hbs +++ b/antora-ui-camel/public/_/partials/footer-scripts.hbs @@ -1,5 +1,5 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index d4f80d7794e..c9982153cbc 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -44,7 +44,7 @@ "img/team.svg": "img/team-899f1050c2.svg", "img/tooling.svg": "img/tooling-f5e235c238.svg", "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg", - "js/site.js": "js/site-319f1b41a2.js", + "js/site.js": "js/site-48ffd3a465.js", "js/vendor/algoliasearch.js": "js/vendor/algoliasearch-6711ef4b37.js", "js/vendor/highlight.js": "js/vendor/highlight-de2def4bea.js", "js/vendor/svg4everybody.js": "js/vendor/svg4everybody-a0c573f2b9.js", diff --git a/antora-ui-camel/src/js/09-home.js b/antora-ui-camel/src/js/09-home.js new file mode 100644 index 00000000000..b80aeb4ba68 --- /dev/null +++ b/antora-ui-camel/src/js/09-home.js @@ -0,0 +1,58 @@ +;(function () { + 'use strict' + + var COPIED_MS = 1600 + + // DSL tabs on the home page code example. + var tablist = document.querySelector('.home-tablist') + if (tablist) { + var tabs = [].slice.call(tablist.querySelectorAll('.home-tab')) + + var select = function (tab, focus) { + tabs.forEach(function (candidate) { + var selected = candidate === tab + candidate.setAttribute('aria-selected', selected ? 'true' : 'false') + candidate.setAttribute('tabindex', selected ? '0' : '-1') + var panel = document.getElementById(candidate.getAttribute('aria-controls')) + if (panel) panel.hidden = !selected + }) + if (focus) tab.focus() + } + + tabs.forEach(function (tab, index) { + tab.addEventListener('click', function () { + select(tab, false) + }) + tab.addEventListener('keydown', function (event) { + var next + if (event.key === 'ArrowRight') next = tabs[(index + 1) % tabs.length] + else if (event.key === 'ArrowLeft') next = tabs[(index - 1 + tabs.length) % tabs.length] + else if (event.key === 'Home') next = tabs[0] + else if (event.key === 'End') next = tabs[tabs.length - 1] + if (!next) return + event.preventDefault() + select(next, true) + }) + }) + } + + // Copy button on the hero CLI bar. + var copy = document.querySelector('.home-cli-copy') + if (copy) { + if (!(window.navigator && window.navigator.clipboard)) { + copy.remove() + } else { + var idle = copy.textContent + var timer + copy.addEventListener('click', function () { + window.navigator.clipboard.writeText(copy.dataset.command).then(function () { + copy.textContent = 'Copied!' + clearTimeout(timer) + timer = setTimeout(function () { + copy.textContent = idle + }, COPIED_MS) + }) + }) + } + } +})() diff --git a/layouts/index.html b/layouts/index.html index 4e0058b7b98..42e0af33b33 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -102,6 +102,7 @@

{{ .heading }}

{{ $tab.code }}
{{- end }}

From 117b43f7cabbca37e5bd691da9e9d394082f286a Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 14:54:58 -0400 Subject: [PATCH 087/209] test(hugo): add a click step to the measurement harness Task 8's original verification could only read state at initial load, so it never actually proved that clicking a DSL tab switches the panel; reading listeners out of the compiled bundle proves the code shipped, not that it works. The measure harness now accepts an optional third hash segment naming an element to click inside the iframe before the queries are evaluated. A missing click target prints a clear "NOT FOUND (click target)" line instead of silently falling back to measuring the unclicked state, which would manufacture a false pass. Existing two-argument --measure calls are unaffected: the third segment defaults to empty, which the click-selector check treats as absent. --- tests/hugo/_measure.html | 17 +++++++++++++++-- tests/hugo/build.sh | 5 ++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/tests/hugo/_measure.html b/tests/hugo/_measure.html index fed5027b5bb..40254757114 100644 --- a/tests/hugo/_measure.html +++ b/tests/hugo/_measure.html @@ -12,15 +12,28 @@

pending
diff --git a/tests/hugo/build.sh b/tests/hugo/build.sh index 48cee887a09..4031020c6b3 100755 --- a/tests/hugo/build.sh +++ b/tests/hugo/build.sh @@ -11,6 +11,8 @@ # tests/hugo/build.sh build only # tests/hugo/build.sh --shots / projects/ build, then screenshot each path # tests/hugo/build.sh --measure / 'sel@color' build, then print computed styles +# tests/hugo/build.sh --measure / 'sel@color' 'sel-to-click' +# ...after clicking an element first # # Env: HUGO_OUT, HUGO_PORT (default 8899), SHOT_WIDTHS, SHOT_HEIGHT (default 2400) set -euo pipefail @@ -118,10 +120,11 @@ case "${1:-}" in shift path="${1:-/}" query="${2:-}" + click="${3:-}" cp tests/hugo/_measure.html "$SITE/_measure.html" start_server "$CHROME" --headless --disable-gpu --virtual-time-budget=5000 --dump-dom \ - "http://localhost:$PORT/_measure.html#$(printf '%s|%s' "$path" "$query")" \ + "http://localhost:$PORT/_measure.html#$(printf '%s|%s|%s' "$path" "$query" "$click")" \ 2>/dev/null | sed -n '/
/,/<\/pre>/p' | sed 's/<[^>]*>//g'
     ;;
 esac

From e5b29863b662d40bc1d39634df252369fe5452bc Mon Sep 17 00:00:00 2001
From: Adriano Machado <60320+ammachado@users.noreply.github.com>
Date: Fri, 4 Sep 2026 15:03:43 -0400
Subject: [PATCH 088/209] feat(home): add the four core project tiles

---
 ...ite-2a3faed06a.css => site-2740b5d9a5.css} |  2 +-
 .../public/_/data/rev-manifest.json           |  2 +-
 antora-ui-camel/public/_/helpers/asset.js     |  2 +-
 .../public/_/partials/head-styles.hbs         |  2 +-
 antora-ui-camel/public/_/rev-manifest         |  2 +-
 antora-ui-camel/src/css/frontpage.css         | 51 +++++++++++++++++++
 layouts/index.html                            | 24 +++++++++
 7 files changed, 80 insertions(+), 5 deletions(-)
 rename antora-ui-camel/public/_/css/{site-2a3faed06a.css => site-2740b5d9a5.css} (78%)

diff --git a/antora-ui-camel/public/_/css/site-2a3faed06a.css b/antora-ui-camel/public/_/css/site-2740b5d9a5.css
similarity index 78%
rename from antora-ui-camel/public/_/css/site-2a3faed06a.css
rename to antora-ui-camel/public/_/css/site-2740b5d9a5.css
index e2dbe480e42..3d79fa5eed7 100644
--- a/antora-ui-camel/public/_/css/site-2a3faed06a.css
+++ b/antora-ui-camel/public/_/css/site-2740b5d9a5.css
@@ -18,5 +18,5 @@
     identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace),
     .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a
     color). .go, generic command output, is content the reader needs rather
-    than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}
+    than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}
 /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0}
\ No newline at end of file
diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json
index c9982153cbc..7675fb91f03 100644
--- a/antora-ui-camel/public/_/data/rev-manifest.json
+++ b/antora-ui-camel/public/_/data/rev-manifest.json
@@ -1,5 +1,5 @@
 {
-  "css/site.css": "css/site-2a3faed06a.css",
+  "css/site.css": "css/site-2740b5d9a5.css",
   "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
   "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
   "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js
index 79b15e7f06a..fb9d62e09c6 100644
--- a/antora-ui-camel/public/_/helpers/asset.js
+++ b/antora-ui-camel/public/_/helpers/asset.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const manifest = {
-  "css/site.css": "css/site-2a3faed06a.css",
+  "css/site.css": "css/site-2740b5d9a5.css",
   "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
   "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
   "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs
index f12ec8e6b4b..2b813745151 100644
--- a/antora-ui-camel/public/_/partials/head-styles.hbs
+++ b/antora-ui-camel/public/_/partials/head-styles.hbs
@@ -1 +1 @@
-    
+    
diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest
index c9982153cbc..7675fb91f03 100644
--- a/antora-ui-camel/public/_/rev-manifest
+++ b/antora-ui-camel/public/_/rev-manifest
@@ -1,5 +1,5 @@
 {
-  "css/site.css": "css/site-2a3faed06a.css",
+  "css/site.css": "css/site-2740b5d9a5.css",
   "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
   "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
   "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css
index 70f2a15dc4e..664353ba9cb 100644
--- a/antora-ui-camel/src/css/frontpage.css
+++ b/antora-ui-camel/src/css/frontpage.css
@@ -490,3 +490,54 @@ a.button.on-dark:hover {
   font-family: var(--monospace-font-family);
   font-size: calc(12.5 / var(--rem-base) * 1rem);
 }
+
+/* Project tiles */
+
+.home-grid--four {
+  gap: calc(18 / var(--rem-base) * 1rem);
+  grid-template-columns: repeat(4, minmax(0, 1fr));
+}
+
+.home-tile {
+  padding: calc(24 / var(--rem-base) * 1rem);
+}
+
+.home-tile-icon {
+  display: block;
+  height: calc(34 / var(--rem-base) * 1rem);
+  object-fit: contain;
+  width: calc(34 / var(--rem-base) * 1rem);
+}
+
+.home-tile h3 {
+  color: var(--color-ink);
+  font-family: var(--display-font-family);
+  font-size: calc(17 / var(--rem-base) * 1rem);
+  font-weight: 700;
+  margin: calc(16 / var(--rem-base) * 1rem) 0 0;
+}
+
+.home-tile p {
+  color: var(--color-ink-soft);
+  flex: 1;
+  font-size: calc(14 / var(--rem-base) * 1rem);
+  line-height: 1.5;
+  margin: calc(8 / var(--rem-base) * 1rem) 0 calc(16 / var(--rem-base) * 1rem);
+  text-wrap: pretty;
+}
+
+.home-tile-link {
+  align-self: flex-start;
+  color: var(--link-font-color);
+  font-size: calc(13.5 / var(--rem-base) * 1rem);
+  font-weight: 700;
+}
+
+.home-tile-link:hover {
+  color: var(--link_hover-font-color);
+}
+
+.home-tiles-cta {
+  margin: calc(34 / var(--rem-base) * 1rem) 0 0;
+  text-align: center;
+}
diff --git a/layouts/index.html b/layouts/index.html
index 42e0af33b33..583d896d25c 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -113,6 +113,30 @@ 

{{ .heading }}

{{- end }} + {{- with $home.tiles }} +
+
+

{{ .eyebrow }}

+

{{ .heading }}

+

{{ .subhead }}

+
+
    + {{- range .items }} +
  • + +

    {{ .name }}

    +

    {{ .description }}

    + Read more → +
  • + {{- end }} +
+

+ {{ .cta.label }} +

+
+ {{- end }} + {{ partial "footer.html" . }} From 91fb4945a759dbc66a37935844f42bf81640214c Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:10:04 -0400 Subject: [PATCH 089/209] fix(home): give each project tile link a distinct accessible name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The four tile links all rendered "Read more" with no way for screen-reader users navigating by link list to tell them apart. Add aria-label="Read more about {name}" to each anchor so the accessible name is unique per tile while the visible text stays "Read more →" unchanged. The accessible name still starts with the visible label, satisfying WCAG Label in Name. --- layouts/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/index.html b/layouts/index.html index 583d896d25c..1c32b910679 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -127,7 +127,7 @@

{{ .heading }}

src="{{ path.Join "_" (index site.Data "rev-manifest" (printf "img/%s.svg" .icon)) | relURL }}">

{{ .name }}

{{ .description }}

- Read more → + Read more → {{- end }} From 64ffb07077d0616df7cd086d58191a2f37d14484 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:15:33 -0400 Subject: [PATCH 090/209] feat(home): add the closing community band --- ...ite-2740b5d9a5.css => site-fe13253002.css} | 2 +- .../public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- .../public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 50 +++++++++++++++++++ layouts/index.html | 15 ++++++ 7 files changed, 70 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/css/{site-2740b5d9a5.css => site-fe13253002.css} (78%) diff --git a/antora-ui-camel/public/_/css/site-2740b5d9a5.css b/antora-ui-camel/public/_/css/site-fe13253002.css similarity index 78% rename from antora-ui-camel/public/_/css/site-2740b5d9a5.css rename to antora-ui-camel/public/_/css/site-fe13253002.css index 3d79fa5eed7..488670a35fa 100644 --- a/antora-ui-camel/public/_/css/site-2740b5d9a5.css +++ b/antora-ui-camel/public/_/css/site-fe13253002.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 7675fb91f03..1ac501be347 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-2740b5d9a5.css", + "css/site.css": "css/site-fe13253002.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index fb9d62e09c6..50ba5d703dd 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-2740b5d9a5.css", + "css/site.css": "css/site-fe13253002.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 2b813745151..e8d3708a398 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 7675fb91f03..1ac501be347 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-2740b5d9a5.css", + "css/site.css": "css/site-fe13253002.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index 664353ba9cb..d6bb33ee82d 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -541,3 +541,53 @@ a.button.on-dark:hover { margin: calc(34 / var(--rem-base) * 1rem) 0 0; text-align: center; } + +/* Closing band */ + +.home-closing { + margin: calc(72 / var(--rem-base) * 1rem) auto 0; + max-width: var(--frontpage-max-width); + padding: 0 var(--page-padding-x); +} + +.home-closing-inner { + align-items: center; + background: var(--color-ink); + border-radius: calc(18 / var(--rem-base) * 1rem); + display: flex; + flex-wrap: wrap; + gap: calc(24 / var(--rem-base) * 1rem); + padding: calc(52 / var(--rem-base) * 1rem) calc(48 / var(--rem-base) * 1rem); +} + +.home-closing-copy { + flex: 1; + min-width: calc(280 / var(--rem-base) * 1rem); +} + +.home-closing-copy h2 { + color: var(--color-on-dark); + font-family: var(--display-font-family); + font-size: calc(30 / var(--rem-base) * 1rem); + font-weight: 800; + letter-spacing: -0.02em; + margin: 0; +} + +.home-closing-copy p { + color: var(--color-on-dark-soft); + font-size: calc(16 / var(--rem-base) * 1rem); + line-height: 1.55; + margin: calc(12 / var(--rem-base) * 1rem) 0 0; + max-width: calc(560 / var(--rem-base) * 1rem); +} + +.home-closing-actions { + display: flex; + gap: calc(14 / var(--rem-base) * 1rem); + margin: 0; +} + +.home-closing-actions .button { + margin: 0; +} diff --git a/layouts/index.html b/layouts/index.html index 1c32b910679..d42c91338cb 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -137,6 +137,21 @@

{{ .name }}

{{- end }} + {{- with $home.closing }} +
+
+
+

{{ .heading }}

+

{{ .body }}

+
+

+ {{ .primary_cta.label }} + {{ .secondary_cta.label }} +

+
+
+ {{- end }} + {{ partial "footer.html" . }} From 77a9c275a764724fdc138262721a3fe5039098c9 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:23:17 -0400 Subject: [PATCH 091/209] style(header): restyle the search field and shorten the Docs label Search stays in the header on Hugo pages, which have no nav panel to host it; docs pages keep the nav-panel field piece 3 added. Property set is unchanged, values only. --- .../public/_/css/{site-fe13253002.css => site-6bdf790e37.css} | 2 +- antora-ui-camel/public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- antora-ui-camel/public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/header.css | 4 ++-- config.toml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) rename antora-ui-camel/public/_/css/{site-fe13253002.css => site-6bdf790e37.css} (91%) diff --git a/antora-ui-camel/public/_/css/site-fe13253002.css b/antora-ui-camel/public/_/css/site-6bdf790e37.css similarity index 91% rename from antora-ui-camel/public/_/css/site-fe13253002.css rename to antora-ui-camel/public/_/css/site-6bdf790e37.css index 488670a35fa..f33b9e1d401 100644 --- a/antora-ui-camel/public/_/css/site-fe13253002.css +++ b/antora-ui-camel/public/_/css/site-6bdf790e37.css @@ -1,4 +1,4 @@ -@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:300;src:local("Open Sans Light"),local("OpenSans-Light"),url(../font/open-sans-latin-ext-300.woff2) format("woff2"),url(../font/open-sans-latin-ext-300.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:300;src:local("Open Sans Light Italic"),local("OpenSans-LightItalic"),url(../font/open-sans-latin-ext-300-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-300-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:700;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(../font/open-sans-latin-ext-700.woff2) format("woff2"),url(../font/open-sans-latin-ext-700.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:700;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(../font/open-sans-latin-ext-700-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-700-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold"),local("OpenSans-ExtraBold"),url(../font/open-sans-latin-ext-800.woff2) format("woff2"),url(../font/open-sans-latin-ext-800.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold Italic"),local("OpenSans-ExtraBoldItalic"),url(../font/open-sans-latin-ext-800-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-800-italic.woff) format("woff")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:500;src:local("Archivo Medium"),local("Archivo-Medium"),url(../font/archivo-latin-500-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:600;src:local("Archivo SemiBold"),local("Archivo-SemiBold"),url(../font/archivo-latin-600-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:700;src:local("Archivo Bold"),local("Archivo-Bold"),url(../font/archivo-latin-700-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:800;src:local("Archivo ExtraBold"),local("Archivo-ExtraBold"),url(../font/archivo-latin-800-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:local("JetBrains Mono Regular"),local("JetBrainsMono-Regular"),url(../font/jetbrains-mono-latin-400-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:local("JetBrains Mono Medium"),local("JetBrainsMono-Medium"),url(../font/jetbrains-mono-latin-500-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:local("JetBrains Mono SemiBold"),local("JetBrainsMono-SemiBold"),url(../font/jetbrains-mono-latin-600-normal.woff2) format("woff2")}.fa{display:inline-block}.fa-lock::before{content:"🔒"}body,html{height:100%}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}::-moz-selection{background:#cf7428;color:#fff}::selection{background:#cf7428;color:#fff}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;-webkit-text-size-adjust:100%}@media screen and (width >= 1025px){html{font-size:1.125em}}body{background:#faf7f1;color:#3a332b;font-family:Open Sans,system-ui,sans-serif;line-height:1.15;margin:0}h1,h2,h3,h4,h5,h6{font-family:Archivo,sans-serif}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{color:#211c17;font-family:JetBrains Mono,ui-monospace,monospace;overflow-wrap:break-word}b,dt,strong,th{font-weight:700}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}mark{color:#e97826;font-weight:700;background:#fff}.text-center{text-align:center}.body{min-height:calc(100vh - 42.66667rem);word-wrap:break-word}@media screen and (width >= 1025px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:3.66667rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (width >= 769px){.nav-container{width:15.55556rem}}@media screen and (width >= 1025px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible;padding:0}@media screen and (width <= 1024px){.nav-category{margin-left:1rem}}.nav{background:#f4eee3;border-right:1px solid #e7e0d5;height:calc(100vh - 6.22222rem);position:relative;top:2.55556rem}@media screen and (width >= 769px){.nav{-webkit-box-shadow:none;box-shadow:none}}@media screen and (width >= 1025px){.nav{top:3.66667rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.66667rem)}}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}.nav-search{-webkit-box-flex:0;-ms-flex:none;flex:none;padding:.77778rem .88889rem;border-bottom:1px solid #e7e0d5;position:relative}.nav-search .navbar-search{padding:0}.nav-search input.search{width:100%;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;padding:.44444rem 1.88889rem .44444rem 1.77778rem;background:#fff no-repeat .61111rem/.72222rem url(../img/search-a73cfec790.svg);color:#211c17;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;outline:0}.nav-search input.search::-webkit-input-placeholder{color:#5c554c}.nav-search input.search::-moz-placeholder{color:#5c554c}.nav-search input.search:-ms-input-placeholder{color:#5c554c}.nav-search input.search::-ms-input-placeholder{color:#5c554c}.nav-search input.search::placeholder{color:#5c554c}.nav-search input.search:focus{border-color:#d9ccb8}.nav-search-hint{position:absolute;top:50%;right:1.5rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);padding:.05556rem .33333rem;border-radius:.22222rem;background:#f4eee3;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;pointer-events:none}.nav-search:focus-within .nav-search-hint{display:none}.nav-search #search-cancel{position:absolute;inset:50% 1.5rem auto auto;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none;height:.88889rem;cursor:pointer}.nav-search #search_results{position:absolute;top:100%;left:.88889rem;width:min(600px,90vw);max-width:none;min-width:0;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;background:#fff;z-index:5;max-height:80vh;overflow-y:auto;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);scrollbar-width:thin}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;padding-bottom:2.55556rem;position:relative}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;inset:0}.nav-item[data-depth="2"]>.nav-item-toggle{margin-left:-.675em}.nav-item .nav-list{margin-left:1rem}.nav-menu{min-height:0;width:100%;padding:.77778rem .88889rem 1.11111rem;line-height:1.35;position:relative;word-break:break-word;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.nav-menu::-webkit-scrollbar{width:.425em}.nav-menu::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb:active,.nav-menu::-webkit-scrollbar-thumb:hover{background:grey}@media screen and (width <= 1024px){.nav-menu::-webkit-scrollbar{width:0;background:transparent}}.nav-menu h3.title{color:#211c17;font-family:Archivo,sans-serif;font-size:.77778rem;font-weight:700;margin:0 0 .44444rem;padding:0}.nav-menu a{color:inherit}.nav-list{margin:0;padding:0}.nav-menu>.nav-list{margin-bottom:.5rem}.nav-item{list-style:none;margin-top:0}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.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-8823676a4b.svg) no-repeat 50%/.5rem;border:none;outline:none;line-height:inherit;position:absolute;height:1.33333rem;width:.88889rem;margin-left:-.88889rem}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.nav-menu .nav-text,.nav-menu a.nav-link{display:block;padding:.27778rem .44444rem;border-radius:.33333rem;color:#3a332b;font-size:.75rem;font-weight:400;line-height:1.4}.nav-menu .nav-text:hover,.nav-menu a.nav-link:hover{background:#e7e0d5;color:#211c17;text-decoration:none}.is-current-page>.nav-text,.is-current-page>a.nav-link{background:#fbead8;color:#a84e0d;font-weight:700}.nav-menu .is-current-page>.nav-text:hover,.nav-menu .is-current-page>a.nav-link:hover{background:#fbead8;color:#853c09}.breadcrumbs li .image>img,.nav-link .image>img{width:1em}.nav-panel-explore{background:#f4eee3;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;right:0;bottom:0;left:0;max-height:calc(50% + 2.55556rem)}.nav-panel-explore,.nav-panel-explore .context{display:-webkit-box;display:-ms-flexbox;display:flex}.nav-panel-explore .context{-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:2.55556rem;padding:0 .88889rem;border-top:1px solid #e7e0d5;-webkit-box-shadow:none;box-shadow:none;color:#5c554c;cursor:pointer;font-size:.72222rem;line-height:1}.nav-panel-explore .context .title{font-weight:600}.nav-panel-explore .context .noversion,.nav-panel-explore .context .version{display:block;padding:.16667rem 1.22222rem .16667rem .5rem;border:1px solid #e7e0d5;border-radius:.33333rem;background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.nav-panel-explore .components{line-height:1.6;-webkit-box-shadow:inset 0 1px 5px #f5f5f5;box-shadow:inset 0 1px 5px #f5f5f5;background:#f0f0f0;padding:.5rem .75rem 0;margin:0;overflow-y:auto;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:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:700}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;margin-top:-.25rem;line-height:1}.nav-panel-explore .component .version{display:block;margin:.375rem .375rem 0 0}.nav-panel-explore .component .title a{color:inherit;display:inherit}.nav-panel-explore .component .version a{border:1px solid #e7e0d5;border-radius:.25rem;color:inherit;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentcolor;opacity:.9;font-weight:700}@media screen and (width <= 1024px){aside.toc.sidebar{display:none}}@media screen and (width >= 1025px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}main.article>.content{display:grid;grid-template-columns:minmax(0,1fr);gap:3.11111rem;max-width:65.55556rem;padding:2.44444rem 2.22222rem 4.44444rem}main.article>.content:has(>aside.toc.sidebar){grid-template-columns:minmax(0,1fr) 12.22222rem}main.article>.content>.doc{margin:0;max-width:none;padding:0}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 12.22222rem;flex:0 0 12.22222rem;min-width:0}.toc.sidebar .toc-menu ul{scrollbar-width:thin}.toc.sidebar .toc-menu ul::-webkit-scrollbar{width:.425em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:active,.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:hover{background:grey}}@media screen and (width >= 1216px){aside.toc.sidebar{-ms-flex-preferred-size:12.22222rem;flex-basis:12.22222rem}}.toolbar{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:rgba(250,247,241,.92);backdrop-filter:blur(8px);border-bottom:1px solid #e7e0d5;color:#5c554c;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.75rem;gap:1rem;height:2.55556rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:0 2.22222rem;position:sticky;top:3.66667rem;z-index:2}.static.toolbar,.toolbar{-webkit-box-shadow:none;box-shadow:none}.static.toolbar{border-bottom:0;margin:0;max-width:100vw}@media screen and (width <= 1024px){.toolbar{top:3.66667rem;padding:0 .88889rem}}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu-8775cec4be.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;height:2.5rem;padding:0;width:2.5rem;margin-right:-.25rem}@media screen and (width >= 1025px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back-e8d811f74c.svg);background-size:41.5%}.edit-this-page{display:none;padding:0}@media screen and (width >= 1025px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#5c554c;font-weight:600}.toolbar .edit-this-page a:hover{color:#a84e0d}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;min-width:0;padding:0;line-height:1.35}@media screen and (width >= 1025px){.breadcrumbs{display:block}}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .44444rem}.breadcrumbs li:last-of-type::after{content:none}.toolbar .breadcrumbs a{color:#5c554c}.toolbar .breadcrumbs a:hover{color:#a84e0d}.toolbar .breadcrumbs li:last-of-type a{color:#211c17;font-weight:600;text-decoration:none}.page-versions{display:none;margin:0;position:relative;line-height:1}@media screen and (width >= 1025px){.page-versions{display:block}}.page-versions .version-menu-toggle{background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;color:#5c554c;cursor:pointer;outline:none;padding:.16667rem 1.22222rem .16667rem .5rem;position:relative;z-index:3}.page-versions .version-menu,.page-versions .version-menu-toggle{border:1px solid #e7e0d5;border-radius:.33333rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.page-versions .version-menu{background-color:#fff;padding:1.66667rem .5rem .44444rem;position:absolute;top:0;left:0;min-width:100%}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#333}.toc.sidebar .toc-menu{margin-right:0;position:sticky;top:7.22222rem}.toc .toc-menu h3{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;line-height:1.3;margin:0;padding-bottom:.55556rem;text-transform:uppercase}.toc.sidebar .toc-menu h3{display:block;height:auto}.toc .toc-menu ul{font-size:.75rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 9.72222rem);overflow-y:auto}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.33333rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}@media screen and (width <= 1024px){.toc .toc-menu ul li ul li ul li a{padding-left:1.33333rem}}.toc .toc-menu a{border-left:2px solid #e7e0d5;color:#5c554c;display:block;padding:.33333rem 0 .33333rem .66667rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:not(.is-active):hover{border-left-color:#d9ccb8;color:#211c17}.toc .toc-menu a.is-active{border-left-color:#e97826;color:#211c17;font-weight:600}.sidebar.toc .toc-menu a:focus{background:#f4eee3}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#3a332b;font-size:inherit;-ms-hyphens:auto;hyphens:auto;line-height:1.7;margin:0 auto;padding:0 1rem 4rem}@media screen and (width >= 1025px){.doc{font-size:.88889rem;margin:0 2rem;max-width:75.88889rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#211c17;font-weight:700;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page,.static>h1:first-child{font-size:2.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0}.doc>h1.page img{width:2rem}.doc .doc-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.doc>#preamble>.sectionbody>.paragraph:first-child>p,.doc>h1.page+.paragraph>p{font-size:.91667rem;line-height:1.7;margin:1.11111rem 0 0}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f4eee3;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){font-size:1.44444rem;letter-spacing:-.02em;margin:2.44444rem 0 0;overflow-wrap:break-word;padding:.44444rem 0 0}.doc h3:not(.discrete){font-weight:700;overflow-wrap:break-word}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor,.doc td .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em;background-image:none}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before,.doc td .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,.doc td:hover .anchor{visibility:visible}.doc p{margin:0}.doc .table-wrapper{background:#fff;border:1px solid #e7e0d5;border-radius:.55556rem;margin:.88889rem 0 0;overflow-x:auto}.doc .table-wrapper::-webkit-scrollbar{height:.425em}.doc .table-wrapper::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb:active,.doc .table-wrapper::-webkit-scrollbar-thumb:hover{background:grey}.doc .table-wrapper table{width:100%}.doc .tableblock p{font-size:inherit}.doc .tableblock td:not(:first-child)>p,.doc .tableblock thead,.doc :not(td)>.content,.doc :not(td)>p{-ms-hyphens:auto;hyphens:auto}.doc a{color:#a84e0d;word-break:break-word;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}.doc .camel-project .links a,.doc .sect2 h3 a,.doc .section .links a,.doc li a,.doc table a{background:none}.doc table.tableblock td a{word-break:normal}.doc table.tableblock tbody tr td:first-child{width:25%;overflow-wrap:anywhere;font-weight:700}.doc a:hover{color:#853c09}.doc a.unresolved{color:#d32f2f}.doc i.fa{font-style:normal}.doc p code,.doc thead code{background:#f4eee3;border-radius:.22222rem;color:#211c17;font-size:.80556rem;overflow-wrap:break-word;padding:.11111rem .33333rem}.doc pre{font-size:.75rem;line-height:1.7;margin:0}.doc blockquote{margin:0}.doc .right{float:right}.doc .left{float:left}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock{margin:1rem 0 0;word-break:break-word}.doc table.tableblock{border-collapse:collapse;font-size:.83333rem;margin:0}.doc table.stretch{width:100%}.doc table.tableblock thead th{background:#f4eee3;border-bottom:1px solid #e7e0d5;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;letter-spacing:.06em;padding:.61111rem .88889rem;text-align:left;text-transform:uppercase}.doc table.tableblock>:not(thead) th,.doc table.tableblock td{border-top:1px solid #f0e9dd;border-bottom:0;padding:.66667rem .88889rem}.doc table.tableblock tbody tr:first-child>td,.doc table.tableblock tbody tr:first-child>th{border-top:0}.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{background:#fff;border:1px solid #e7e0d5;border-left:.16667rem solid #e97826;border-radius:0 .66667rem .66667rem 0;-webkit-box-shadow:none;box-shadow:none;margin:1.55556rem 0 0;padding:.88889rem 1.11111rem}.doc .admonitionblock .table-wrapper,.doc .colist .table-wrapper{background:none;border:0;border-radius:0;margin:0;overflow:visible}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.80556rem;line-height:1.6}.doc .admonitionblock td.content>:first-child{margin:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock table{border-collapse:collapse;position:relative;table-layout:auto;width:100%}.doc .admonitionblock td.content{background:none;color:#5c554c;padding:0;width:auto}.doc .admonitionblock td.icon{padding:0 .77778rem 0 0;vertical-align:top;white-space:nowrap;width:1px}.doc .admonitionblock .icon i{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-style:normal;font-weight:600;height:auto;letter-spacing:.04em;line-height:1.4;padding:.16667rem .44444rem;text-transform:uppercase;vertical-align:top}.doc .admonitionblock .icon i::after{content:attr(title);-ms-hyphens:none;hyphens:none;-webkit-writing-mode:horizontal-tb;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.doc .admonitionblock.caution{border-left-color:#a0439c}.doc .admonitionblock.caution .icon i{background:#f7e9f6;color:#8e3b8a}.doc .admonitionblock.important{border-left-color:#d32f2f}.doc .admonitionblock.important .icon i{background:#fce9e9;color:#b02525}.doc .admonitionblock.warning{border-left-color:#e18114}.doc .admonitionblock.warning .icon i{background:#fdf0dc;color:#8a5209}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock img{display:block}.doc .image>img,.doc .imageblock img{height:auto;max-width:100%}.doc table.tableblock td .imageblock img{max-width:50px}#preamble .abstract blockquote{background:#f4eee3;border-left:5px solid #e7e0d5;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock{background:#f4eee3;border-left:5px solid #5d5d5d;color:#5d5d5d;padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#5c554c;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc table.tableblock .paragraph{margin:0;padding:0}.doc .olist .admonitionblock,.doc .ulist .admonitionblock,.doc table.tableblock .admonitionblock{padding:.88889rem 1.11111rem}.doc ol,.doc ul{margin:0;padding:0 0 0 1.22222rem}.doc .olist>ol,.doc .ulist>ul{line-height:1.8}.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:.5rem;list-style:none}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem}.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:.5rem}.doc .olist li,.doc .ulist li{margin-bottom:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{color:#5d5d5d;font-size:.88889rem;font-weight:700;font-style:italic;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc .admonitionblock .title+.paragraph{margin-top:0}.doc .exampleblock>.content{background:#faf7f1;border:.25rem solid #e7e0d5;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#f4eee3;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:700;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight code,.doc pre:not(.highlight){background:#211c17;border-radius:.55556rem;-webkit-box-shadow:none;box-shadow:none;color:#f0e9df;display:block;overflow-x:auto;padding:1rem 1.11111rem}.doc .listingblock{margin-top:.77778rem}.doc pre code{color:inherit}.doc pre.highlight code::-webkit-scrollbar{height:.425em}.doc pre.highlight code::-webkit-scrollbar-track{background:#2b2620;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb{background:#34302a;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb:active,.doc pre.highlight code::-webkit-scrollbar-thumb:hover{background:#8f867a}.doc pre.highlight{position:relative}.doc .listingblock code[data-lang]::before{content:attr(data-lang);display:none;color:#8f867a;font-size:.75rem;letter-spacing:.05em;line-height:1;text-transform:uppercase;position:absolute;top:.25rem;right:.25rem}.doc .listingblock:hover code[data-lang]::before{display:none}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:#8f867a;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:500;line-height:1.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1.25em;height:1.25em;cursor:pointer;position:relative}.doc .source-toolbox .copy-button::before{content:"";display:block;width:1.25em;height:1.25em;background-image:url(../img/copy-d7c1e3194d.svg);background-size:contain;background-repeat:no-repeat;background-position:50%;-ms-flex-negative:0;flex-shrink:0}.doc .source-toolbox .copy-button.clicked::before{background-image:url(../img/copy-checkmark-9a4caf1664.svg)}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#3a332b;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#3a332b;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .3rem 1.5rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;font-style:normal;height:1.25em;line-height:1.2;text-align:center;width:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#f4eee3;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #faf7f1 inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #faf7f1;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:700;line-height:.90909}.doc .icon i::after,.doc .menuseq,.doc .path,.doc a.bare,.doc b.button,.doc code,.doc kbd{-ms-hyphens:none;hyphens:none}@media screen and (width <= 626px){#preamble+.sect1,.doc .sect1+.sect1{overflow-wrap:break-word}}div.badges p{text-align:left}div.badges span{color:#fff;padding:.15rem .3rem;font-weight:400;font-style:normal;font-size:.8rem}div.badges span.badge-key{background-color:#555;border-radius:.2rem 0 0 .2rem}div.badges span.badge-version{background-color:#217ee7;border-radius:0 .2rem .2rem 0}div.badges span.badge-supported{background-color:#4d4fb7;border-radius:0 .2rem .2rem 0}div.badges span.badge-unsupported{background-color:#d32f2f;border-radius:0 .2rem .2rem 0}.static{margin:0 auto}.static dl,.static ol,.static p,.static pre,.static ul{margin:1rem 0 0}.static a.icon{margin:2rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;text-align:center;background:none}.static .box,.static a.icon{display:-webkit-box;display:-ms-flexbox;display:flex}.static .box{margin:1rem 0}.static .box img{margin-top:1rem;height:6rem;margin-right:.5rem}.static .icon a{background-image:none}@media screen and (width >= 1025px){.static{max-width:66.66667rem}}@media screen and (width <= 1024px){.static .box,.static .content,.static .icon{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0;text-align:center;width:100%}.static .box .content{width:100%}.static .box img{height:6rem;max-width:25vw;margin-left:auto}.static .box img:only-child{margin-left:auto;margin-right:auto}.static .box img+img{margin-left:1rem;margin-right:auto}.static .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.static a.icon{margin:0;width:100%}}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.66667rem}.navbar{background:rgba(250,247,241,.9);backdrop-filter:blur(10px);border-bottom:1px solid #e7e0d5;color:#5c554c;font-size:.80556rem;height:3.66667rem;position:fixed;top:0;width:100%;z-index:4}.navbar-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.55556rem;height:100%;width:100%;max-width:66.66667rem;margin-inline:auto;padding-inline:1.77778rem}.navbar a{text-decoration:none}.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.22222rem}.navbar-item{font-weight:600;font-size:.80556rem;color:#5c554c;white-space:nowrap}.navbar-item:hover{color:#211c17}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.61111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;height:auto}.navbar-logo{width:2rem;height:2rem}.navbar-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1.05556rem;letter-spacing:-.02em;color:#211c17;white-space:nowrap}.navbar-burger{color:#5c554c;background:none;border:none;outline:none;line-height:1;height:3rem;position:relative;width:2rem;-ms-flex-negative:0;flex-shrink:0;top:-2.1px;padding:0}.navbar-burger:focus{outline:none}.navbar-burger span{background:#5c554c;display:block;height:1px;left:50%;margin-left:-7px;position:absolute;top:60%;width:25px}.navbar-burger span:first-child{margin-top:-10px}.navbar-burger span:nth-child(2){margin-top:-3px}.navbar-burger span:nth-child(3){margin-top:4px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:left top;transform-origin:left top;margin-top:-.75rem}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:left bottom;transform-origin:left bottom}@media screen and (width <= 1024px){.navbar-menu{display:none}.navbar-menu.is-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:0;position:absolute;top:3.66667rem;left:0;right:0;max-height:calc(100vh - 3.66667rem);overflow-y:auto;background:#faf7f1;border-bottom:1px solid #e7e0d5;padding:.44444rem 1.77778rem}.navbar-menu.is-active .navbar-item{padding:.66667rem 0;border-bottom:1px solid #f0e9dd}.navbar-burger{display:block}}@media screen and (width >= 1025px){.navbar-burger{display:none}}.navbar-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.77778rem;margin-left:auto}.navbar-github .brand-icon{height:1.11111rem;width:1.11111rem;fill:#5c554c;display:block}.navbar-github:hover .brand-icon{fill:#211c17}a.button.navbar-cta{margin:0;padding:.5rem 1rem;border-radius:.38889rem;font-size:.80556rem}.header .navbar-search{padding:0}.header .navbar-search input{border:1px solid #e7e0d5;border-radius:.38889rem;width:11.11111rem;margin:0;padding:.33333rem .55556rem .33333rem 1.66667rem;font-family:Open Sans,system-ui,sans-serif;font-size:.77778rem;caret-color:#e97826;background:no-repeat .5rem/.9rem url(../img/search-a73cfec790.svg);background-color:#f4eee3;color:#211c17;outline:0}.header .navbar-search input:focus-within{background-color:#fff;border-color:#d9ccb8}.header #search-cancel{position:relative;bottom:calc(50% + .1rem);left:calc(100% - 1.25rem);height:1rem;display:none;cursor:pointer}.header #search_results{top:3.66667rem;background:rgba(250,247,241,.9);text-align:left;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);position:absolute;margin-right:10px;overflow-y:auto;max-height:80vh;max-width:min(600px,90vw);min-width:300px;scrollbar-width:thin}#search_results::-webkit-scrollbar{width:.425em}#search_results::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb:active,#search_results::-webkit-scrollbar-thumb:hover{background:grey}.result_header{font-weight:600;color:#211c17;padding-right:.5rem}#search_results div.result{padding:.25rem;pointer-events:none}#search_results div.result:hover{background:#f5f5f5}#search_results div.heading{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#search_results dt{padding:.5rem 0 .5rem .5rem;color:#e97826;text-transform:uppercase;font-weight:700;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#search_results dt.version{height:1.75rem;padding:.3rem;border:2px solid #e97826;border-radius:25px;text-align:center;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}#search_results dd{margin-right:2rem;word-break:break-word}#search_results a{pointer-events:auto;padding:.5rem}#search_results a:hover{text-decoration:underline;-webkit-text-decoration-color:#c1c1c1;text-decoration-color:#c1c1c1}.result_summary{color:#333;padding-top:.3rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}#search_results div.footer-search{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;padding:.75rem}div.footer-search h4{color:#211c17;width:5rem}.no_search_results{padding:1rem;font-weight:700;color:#211c17;border-bottom:2px solid #f5f5f5}.algolia-docsearch-suggestion--highlight{font-weight:700;color:#333}.results-hidden #search_results{display:none}@media (width <= 1024px){.header .navbar-search{min-width:0}.header .navbar-search input{width:100%}.header #search-cancel{margin-top:.75rem}.header #search_results{left:0;width:100vw;top:3.66667rem}}@media (width <= 500px){.header .navbar-search,.navbar-github{display:none}}@media (width <= 430px){.navbar-wordmark{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}}footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#211c17;color:#c4bbac;font-size:.83333rem;line-height:1.6;padding:0;-ms-flex-negative:0;flex-shrink:0}footer .footer{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:2.22222rem;width:100%;max-width:66.66667rem;margin-inline:auto;padding-block:3.11111rem 2.22222rem;padding-inline:1.77778rem}.footer-brand{display:grid;grid-template-columns:auto 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:.61111rem;-moz-column-gap:.61111rem;column-gap:.61111rem}.footer-logo{width:1.88889rem;height:1.88889rem}.footer-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1rem;color:#faf7f1}.footer-blurb{grid-column:1/-1;font-size:.75rem;line-height:1.6;color:#8f867a;margin:.88889rem 0 0;max-width:15.55556rem}footer .footer p.remark{grid-column:1/-1;border-top:1px solid #34302a;margin:0;padding:1.22222rem 0 0;font-size:.69444rem;color:#8f867a}footer .footer a{color:#c4bbac}footer .footer .context{display:inline-block;margin:0 0 1rem}footer .footer .context a{font-size:.83333rem;text-transform:uppercase}footer .footer .context a::after{content:" ";display:inline-block;border-radius:50%;width:8px;height:8px;margin:0 1rem;background:#34302a}footer .footer .context:last-child a::after{display:none}footer .footer .footer-column{margin:0}footer .footer .footer-column dt{font-family:Archivo,sans-serif;font-weight:700;font-size:.72222rem;letter-spacing:.06em;text-transform:uppercase;color:#faf7f1;margin-bottom:.77778rem}footer .footer .footer-column dt label:first-of-type::after{content:"";display:block;position:relative;bottom:0;left:0;height:2px;width:3rem;background:#c4bbac}footer .footer .footer-column dd{margin:0 0 .55556rem}footer .footer .footer-column dd a{font-size:.77778rem;color:#c4bbac}footer .footer .footer-column dd a:hover{color:#faf7f1}.footer-tools{position:relative;top:-2rem;height:0;text-align:right;color:#8a8074;font-size:.72222rem}.footer-tools a{display:inline-block;padding:.4rem;border-radius:.4rem .4rem 0 0;height:2rem;color:#5c554c}.footer-tools a:hover{color:#211c17}footer .resources{grid-column:1/-1;text-align:center}footer .footer .footer-icons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;grid-column:1/-1;line-height:1.6;padding:.5rem;font-weight:700}footer .footer .footer-icons .brand-icon{height:2em;width:1.75em;margin:.35rem;fill:#c4bbac}footer .footer .footer-icons a:hover .brand-icon{fill:#faf7f1}footer .footer dl dt label:nth-child(2),footer .footer input[type=checkbox]{display:none}@media screen and (width <= 1024px){footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}footer .footer{grid-template-columns:1fr}footer .footer .footer-column dt{margin-bottom:1rem;display:-webkit-box;display:-ms-flexbox;display:flex}footer .footer dl dt label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}footer .footer dl dt label:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}footer .footer dl dt label:nth-child(2){display:block;height:1.75rem;width:1.75rem;line-height:1.75rem;font-size:1.75rem;-webkit-transition:.2s;transition:.2s}footer .footer input[type=checkbox]:checked+dl dt label:nth-child(2){-webkit-transform:rotate(45deg);transform:rotate(45deg)}footer .footer dl dd:first-of-type{margin-top:1rem}footer .footer .footer-icons .brand-icon{height:1.5rem}footer input[type=checkbox]:checked+dl dd{display:block}footer input[type=checkbox]+dl dd{display:none}} +@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:300;src:local("Open Sans Light"),local("OpenSans-Light"),url(../font/open-sans-latin-ext-300.woff2) format("woff2"),url(../font/open-sans-latin-ext-300.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:300;src:local("Open Sans Light Italic"),local("OpenSans-LightItalic"),url(../font/open-sans-latin-ext-300-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-300-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:700;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(../font/open-sans-latin-ext-700.woff2) format("woff2"),url(../font/open-sans-latin-ext-700.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:700;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(../font/open-sans-latin-ext-700-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-700-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold"),local("OpenSans-ExtraBold"),url(../font/open-sans-latin-ext-800.woff2) format("woff2"),url(../font/open-sans-latin-ext-800.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold Italic"),local("OpenSans-ExtraBoldItalic"),url(../font/open-sans-latin-ext-800-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-800-italic.woff) format("woff")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:500;src:local("Archivo Medium"),local("Archivo-Medium"),url(../font/archivo-latin-500-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:600;src:local("Archivo SemiBold"),local("Archivo-SemiBold"),url(../font/archivo-latin-600-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:700;src:local("Archivo Bold"),local("Archivo-Bold"),url(../font/archivo-latin-700-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:800;src:local("Archivo ExtraBold"),local("Archivo-ExtraBold"),url(../font/archivo-latin-800-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:local("JetBrains Mono Regular"),local("JetBrainsMono-Regular"),url(../font/jetbrains-mono-latin-400-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:local("JetBrains Mono Medium"),local("JetBrainsMono-Medium"),url(../font/jetbrains-mono-latin-500-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:local("JetBrains Mono SemiBold"),local("JetBrainsMono-SemiBold"),url(../font/jetbrains-mono-latin-600-normal.woff2) format("woff2")}.fa{display:inline-block}.fa-lock::before{content:"🔒"}body,html{height:100%}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}::-moz-selection{background:#cf7428;color:#fff}::selection{background:#cf7428;color:#fff}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;-webkit-text-size-adjust:100%}@media screen and (width >= 1025px){html{font-size:1.125em}}body{background:#faf7f1;color:#3a332b;font-family:Open Sans,system-ui,sans-serif;line-height:1.15;margin:0}h1,h2,h3,h4,h5,h6{font-family:Archivo,sans-serif}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{color:#211c17;font-family:JetBrains Mono,ui-monospace,monospace;overflow-wrap:break-word}b,dt,strong,th{font-weight:700}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}mark{color:#e97826;font-weight:700;background:#fff}.text-center{text-align:center}.body{min-height:calc(100vh - 42.66667rem);word-wrap:break-word}@media screen and (width >= 1025px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:3.66667rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (width >= 769px){.nav-container{width:15.55556rem}}@media screen and (width >= 1025px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible;padding:0}@media screen and (width <= 1024px){.nav-category{margin-left:1rem}}.nav{background:#f4eee3;border-right:1px solid #e7e0d5;height:calc(100vh - 6.22222rem);position:relative;top:2.55556rem}@media screen and (width >= 769px){.nav{-webkit-box-shadow:none;box-shadow:none}}@media screen and (width >= 1025px){.nav{top:3.66667rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.66667rem)}}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}.nav-search{-webkit-box-flex:0;-ms-flex:none;flex:none;padding:.77778rem .88889rem;border-bottom:1px solid #e7e0d5;position:relative}.nav-search .navbar-search{padding:0}.nav-search input.search{width:100%;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;padding:.44444rem 1.88889rem .44444rem 1.77778rem;background:#fff no-repeat .61111rem/.72222rem url(../img/search-a73cfec790.svg);color:#211c17;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;outline:0}.nav-search input.search::-webkit-input-placeholder{color:#5c554c}.nav-search input.search::-moz-placeholder{color:#5c554c}.nav-search input.search:-ms-input-placeholder{color:#5c554c}.nav-search input.search::-ms-input-placeholder{color:#5c554c}.nav-search input.search::placeholder{color:#5c554c}.nav-search input.search:focus{border-color:#d9ccb8}.nav-search-hint{position:absolute;top:50%;right:1.5rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);padding:.05556rem .33333rem;border-radius:.22222rem;background:#f4eee3;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;pointer-events:none}.nav-search:focus-within .nav-search-hint{display:none}.nav-search #search-cancel{position:absolute;inset:50% 1.5rem auto auto;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none;height:.88889rem;cursor:pointer}.nav-search #search_results{position:absolute;top:100%;left:.88889rem;width:min(600px,90vw);max-width:none;min-width:0;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;background:#fff;z-index:5;max-height:80vh;overflow-y:auto;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);scrollbar-width:thin}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;padding-bottom:2.55556rem;position:relative}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;inset:0}.nav-item[data-depth="2"]>.nav-item-toggle{margin-left:-.675em}.nav-item .nav-list{margin-left:1rem}.nav-menu{min-height:0;width:100%;padding:.77778rem .88889rem 1.11111rem;line-height:1.35;position:relative;word-break:break-word;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.nav-menu::-webkit-scrollbar{width:.425em}.nav-menu::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb:active,.nav-menu::-webkit-scrollbar-thumb:hover{background:grey}@media screen and (width <= 1024px){.nav-menu::-webkit-scrollbar{width:0;background:transparent}}.nav-menu h3.title{color:#211c17;font-family:Archivo,sans-serif;font-size:.77778rem;font-weight:700;margin:0 0 .44444rem;padding:0}.nav-menu a{color:inherit}.nav-list{margin:0;padding:0}.nav-menu>.nav-list{margin-bottom:.5rem}.nav-item{list-style:none;margin-top:0}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.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-8823676a4b.svg) no-repeat 50%/.5rem;border:none;outline:none;line-height:inherit;position:absolute;height:1.33333rem;width:.88889rem;margin-left:-.88889rem}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.nav-menu .nav-text,.nav-menu a.nav-link{display:block;padding:.27778rem .44444rem;border-radius:.33333rem;color:#3a332b;font-size:.75rem;font-weight:400;line-height:1.4}.nav-menu .nav-text:hover,.nav-menu a.nav-link:hover{background:#e7e0d5;color:#211c17;text-decoration:none}.is-current-page>.nav-text,.is-current-page>a.nav-link{background:#fbead8;color:#a84e0d;font-weight:700}.nav-menu .is-current-page>.nav-text:hover,.nav-menu .is-current-page>a.nav-link:hover{background:#fbead8;color:#853c09}.breadcrumbs li .image>img,.nav-link .image>img{width:1em}.nav-panel-explore{background:#f4eee3;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;right:0;bottom:0;left:0;max-height:calc(50% + 2.55556rem)}.nav-panel-explore,.nav-panel-explore .context{display:-webkit-box;display:-ms-flexbox;display:flex}.nav-panel-explore .context{-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:2.55556rem;padding:0 .88889rem;border-top:1px solid #e7e0d5;-webkit-box-shadow:none;box-shadow:none;color:#5c554c;cursor:pointer;font-size:.72222rem;line-height:1}.nav-panel-explore .context .title{font-weight:600}.nav-panel-explore .context .noversion,.nav-panel-explore .context .version{display:block;padding:.16667rem 1.22222rem .16667rem .5rem;border:1px solid #e7e0d5;border-radius:.33333rem;background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.nav-panel-explore .components{line-height:1.6;-webkit-box-shadow:inset 0 1px 5px #f5f5f5;box-shadow:inset 0 1px 5px #f5f5f5;background:#f0f0f0;padding:.5rem .75rem 0;margin:0;overflow-y:auto;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:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:700}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;margin-top:-.25rem;line-height:1}.nav-panel-explore .component .version{display:block;margin:.375rem .375rem 0 0}.nav-panel-explore .component .title a{color:inherit;display:inherit}.nav-panel-explore .component .version a{border:1px solid #e7e0d5;border-radius:.25rem;color:inherit;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentcolor;opacity:.9;font-weight:700}@media screen and (width <= 1024px){aside.toc.sidebar{display:none}}@media screen and (width >= 1025px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}main.article>.content{display:grid;grid-template-columns:minmax(0,1fr);gap:3.11111rem;max-width:65.55556rem;padding:2.44444rem 2.22222rem 4.44444rem}main.article>.content:has(>aside.toc.sidebar){grid-template-columns:minmax(0,1fr) 12.22222rem}main.article>.content>.doc{margin:0;max-width:none;padding:0}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 12.22222rem;flex:0 0 12.22222rem;min-width:0}.toc.sidebar .toc-menu ul{scrollbar-width:thin}.toc.sidebar .toc-menu ul::-webkit-scrollbar{width:.425em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:active,.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:hover{background:grey}}@media screen and (width >= 1216px){aside.toc.sidebar{-ms-flex-preferred-size:12.22222rem;flex-basis:12.22222rem}}.toolbar{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:rgba(250,247,241,.92);backdrop-filter:blur(8px);border-bottom:1px solid #e7e0d5;color:#5c554c;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.75rem;gap:1rem;height:2.55556rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:0 2.22222rem;position:sticky;top:3.66667rem;z-index:2}.static.toolbar,.toolbar{-webkit-box-shadow:none;box-shadow:none}.static.toolbar{border-bottom:0;margin:0;max-width:100vw}@media screen and (width <= 1024px){.toolbar{top:3.66667rem;padding:0 .88889rem}}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu-8775cec4be.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;height:2.5rem;padding:0;width:2.5rem;margin-right:-.25rem}@media screen and (width >= 1025px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back-e8d811f74c.svg);background-size:41.5%}.edit-this-page{display:none;padding:0}@media screen and (width >= 1025px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#5c554c;font-weight:600}.toolbar .edit-this-page a:hover{color:#a84e0d}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;min-width:0;padding:0;line-height:1.35}@media screen and (width >= 1025px){.breadcrumbs{display:block}}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .44444rem}.breadcrumbs li:last-of-type::after{content:none}.toolbar .breadcrumbs a{color:#5c554c}.toolbar .breadcrumbs a:hover{color:#a84e0d}.toolbar .breadcrumbs li:last-of-type a{color:#211c17;font-weight:600;text-decoration:none}.page-versions{display:none;margin:0;position:relative;line-height:1}@media screen and (width >= 1025px){.page-versions{display:block}}.page-versions .version-menu-toggle{background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;color:#5c554c;cursor:pointer;outline:none;padding:.16667rem 1.22222rem .16667rem .5rem;position:relative;z-index:3}.page-versions .version-menu,.page-versions .version-menu-toggle{border:1px solid #e7e0d5;border-radius:.33333rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.page-versions .version-menu{background-color:#fff;padding:1.66667rem .5rem .44444rem;position:absolute;top:0;left:0;min-width:100%}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#333}.toc.sidebar .toc-menu{margin-right:0;position:sticky;top:7.22222rem}.toc .toc-menu h3{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;line-height:1.3;margin:0;padding-bottom:.55556rem;text-transform:uppercase}.toc.sidebar .toc-menu h3{display:block;height:auto}.toc .toc-menu ul{font-size:.75rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 9.72222rem);overflow-y:auto}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.33333rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}@media screen and (width <= 1024px){.toc .toc-menu ul li ul li ul li a{padding-left:1.33333rem}}.toc .toc-menu a{border-left:2px solid #e7e0d5;color:#5c554c;display:block;padding:.33333rem 0 .33333rem .66667rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:not(.is-active):hover{border-left-color:#d9ccb8;color:#211c17}.toc .toc-menu a.is-active{border-left-color:#e97826;color:#211c17;font-weight:600}.sidebar.toc .toc-menu a:focus{background:#f4eee3}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#3a332b;font-size:inherit;-ms-hyphens:auto;hyphens:auto;line-height:1.7;margin:0 auto;padding:0 1rem 4rem}@media screen and (width >= 1025px){.doc{font-size:.88889rem;margin:0 2rem;max-width:75.88889rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#211c17;font-weight:700;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page,.static>h1:first-child{font-size:2.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0}.doc>h1.page img{width:2rem}.doc .doc-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.doc>#preamble>.sectionbody>.paragraph:first-child>p,.doc>h1.page+.paragraph>p{font-size:.91667rem;line-height:1.7;margin:1.11111rem 0 0}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f4eee3;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){font-size:1.44444rem;letter-spacing:-.02em;margin:2.44444rem 0 0;overflow-wrap:break-word;padding:.44444rem 0 0}.doc h3:not(.discrete){font-weight:700;overflow-wrap:break-word}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor,.doc td .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em;background-image:none}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before,.doc td .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,.doc td:hover .anchor{visibility:visible}.doc p{margin:0}.doc .table-wrapper{background:#fff;border:1px solid #e7e0d5;border-radius:.55556rem;margin:.88889rem 0 0;overflow-x:auto}.doc .table-wrapper::-webkit-scrollbar{height:.425em}.doc .table-wrapper::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb:active,.doc .table-wrapper::-webkit-scrollbar-thumb:hover{background:grey}.doc .table-wrapper table{width:100%}.doc .tableblock p{font-size:inherit}.doc .tableblock td:not(:first-child)>p,.doc .tableblock thead,.doc :not(td)>.content,.doc :not(td)>p{-ms-hyphens:auto;hyphens:auto}.doc a{color:#a84e0d;word-break:break-word;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}.doc .camel-project .links a,.doc .sect2 h3 a,.doc .section .links a,.doc li a,.doc table a{background:none}.doc table.tableblock td a{word-break:normal}.doc table.tableblock tbody tr td:first-child{width:25%;overflow-wrap:anywhere;font-weight:700}.doc a:hover{color:#853c09}.doc a.unresolved{color:#d32f2f}.doc i.fa{font-style:normal}.doc p code,.doc thead code{background:#f4eee3;border-radius:.22222rem;color:#211c17;font-size:.80556rem;overflow-wrap:break-word;padding:.11111rem .33333rem}.doc pre{font-size:.75rem;line-height:1.7;margin:0}.doc blockquote{margin:0}.doc .right{float:right}.doc .left{float:left}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock{margin:1rem 0 0;word-break:break-word}.doc table.tableblock{border-collapse:collapse;font-size:.83333rem;margin:0}.doc table.stretch{width:100%}.doc table.tableblock thead th{background:#f4eee3;border-bottom:1px solid #e7e0d5;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;letter-spacing:.06em;padding:.61111rem .88889rem;text-align:left;text-transform:uppercase}.doc table.tableblock>:not(thead) th,.doc table.tableblock td{border-top:1px solid #f0e9dd;border-bottom:0;padding:.66667rem .88889rem}.doc table.tableblock tbody tr:first-child>td,.doc table.tableblock tbody tr:first-child>th{border-top:0}.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{background:#fff;border:1px solid #e7e0d5;border-left:.16667rem solid #e97826;border-radius:0 .66667rem .66667rem 0;-webkit-box-shadow:none;box-shadow:none;margin:1.55556rem 0 0;padding:.88889rem 1.11111rem}.doc .admonitionblock .table-wrapper,.doc .colist .table-wrapper{background:none;border:0;border-radius:0;margin:0;overflow:visible}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.80556rem;line-height:1.6}.doc .admonitionblock td.content>:first-child{margin:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock table{border-collapse:collapse;position:relative;table-layout:auto;width:100%}.doc .admonitionblock td.content{background:none;color:#5c554c;padding:0;width:auto}.doc .admonitionblock td.icon{padding:0 .77778rem 0 0;vertical-align:top;white-space:nowrap;width:1px}.doc .admonitionblock .icon i{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-style:normal;font-weight:600;height:auto;letter-spacing:.04em;line-height:1.4;padding:.16667rem .44444rem;text-transform:uppercase;vertical-align:top}.doc .admonitionblock .icon i::after{content:attr(title);-ms-hyphens:none;hyphens:none;-webkit-writing-mode:horizontal-tb;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.doc .admonitionblock.caution{border-left-color:#a0439c}.doc .admonitionblock.caution .icon i{background:#f7e9f6;color:#8e3b8a}.doc .admonitionblock.important{border-left-color:#d32f2f}.doc .admonitionblock.important .icon i{background:#fce9e9;color:#b02525}.doc .admonitionblock.warning{border-left-color:#e18114}.doc .admonitionblock.warning .icon i{background:#fdf0dc;color:#8a5209}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock img{display:block}.doc .image>img,.doc .imageblock img{height:auto;max-width:100%}.doc table.tableblock td .imageblock img{max-width:50px}#preamble .abstract blockquote{background:#f4eee3;border-left:5px solid #e7e0d5;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock{background:#f4eee3;border-left:5px solid #5d5d5d;color:#5d5d5d;padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#5c554c;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc table.tableblock .paragraph{margin:0;padding:0}.doc .olist .admonitionblock,.doc .ulist .admonitionblock,.doc table.tableblock .admonitionblock{padding:.88889rem 1.11111rem}.doc ol,.doc ul{margin:0;padding:0 0 0 1.22222rem}.doc .olist>ol,.doc .ulist>ul{line-height:1.8}.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:.5rem;list-style:none}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem}.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:.5rem}.doc .olist li,.doc .ulist li{margin-bottom:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{color:#5d5d5d;font-size:.88889rem;font-weight:700;font-style:italic;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc .admonitionblock .title+.paragraph{margin-top:0}.doc .exampleblock>.content{background:#faf7f1;border:.25rem solid #e7e0d5;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#f4eee3;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:700;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight code,.doc pre:not(.highlight){background:#211c17;border-radius:.55556rem;-webkit-box-shadow:none;box-shadow:none;color:#f0e9df;display:block;overflow-x:auto;padding:1rem 1.11111rem}.doc .listingblock{margin-top:.77778rem}.doc pre code{color:inherit}.doc pre.highlight code::-webkit-scrollbar{height:.425em}.doc pre.highlight code::-webkit-scrollbar-track{background:#2b2620;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb{background:#34302a;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb:active,.doc pre.highlight code::-webkit-scrollbar-thumb:hover{background:#8f867a}.doc pre.highlight{position:relative}.doc .listingblock code[data-lang]::before{content:attr(data-lang);display:none;color:#8f867a;font-size:.75rem;letter-spacing:.05em;line-height:1;text-transform:uppercase;position:absolute;top:.25rem;right:.25rem}.doc .listingblock:hover code[data-lang]::before{display:none}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:#8f867a;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:500;line-height:1.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1.25em;height:1.25em;cursor:pointer;position:relative}.doc .source-toolbox .copy-button::before{content:"";display:block;width:1.25em;height:1.25em;background-image:url(../img/copy-d7c1e3194d.svg);background-size:contain;background-repeat:no-repeat;background-position:50%;-ms-flex-negative:0;flex-shrink:0}.doc .source-toolbox .copy-button.clicked::before{background-image:url(../img/copy-checkmark-9a4caf1664.svg)}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#3a332b;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#3a332b;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .3rem 1.5rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;font-style:normal;height:1.25em;line-height:1.2;text-align:center;width:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#f4eee3;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #faf7f1 inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #faf7f1;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:700;line-height:.90909}.doc .icon i::after,.doc .menuseq,.doc .path,.doc a.bare,.doc b.button,.doc code,.doc kbd{-ms-hyphens:none;hyphens:none}@media screen and (width <= 626px){#preamble+.sect1,.doc .sect1+.sect1{overflow-wrap:break-word}}div.badges p{text-align:left}div.badges span{color:#fff;padding:.15rem .3rem;font-weight:400;font-style:normal;font-size:.8rem}div.badges span.badge-key{background-color:#555;border-radius:.2rem 0 0 .2rem}div.badges span.badge-version{background-color:#217ee7;border-radius:0 .2rem .2rem 0}div.badges span.badge-supported{background-color:#4d4fb7;border-radius:0 .2rem .2rem 0}div.badges span.badge-unsupported{background-color:#d32f2f;border-radius:0 .2rem .2rem 0}.static{margin:0 auto}.static dl,.static ol,.static p,.static pre,.static ul{margin:1rem 0 0}.static a.icon{margin:2rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;text-align:center;background:none}.static .box,.static a.icon{display:-webkit-box;display:-ms-flexbox;display:flex}.static .box{margin:1rem 0}.static .box img{margin-top:1rem;height:6rem;margin-right:.5rem}.static .icon a{background-image:none}@media screen and (width >= 1025px){.static{max-width:66.66667rem}}@media screen and (width <= 1024px){.static .box,.static .content,.static .icon{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0;text-align:center;width:100%}.static .box .content{width:100%}.static .box img{height:6rem;max-width:25vw;margin-left:auto}.static .box img:only-child{margin-left:auto;margin-right:auto}.static .box img+img{margin-left:1rem;margin-right:auto}.static .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.static a.icon{margin:0;width:100%}}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.66667rem}.navbar{background:rgba(250,247,241,.9);backdrop-filter:blur(10px);border-bottom:1px solid #e7e0d5;color:#5c554c;font-size:.80556rem;height:3.66667rem;position:fixed;top:0;width:100%;z-index:4}.navbar-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.55556rem;height:100%;width:100%;max-width:66.66667rem;margin-inline:auto;padding-inline:1.77778rem}.navbar a{text-decoration:none}.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.22222rem}.navbar-item{font-weight:600;font-size:.80556rem;color:#5c554c;white-space:nowrap}.navbar-item:hover{color:#211c17}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.61111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;height:auto}.navbar-logo{width:2rem;height:2rem}.navbar-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1.05556rem;letter-spacing:-.02em;color:#211c17;white-space:nowrap}.navbar-burger{color:#5c554c;background:none;border:none;outline:none;line-height:1;height:3rem;position:relative;width:2rem;-ms-flex-negative:0;flex-shrink:0;top:-2.1px;padding:0}.navbar-burger:focus{outline:none}.navbar-burger span{background:#5c554c;display:block;height:1px;left:50%;margin-left:-7px;position:absolute;top:60%;width:25px}.navbar-burger span:first-child{margin-top:-10px}.navbar-burger span:nth-child(2){margin-top:-3px}.navbar-burger span:nth-child(3){margin-top:4px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:left top;transform-origin:left top;margin-top:-.75rem}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:left bottom;transform-origin:left bottom}@media screen and (width <= 1024px){.navbar-menu{display:none}.navbar-menu.is-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:0;position:absolute;top:3.66667rem;left:0;right:0;max-height:calc(100vh - 3.66667rem);overflow-y:auto;background:#faf7f1;border-bottom:1px solid #e7e0d5;padding:.44444rem 1.77778rem}.navbar-menu.is-active .navbar-item{padding:.66667rem 0;border-bottom:1px solid #f0e9dd}.navbar-burger{display:block}}@media screen and (width >= 1025px){.navbar-burger{display:none}}.navbar-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.77778rem;margin-left:auto}.navbar-github .brand-icon{height:1.11111rem;width:1.11111rem;fill:#5c554c;display:block}.navbar-github:hover .brand-icon{fill:#211c17}a.button.navbar-cta{margin:0;padding:.5rem 1rem;border-radius:.38889rem;font-size:.80556rem}.header .navbar-search{padding:0}.header .navbar-search input{border:1px solid #e7e0d5;border-radius:.38889rem;width:11.11111rem;margin:0;padding:.33333rem .55556rem .33333rem 1.66667rem;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;background:no-repeat .5rem/.9rem url(../img/search-a73cfec790.svg);background-color:#fff;color:#211c17;outline:0}.header .navbar-search input:focus-within{background-color:#fff;border-color:#d9ccb8}.header #search-cancel{position:relative;bottom:calc(50% + .1rem);left:calc(100% - 1.25rem);height:1rem;display:none;cursor:pointer}.header #search_results{top:3.66667rem;background:rgba(250,247,241,.9);text-align:left;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);position:absolute;margin-right:10px;overflow-y:auto;max-height:80vh;max-width:min(600px,90vw);min-width:300px;scrollbar-width:thin}#search_results::-webkit-scrollbar{width:.425em}#search_results::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb:active,#search_results::-webkit-scrollbar-thumb:hover{background:grey}.result_header{font-weight:600;color:#211c17;padding-right:.5rem}#search_results div.result{padding:.25rem;pointer-events:none}#search_results div.result:hover{background:#f5f5f5}#search_results div.heading{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#search_results dt{padding:.5rem 0 .5rem .5rem;color:#e97826;text-transform:uppercase;font-weight:700;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#search_results dt.version{height:1.75rem;padding:.3rem;border:2px solid #e97826;border-radius:25px;text-align:center;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}#search_results dd{margin-right:2rem;word-break:break-word}#search_results a{pointer-events:auto;padding:.5rem}#search_results a:hover{text-decoration:underline;-webkit-text-decoration-color:#c1c1c1;text-decoration-color:#c1c1c1}.result_summary{color:#333;padding-top:.3rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}#search_results div.footer-search{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;padding:.75rem}div.footer-search h4{color:#211c17;width:5rem}.no_search_results{padding:1rem;font-weight:700;color:#211c17;border-bottom:2px solid #f5f5f5}.algolia-docsearch-suggestion--highlight{font-weight:700;color:#333}.results-hidden #search_results{display:none}@media (width <= 1024px){.header .navbar-search{min-width:0}.header .navbar-search input{width:100%}.header #search-cancel{margin-top:.75rem}.header #search_results{left:0;width:100vw;top:3.66667rem}}@media (width <= 500px){.header .navbar-search,.navbar-github{display:none}}@media (width <= 430px){.navbar-wordmark{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}}footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#211c17;color:#c4bbac;font-size:.83333rem;line-height:1.6;padding:0;-ms-flex-negative:0;flex-shrink:0}footer .footer{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:2.22222rem;width:100%;max-width:66.66667rem;margin-inline:auto;padding-block:3.11111rem 2.22222rem;padding-inline:1.77778rem}.footer-brand{display:grid;grid-template-columns:auto 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:.61111rem;-moz-column-gap:.61111rem;column-gap:.61111rem}.footer-logo{width:1.88889rem;height:1.88889rem}.footer-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1rem;color:#faf7f1}.footer-blurb{grid-column:1/-1;font-size:.75rem;line-height:1.6;color:#8f867a;margin:.88889rem 0 0;max-width:15.55556rem}footer .footer p.remark{grid-column:1/-1;border-top:1px solid #34302a;margin:0;padding:1.22222rem 0 0;font-size:.69444rem;color:#8f867a}footer .footer a{color:#c4bbac}footer .footer .context{display:inline-block;margin:0 0 1rem}footer .footer .context a{font-size:.83333rem;text-transform:uppercase}footer .footer .context a::after{content:" ";display:inline-block;border-radius:50%;width:8px;height:8px;margin:0 1rem;background:#34302a}footer .footer .context:last-child a::after{display:none}footer .footer .footer-column{margin:0}footer .footer .footer-column dt{font-family:Archivo,sans-serif;font-weight:700;font-size:.72222rem;letter-spacing:.06em;text-transform:uppercase;color:#faf7f1;margin-bottom:.77778rem}footer .footer .footer-column dt label:first-of-type::after{content:"";display:block;position:relative;bottom:0;left:0;height:2px;width:3rem;background:#c4bbac}footer .footer .footer-column dd{margin:0 0 .55556rem}footer .footer .footer-column dd a{font-size:.77778rem;color:#c4bbac}footer .footer .footer-column dd a:hover{color:#faf7f1}.footer-tools{position:relative;top:-2rem;height:0;text-align:right;color:#8a8074;font-size:.72222rem}.footer-tools a{display:inline-block;padding:.4rem;border-radius:.4rem .4rem 0 0;height:2rem;color:#5c554c}.footer-tools a:hover{color:#211c17}footer .resources{grid-column:1/-1;text-align:center}footer .footer .footer-icons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;grid-column:1/-1;line-height:1.6;padding:.5rem;font-weight:700}footer .footer .footer-icons .brand-icon{height:2em;width:1.75em;margin:.35rem;fill:#c4bbac}footer .footer .footer-icons a:hover .brand-icon{fill:#faf7f1}footer .footer dl dt label:nth-child(2),footer .footer input[type=checkbox]{display:none}@media screen and (width <= 1024px){footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}footer .footer{grid-template-columns:1fr}footer .footer .footer-column dt{margin-bottom:1rem;display:-webkit-box;display:-ms-flexbox;display:flex}footer .footer dl dt label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}footer .footer dl dt label:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}footer .footer dl dt label:nth-child(2){display:block;height:1.75rem;width:1.75rem;line-height:1.75rem;font-size:1.75rem;-webkit-transition:.2s;transition:.2s}footer .footer input[type=checkbox]:checked+dl dt label:nth-child(2){-webkit-transform:rotate(45deg);transform:rotate(45deg)}footer .footer dl dd:first-of-type{margin-top:1rem}footer .footer .footer-icons .brand-icon{height:1.5rem}footer input[type=checkbox]:checked+dl dd{display:block}footer input[type=checkbox]+dl dd{display:none}} /*! highlight.js theme for the 2026 redesign, per SCOPE.md section 2a. Replaces the GitHub light theme; --pre-background is now --color-ink. Colors live in vars.css as --syntax-*, shared with chroma.css. */.hljs-comment,.hljs-quote{color:#8f867a;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#e97826;font-weight:600}.hljs-attr,.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:#e8c87a}.hljs-doctag,.hljs-string{color:#f2a05a}.hljs-section,.hljs-selector-id,.hljs-title{color:#faf7f1;font-weight:600}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#d9b6f0;font-weight:600}.hljs-attribute,.hljs-name,.hljs-tag{color:#c4bbac;font-weight:400}.hljs-link,.hljs-regexp{color:#9fd3b0}.hljs-bullet,.hljs-symbol{color:#f2a05a}.hljs-built_in,.hljs-builtin-name{color:#8ec5e6}.hljs-meta{color:#8f867a;font-weight:600}.doc code.language-console .hljs-meta,.doc code.language-shell .hljs-meta,.doc code.language-shellsession .hljs-meta{color:#e0805a}.hljs-deletion{background:rgba(224,82,58,.25)}.hljs-addition{background:rgba(159,211,176,.25)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:600} diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 1ac501be347..9617807ce1b 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-fe13253002.css", + "css/site.css": "css/site-6bdf790e37.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 50ba5d703dd..06037eef584 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-fe13253002.css", + "css/site.css": "css/site-6bdf790e37.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index e8d3708a398..6afdba5d54a 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 1ac501be347..9617807ce1b 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-fe13253002.css", + "css/site.css": "css/site-6bdf790e37.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/header.css b/antora-ui-camel/src/css/header.css index b537e8d8afe..271e139454d 100644 --- a/antora-ui-camel/src/css/header.css +++ b/antora-ui-camel/src/css/header.css @@ -210,10 +210,10 @@ a.button.navbar-cta { padding: calc(6 / var(--rem-base) * 1rem) calc(10 / var(--rem-base) * 1rem) calc(6 / var(--rem-base) * 1rem) calc(30 / var(--rem-base) * 1rem); font-family: var(--body-font-family); - font-size: calc(14 / var(--rem-base) * 1rem); + font-size: calc(13.5 / var(--rem-base) * 1rem); caret-color: var(--color-camel-orange); background: no-repeat 0.5rem center / 0.9rem url('../img/search.svg'); - background-color: var(--color-paper-2); + background-color: var(--color-white); color: var(--color-ink); outline: 0; } diff --git a/config.toml b/config.toml index 8b04602d983..29cac75c859 100644 --- a/config.toml +++ b/config.toml @@ -41,7 +41,7 @@ defaultMarkdownHandler = "goldmark" filename = "sitemap-website.xml" [[menu.main]] - name = "Documentation" + name = "Docs" identifier = "docs" weight = 1 url = "/docs/" From 9203c48c4a5334c13215211a5b5f5794078252a7 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 16:10:29 -0400 Subject: [PATCH 092/209] style(home): collapse the grids at 1024px and 626px Reuses the repo's existing two breakpoints. The hero art moves above the copy when the hero stacks, matching the outgoing page's column-reverse. --- ...ite-6bdf790e37.css => site-7c89f74d51.css} | 2 +- .../public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- .../public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 64 +++++++++++++++++++ 6 files changed, 69 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/css/{site-6bdf790e37.css => site-7c89f74d51.css} (79%) diff --git a/antora-ui-camel/public/_/css/site-6bdf790e37.css b/antora-ui-camel/public/_/css/site-7c89f74d51.css similarity index 79% rename from antora-ui-camel/public/_/css/site-6bdf790e37.css rename to antora-ui-camel/public/_/css/site-7c89f74d51.css index f33b9e1d401..b2aa08d8152 100644 --- a/antora-ui-camel/public/_/css/site-6bdf790e37.css +++ b/antora-ui-camel/public/_/css/site-7c89f74d51.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 9617807ce1b..3bf9e253468 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-6bdf790e37.css", + "css/site.css": "css/site-7c89f74d51.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 06037eef584..3807e658dd9 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-6bdf790e37.css", + "css/site.css": "css/site-7c89f74d51.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 6afdba5d54a..ae3a007c136 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 9617807ce1b..3bf9e253468 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-6bdf790e37.css", + "css/site.css": "css/site-7c89f74d51.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index d6bb33ee82d..c5957113fed 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -591,3 +591,67 @@ a.button.on-dark:hover { .home-closing-actions .button { margin: 0; } + +/* Tablet */ + +@media screen and (width <= 1024px) { + .home-hero { + gap: calc(36 / var(--rem-base) * 1rem); + grid-template-columns: minmax(0, 1fr); + padding-top: calc(40 / var(--rem-base) * 1rem); + } + + .home-hero h1 { + font-size: calc(44 / var(--rem-base) * 1rem); + } + + .home-hero-art { + order: -1; + } + + .home-section-head h2 { + font-size: calc(30 / var(--rem-base) * 1rem); + } + + .home-grid--three, + .home-grid--features, + .home-grid--four { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .home-closing-inner { + padding: calc(36 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem); + } +} + +/* Mobile */ + +@media screen and (width <= 626px) { + .home-hero h1 { + font-size: calc(36 / var(--rem-base) * 1rem); + } + + .home-hero-actions { + flex-wrap: wrap; + } + + .home-grid--three, + .home-grid--features, + .home-grid--four { + grid-template-columns: minmax(0, 1fr); + } + + .home-stats-list { + gap: calc(24 / var(--rem-base) * 1rem); + flex-wrap: wrap; + } + + .home-closing-actions { + flex-wrap: wrap; + width: 100%; + } + + .home-tabpanel pre { + font-size: calc(12 / var(--rem-base) * 1rem); + } +} From e44f3708924e12cae1092de9ba3a4b1cef52f7ec Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 16:35:40 -0400 Subject: [PATCH 093/209] fix(home,projects): drop the hero art reorder, link the primary cards, correct the connector count Co-Authored-By: Claude Opus 5 (1M context) --- .../_/css/{site-7c89f74d51.css => site-bb170e3ef9.css} | 2 +- antora-ui-camel/public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- antora-ui-camel/public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 2 +- content/_index.md | 2 +- layouts/projects/list.html | 10 ++++++++-- 8 files changed, 15 insertions(+), 9 deletions(-) rename antora-ui-camel/public/_/css/{site-7c89f74d51.css => site-bb170e3ef9.css} (79%) diff --git a/antora-ui-camel/public/_/css/site-7c89f74d51.css b/antora-ui-camel/public/_/css/site-bb170e3ef9.css similarity index 79% rename from antora-ui-camel/public/_/css/site-7c89f74d51.css rename to antora-ui-camel/public/_/css/site-bb170e3ef9.css index b2aa08d8152..5ab457cfb14 100644 --- a/antora-ui-camel/public/_/css/site-7c89f74d51.css +++ b/antora-ui-camel/public/_/css/site-bb170e3ef9.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 3bf9e253468..dd690d2abe8 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-7c89f74d51.css", + "css/site.css": "css/site-bb170e3ef9.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 3807e658dd9..94a09b73f28 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-7c89f74d51.css", + "css/site.css": "css/site-bb170e3ef9.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index ae3a007c136..346c4a164a1 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 3bf9e253468..dd690d2abe8 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-7c89f74d51.css", + "css/site.css": "css/site-bb170e3ef9.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index c5957113fed..6ccf94586c2 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -606,7 +606,7 @@ a.button.on-dark:hover { } .home-hero-art { - order: -1; + aspect-ratio: 1 / 0.45; } .home-section-head h2 { diff --git a/content/_index.md b/content/_index.md index a401d967751..bdae391a884 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,6 +1,6 @@ --- title: Home -description: Apache Camel is an open source integration framework with 350+ connectors for databases, APIs, message brokers, and cloud services. Write routes in Java, YAML, or XML. Run on Spring Boot, Quarkus, or standalone with the Camel CLI. In production since 2007. Apache License 2.0. +description: Apache Camel is an open source integration framework with 390+ connectors for databases, APIs, message brokers, and cloud services. Write routes in Java, YAML, or XML. Run on Spring Boot, Quarkus, or standalone with the Camel CLI. In production since 2007. Apache License 2.0. keywords: - apache camel - integration framework diff --git a/layouts/projects/list.html b/layouts/projects/list.html index 3717b3e0240..afa918b8c90 100644 --- a/layouts/projects/list.html +++ b/layouts/projects/list.html @@ -16,11 +16,16 @@

{{ .Title }}

Primary projects

    {{- range $data.primary }} + {{- $project := . }}
  • {{ .name }}

    {{ .description }}

    {{ .stats }}

    +
    + {{- with .docs }}Read more →{{ end }} + {{- with .source }}Source{{ end }} +
  • {{- end }}
@@ -30,6 +35,7 @@

{{ .name }}

Specialized & ecosystem projects

    {{- range $data.specialized }} + {{- $project := . }}
  • @@ -37,8 +43,8 @@

    {{ .name }}

    {{ .description }}

    {{ .stats }} - {{- with .docs }}Read more →{{ end }} - {{- with .source }}Source{{ end }} + {{- with .docs }}Read more →{{ end }} + {{- with .source }}Source{{ end }}
  • From 009522f975a20cb454b2eb41931dee7b45939474 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 16:38:03 -0400 Subject: [PATCH 094/209] fix(home): keep the stacked hero image under the banner ratio The logo is square, so .home-hero-art img's base 62% width made the image taller than the 1/0.45 ratio and sized the panel itself, leaving the ratio inert. Constrain the image at the collapsed widths so the ratio governs. Co-Authored-By: Claude Opus 5 (1M context) --- .../_/css/{site-bb170e3ef9.css => site-fed18c630b.css} | 2 +- antora-ui-camel/public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- antora-ui-camel/public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- antora-ui-camel/src/css/frontpage.css | 6 ++++++ 6 files changed, 11 insertions(+), 5 deletions(-) rename antora-ui-camel/public/_/css/{site-bb170e3ef9.css => site-fed18c630b.css} (79%) diff --git a/antora-ui-camel/public/_/css/site-bb170e3ef9.css b/antora-ui-camel/public/_/css/site-fed18c630b.css similarity index 79% rename from antora-ui-camel/public/_/css/site-bb170e3ef9.css rename to antora-ui-camel/public/_/css/site-fed18c630b.css index 5ab457cfb14..b557504ff34 100644 --- a/antora-ui-camel/public/_/css/site-bb170e3ef9.css +++ b/antora-ui-camel/public/_/css/site-fed18c630b.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-hero-art img{width:40%}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index dd690d2abe8..0740052cd4c 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-bb170e3ef9.css", + "css/site.css": "css/site-fed18c630b.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 94a09b73f28..9b7e06b89c6 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-bb170e3ef9.css", + "css/site.css": "css/site-fed18c630b.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 346c4a164a1..e29a06d350d 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index dd690d2abe8..0740052cd4c 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-bb170e3ef9.css", + "css/site.css": "css/site-fed18c630b.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index 6ccf94586c2..342f965c4c8 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -609,6 +609,12 @@ a.button.on-dark:hover { aspect-ratio: 1 / 0.45; } + /* The logo is square, so the base 62% width would make the image taller than + the banner ratio above and size the panel itself. Keep it under the ratio. */ + .home-hero-art img { + width: 40%; + } + .home-section-head h2 { font-size: calc(30 / var(--rem-base) * 1rem); } From 4fecff14c7ee80db820dbfbbc477e12dbca1b8e2 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 17:36:10 -0400 Subject: [PATCH 095/209] feat(css): add the shared primitives for the remaining redesign pages Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/frontpage.css | 9 ++ antora-ui-camel/src/css/primitives.css | 159 +++++++++++++++++++++++++ antora-ui-camel/src/css/site.css | 1 + antora-ui-camel/src/css/toc.css | 2 +- antora-ui-camel/src/js/09-home.js | 36 +++--- 5 files changed, 190 insertions(+), 17 deletions(-) create mode 100644 antora-ui-camel/src/css/primitives.css diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index 342f965c4c8..e8bca90b9f0 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -38,6 +38,15 @@ a.button.on-dark:hover { color: var(--color-on-dark); } +a.button.ink { + background-color: var(--color-ink); + color: var(--color-white); +} + +a.button.ink:hover { + background-color: var(--color-ink-2); +} + /* Home page (layouts/index.html, data/home.yaml) */ .home { diff --git a/antora-ui-camel/src/css/primitives.css b/antora-ui-camel/src/css/primitives.css new file mode 100644 index 00000000000..1a52bd8dca6 --- /dev/null +++ b/antora-ui-camel/src/css/primitives.css @@ -0,0 +1,159 @@ +/* Shared primitives for the redesigned content pages (docs, download, security, + community, tooling, blog/post/category, releases/advisory). Consolidated from + the piece-4b screen specs; see .superpowers/sdd/4b/00-primitives.md for the + full inventory and rationale behind each class. Each consuming page's own + CSS file supplies page-specific layout on top of these (an icon slot, a + fixed grid-column span, a header-row layout) - never the shell/typography + again. */ + +/* ---- page-hero (index/list screens) --------------------------------- */ + +.page-hero-title { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(46 / var(--rem-base) * 1rem); + letter-spacing: -0.03em; + line-height: 1.05; + margin: 0; + color: var(--color-ink); +} + +.page-hero-lead { + font-size: calc(17.5 / var(--rem-base) * 1rem); + line-height: 1.55; + color: var(--color-ink-soft); + margin: calc(14 / var(--rem-base) * 1rem) 0 0; + text-wrap: pretty; +} + +/* ---- detail-lead (single-item detail screens: post, advisory) ------- */ + +.detail-lead { + font-family: var(--display-font-family); + font-weight: 500; + font-size: calc(21 / var(--rem-base) * 1rem); + line-height: 1.4; + color: var(--color-ink-2); + margin: calc(16 / var(--rem-base) * 1rem) 0 0; + text-wrap: pretty; +} + +/* ---- section-label (uppercase eyebrow + rule) ------------------------ */ + +.section-label { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(15 / var(--rem-base) * 1rem); + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--color-ink-muted); + margin: calc(56 / var(--rem-base) * 1rem) 0 0; + padding-bottom: calc(14 / var(--rem-base) * 1rem); + border-bottom: 1px solid var(--color-line); +} + +/* ---- card / card-grid ------------------------------------------------ */ + +.card { + display: flex; + flex-direction: column; + background: var(--color-white); + border: 1px solid var(--color-line); + border-radius: 13px; /* radius exemption: raw px */ + padding: calc(24 / var(--rem-base) * 1rem); + transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s; +} + +.card:hover { + border-color: var(--color-line-hover); + box-shadow: 0 14px 34px -22px rgb(33 28 23 / 35%); + transform: translateY(-2px); +} + +.card--flat { + transition: none; +} + +.card--flat:hover { + border-color: var(--color-line); + box-shadow: none; + transform: none; +} + +.card--lg { + border-radius: 16px; /* radius exemption: raw px */ + padding: calc(32 / var(--rem-base) * 1rem); +} + +.card--dark { + background: var(--color-ink); + border-color: var(--color-dark-line); + color: var(--color-on-dark); +} + +.card-grid { + display: grid; + list-style: none; + margin: 0; + padding: 0; + gap: calc(18 / var(--rem-base) * 1rem); +} + +.card-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } +.card-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } +.card-grid--feature { grid-template-columns: 1.2fr 1fr; } + +@media screen and (width <= 1024px) { + .card-grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .card-grid--feature { grid-template-columns: 1fr; } +} + +@media screen and (width <= 626px) { + .card-grid--2, + .card-grid--3, + .card-grid--feature { + grid-template-columns: minmax(0, 1fr); + } +} + +/* ---- lts-chip ---------------------------------------------------------- */ + +.lts-chip { + display: inline-block; + font-family: var(--monospace-font-family); + font-size: calc(10.5 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-white); + background: var(--color-camel-orange); + padding: calc(2 / var(--rem-base) * 1rem) calc(7 / var(--rem-base) * 1rem); + border-radius: 20px; /* radius exemption: raw px */ +} + +/* ---- severity-chip: color mapping is shared; size is not -------------- */ + +.severity-chip { + display: inline-block; + font-family: var(--monospace-font-family); + font-weight: 600; + border-radius: 20px; /* radius exemption: raw px */ +} + +.severity-chip--low { + background: var(--color-paper-2); + color: var(--color-ink-soft); +} + +.severity-chip--medium { + background: var(--color-orange-tint); + color: var(--color-orange-deep); +} + +.severity-chip--high { + background: var(--warning-tint); + color: var(--warning-chip-font-color); +} + +.severity-chip--critical { + background: var(--important-tint); + color: var(--important-chip-font-color); +} diff --git a/antora-ui-camel/src/css/site.css b/antora-ui-camel/src/css/site.css index 67f02d9bc0c..1ecd33833a4 100644 --- a/antora-ui-camel/src/css/site.css +++ b/antora-ui-camel/src/css/site.css @@ -18,6 +18,7 @@ @import url('highlight.css'); @import url('chroma.css'); @import url('frontpage.css'); +@import url('primitives.css'); @import url('print.css'); @import url('pagination.css'); @import url('blog.css'); diff --git a/antora-ui-camel/src/css/toc.css b/antora-ui-camel/src/css/toc.css index f4c37b8ca21..3b6e7b06483 100644 --- a/antora-ui-camel/src/css/toc.css +++ b/antora-ui-camel/src/css/toc.css @@ -9,7 +9,7 @@ } .toc .toc-menu h3 { - color: var(--color-ink-soft); + color: var(--color-ink-muted); font-family: var(--monospace-font-family); font-size: calc(12 / var(--rem-base) * 1rem); font-weight: 600; diff --git a/antora-ui-camel/src/js/09-home.js b/antora-ui-camel/src/js/09-home.js index b80aeb4ba68..0fb06632b8e 100644 --- a/antora-ui-camel/src/js/09-home.js +++ b/antora-ui-camel/src/js/09-home.js @@ -36,23 +36,27 @@ }) } - // Copy button on the hero CLI bar. - var copy = document.querySelector('.home-cli-copy') - if (copy) { + // Copy-to-clipboard buttons: the home page's hero CLI bar, plus any later + // page's copy button wired up via [data-copy-value] (e.g. download's CLI + // install line, post's "Copy link"). Falls back to data-command so the + // home page's existing markup keeps working with zero changes. + var copyButtons = [].slice.call(document.querySelectorAll('.home-cli-copy, [data-copy-value]')) + copyButtons.forEach(function (copy) { if (!(window.navigator && window.navigator.clipboard)) { copy.remove() - } else { - var idle = copy.textContent - var timer - copy.addEventListener('click', function () { - window.navigator.clipboard.writeText(copy.dataset.command).then(function () { - copy.textContent = 'Copied!' - clearTimeout(timer) - timer = setTimeout(function () { - copy.textContent = idle - }, COPIED_MS) - }) - }) + return } - } + var idle = copy.textContent + var timer + copy.addEventListener('click', function () { + var value = copy.dataset.copyValue || copy.dataset.command + window.navigator.clipboard.writeText(value).then(function () { + copy.textContent = 'Copied!' + clearTimeout(timer) + timer = setTimeout(function () { + copy.textContent = idle + }, COPIED_MS) + }) + }) + }) })() From 2cdd8748026460185316e7e03340bcf60b187615 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 17:50:56 -0400 Subject: [PATCH 096/209] feat(download): redesign download page with flat release rows Replace the linear markdown + shortcode table on /download/ with a bespoke layout: intro copy plus a dark CLI Launcher card (real install one-liner from camel-cli-launcher.md, copy-to-clipboard via the existing [data-copy-value] handler), a flat "Supported releases" row list per version (project, version + LTS chip, note, and every real download artifact for that release), and SBOM/Verify cards. The per-release rows preserve PGP signature and SHA512/SHA1 checksum links for every artifact (ASF release-distribution policy, not a style choice) and handle the real, uneven release-categories data that the flat design assumed away: zip vs tar.gz source labels, camel-k's 7 artifacts, camel-kafka-connector's bare external "Binaries" link, and the two-file (XML/JSON) SBOM. Each category's row group keeps its id so the existing /download/#camel-k inbound link still resolves. New layouts/download/list.html and layouts/partials/download/rows.html fork the version-selection logic already in layouts/partials/releases/downloads.html rather than modifying it, since that shared partial (and its shortcode) is still used unchanged by the release-note detail pages, a different, undesigned screen. Uses the shared .page-hero-title, .section-label, .lts-chip, .card and .card--flat primitives from components.css; only page-owned layout lives in download.css. Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/download.css | 269 +++++++++++++++++++++++++-- antora-ui-camel/src/css/security.css | 210 +++++++++++++++++++++ content/download/_index.md | 22 +-- content/security/_index.md | 71 +++---- layouts/download/list.html | 47 +++++ layouts/partials/download/rows.html | 159 ++++++++++++++++ layouts/security/list.html | 56 ++++-- 7 files changed, 746 insertions(+), 88 deletions(-) create mode 100644 layouts/download/list.html create mode 100644 layouts/partials/download/rows.html diff --git a/antora-ui-camel/src/css/download.css b/antora-ui-camel/src/css/download.css index b69ac856b3e..dae2d445a84 100644 --- a/antora-ui-camel/src/css/download.css +++ b/antora-ui-camel/src/css/download.css @@ -1,25 +1,266 @@ -.download thead tr th { - text-align: left; +/* Download page (content/download, layouts/download/list.html). + H1 uses the shared .page-hero-title primitive (components.css); the + "Supported releases" heading uses the shared .section-label primitive; the + LTS chip uses the shared .lts-chip primitive; the SBOM/Verify cards use the + shared .card/.card--flat primitives with only a page-scoped padding + override. Everything below is genuinely page-owned layout. */ + +.download { + width: 100%; + max-width: var(--static-max-width--desktop); + margin: 0 auto; + padding: calc(56 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem) calc(40 / var(--rem-base) * 1rem); +} + +/* hero: intro copy + CLI launcher card */ + +.download-hero { + display: grid; + grid-template-columns: 1fr calc(380 / var(--rem-base) * 1rem); + gap: calc(56 / var(--rem-base) * 1rem); + align-items: start; +} + +.download-intro p { + font-size: calc(16.5 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-ink-soft); + margin: calc(14 / var(--rem-base) * 1rem) 0 0; + text-wrap: pretty; +} + +.download-intro p:first-of-type { + margin-top: calc(16 / var(--rem-base) * 1rem); +} + +.download-intro strong { + color: var(--color-ink); +} + +.download-cli-card { + background: var(--color-ink); + border-radius: 16px; /* radius exemption: raw px */ + padding: calc(28 / var(--rem-base) * 1rem); + color: var(--color-on-dark); +} + +.download-cli-eyebrow { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-prompt); + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.download-cli-desc { + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.55; + color: var(--color-on-dark-soft); + margin: calc(10 / var(--rem-base) * 1rem) 0 calc(16 / var(--rem-base) * 1rem); +} + +.download-cli-bar { + display: flex; + background: var(--color-dark-3); + border: 1px solid var(--color-dark-line); + border-radius: 8px; /* radius exemption: raw px */ + overflow: hidden; } -.download tr td:first-child { +.download-cli-command { + flex: 1; + min-width: 0; + font-family: var(--monospace-font-family); + font-size: calc(12.5 / var(--rem-base) * 1rem); + color: var(--syntax-text); + padding: calc(12 / var(--rem-base) * 1rem) calc(14 / var(--rem-base) * 1rem); white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } -.download tr td:first-child strong { - font-size: 0.9rem; +.download-cli-prompt { + color: var(--color-prompt); } -.download tr td em.kind { +.download-cli-copy { + border: 0; + border-left: 1px solid var(--color-dark-line); + background: var(--color-dark-2); + color: var(--syntax-text); + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + padding: 0 calc(14 / var(--rem-base) * 1rem); + cursor: pointer; +} + +.download-cli-copy:hover { + /* matches the existing, already-shipped .home-cli-copy:hover one-off shade */ + background: #3a342c; +} + +.download-cli-guide { + display: inline-block; + margin-top: calc(14 / var(--rem-base) * 1rem); + font-size: calc(13.5 / var(--rem-base) * 1rem); + font-weight: 700; + color: var(--color-orange-glow); +} + +.download-cli-guide:hover { color: var(--color-on-dark); - background: var(--color-ink); - border-radius: 3px; - font-style: normal; - font-size: 0.75rem; - font-weight: bold; - padding: 0.1rem 0.3rem; + text-decoration: none; +} + +/* release rows */ + +.download-row { + display: grid; + grid-template-columns: calc(220 / var(--rem-base) * 1rem) calc(130 / var(--rem-base) * 1rem) 1fr auto; + gap: calc(24 / var(--rem-base) * 1rem); + align-items: center; + padding: calc(22 / var(--rem-base) * 1rem) 0; + border-bottom: 1px solid var(--color-line-soft); +} + +.download-row-project { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(17 / var(--rem-base) * 1rem); + color: var(--color-ink); +} + +.download-row-date { + font-size: calc(13 / var(--rem-base) * 1rem); + color: var(--color-ink-muted); + margin-top: calc(3 / var(--rem-base) * 1rem); +} + +.download-row-version { + display: flex; + align-items: center; + gap: calc(8 / var(--rem-base) * 1rem); +} + +.download-row-version-num { + font-family: var(--monospace-font-family); + font-size: calc(15 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink); +} + +.download-row-note { + font-size: calc(14 / var(--rem-base) * 1rem); + color: var(--color-ink-soft); } -.download .tableblock tbody tr:nth-child(2n) { - background: var(--color-paper-2); +.download-row-links { + display: flex; + flex-wrap: wrap; + align-items: baseline; + gap: calc(6 / var(--rem-base) * 1rem) calc(16 / var(--rem-base) * 1rem); + font-size: calc(13.5 / var(--rem-base) * 1rem); + font-weight: 700; +} + +.download-row-artifact { + display: inline-flex; + align-items: baseline; + gap: calc(6 / var(--rem-base) * 1rem); + white-space: nowrap; +} + +.download-row-link { + color: var(--color-ink-muted); +} + +.download-row-link:hover { + color: var(--color-camel-orange); + text-decoration: none; +} + +.download-row-link--primary { + color: var(--color-orange-deep); +} + +.download-row-link--primary:hover { + color: var(--color-camel-orange); +} + +.download-row-sub { + font-size: calc(11 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); +} + +.download-row-sub::before { + content: '('; +} + +.download-row-sub::after { + content: ')'; +} + +.download-row-sublink { + color: inherit; +} + +.download-row-sublink:hover { + color: var(--color-camel-orange); + text-decoration: none; +} + +.download-row-sublink + .download-row-sublink::before { + content: ' \00b7 '; + color: var(--color-ink-muted); +} + +/* SBOM + verify cards */ + +.download-cards { + margin-top: calc(48 / var(--rem-base) * 1rem); +} + +.download-card { + padding: calc(26 / var(--rem-base) * 1rem); +} + +.download-card h3 { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(18 / var(--rem-base) * 1rem); + margin: 0; +} + +.download-card p { + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-ink-soft); + margin: calc(10 / var(--rem-base) * 1rem) 0 0; + text-wrap: pretty; +} + +/* responsive */ + +@media screen and (width <= 1024px) { + .download-hero { + grid-template-columns: 1fr; + } + + .download { + padding: calc(40 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem) calc(48 / var(--rem-base) * 1rem); + } +} + +@media screen and (width <= 626px) { + .download-row { + grid-template-columns: 1fr; + gap: calc(8 / var(--rem-base) * 1rem); + } + + .download-row-links { + margin-top: calc(4 / var(--rem-base) * 1rem); + } } diff --git a/antora-ui-camel/src/css/security.css b/antora-ui-camel/src/css/security.css index ca4db75daf6..6c871fc9174 100644 --- a/antora-ui-camel/src/css/security.css +++ b/antora-ui-camel/src/css/security.css @@ -1,3 +1,198 @@ +/* Security page (content/security, layouts/security/list.html). + H1/lead use the shared .page-hero-title/.page-hero-lead primitives; the + "Security advisories" heading uses .section-label; the three light cards + use .card/.card--lg/.card--flat with only page-scoped header/eyebrow + typography; the severity chip uses the shared .severity-chip color + mapping with page-scoped sizing (components.css deliberately leaves + size/padding local per consumer). The dark "Reporting" band is NOT a + .card variant -- see .superpowers/sdd/4b/00-primitives.md section 1.9: a + horizontal, wrapping layout is a genuinely different shape from the card + system, not a --dark modifier of it. */ + +.security { + width: 100%; + max-width: var(--static-max-width--desktop); + margin: 0 auto; + padding: calc(56 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem) calc(40 / var(--rem-base) * 1rem); +} + +.security-hero { + max-width: calc(760 / var(--rem-base) * 1rem); +} + +.security-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: calc(18 / var(--rem-base) * 1rem); + margin-top: calc(40 / var(--rem-base) * 1rem); +} + +.security-card--feature { + grid-column: 1 / -1; +} + +.security-card--feature h2 { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(26 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + margin: calc(10 / var(--rem-base) * 1rem) 0 0; +} + +.security-card--feature p { + font-size: calc(15.5 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-ink-soft); + margin: calc(12 / var(--rem-base) * 1rem) 0 0; + max-width: calc(820 / var(--rem-base) * 1rem); +} + +.security-eyebrow { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-orange-deep); + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.security-card { + padding: calc(26 / var(--rem-base) * 1rem); +} + +.security-card h3 { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(18 / var(--rem-base) * 1rem); + margin: 0; +} + +.security-card p { + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-ink-soft); + margin: calc(10 / var(--rem-base) * 1rem) 0 0; +} + +/* dark "reporting" band */ + +.security-band { + grid-column: 1 / -1; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: calc(24 / var(--rem-base) * 1rem); + background: var(--color-ink); + border-radius: 16px; /* radius exemption: raw px */ + padding: calc(32 / var(--rem-base) * 1rem); + color: var(--color-on-dark); +} + +.security-band-copy { + flex: 1; + min-width: calc(300 / var(--rem-base) * 1rem); +} + +.security-band-copy h2 { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(24 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + margin: 0; +} + +.security-band-copy p { + font-size: calc(15 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-on-dark-soft); + margin: calc(10 / var(--rem-base) * 1rem) 0 0; + max-width: calc(640 / var(--rem-base) * 1rem); +} + +.security-band .button { + white-space: nowrap; +} + +/* advisories table */ + +.security-advisories { + width: 100%; + font-size: calc(14 / var(--rem-base) * 1rem); + border-collapse: collapse; +} + +.security-advisories thead tr { + font-family: var(--monospace-font-family); + font-size: calc(11.5 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + text-transform: uppercase; + letter-spacing: 0.06em; + text-align: left; +} + +.security-advisories thead th { + padding: calc(14 / var(--rem-base) * 1rem) calc(12 / var(--rem-base) * 1rem) calc(10 / var(--rem-base) * 1rem); +} + +.security-advisories thead th:first-child { + padding-left: 0; +} + +.security-advisories thead th:last-child { + padding-right: 0; +} + +.security-advisories tbody th { + text-align: left; + padding: calc(26 / var(--rem-base) * 1rem) 0 calc(8 / var(--rem-base) * 1rem); + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(22 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + color: var(--color-ink); +} + +.security-advisories .security-row { + border-top: 1px solid var(--color-line-soft); +} + +.security-advisories td { + padding: calc(12 / var(--rem-base) * 1rem); + color: var(--color-ink-soft); +} + +.security-advisories td:first-child { + padding-left: 0; + font-family: var(--monospace-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + color: var(--body-font-color); +} + +.security-advisories td:first-child a { + font-weight: 600; + color: var(--link-font-color); +} + +.security-advisories td:first-child a:hover { + color: var(--link_hover-font-color); + text-decoration: none; +} + +.security-advisories td:last-child { + padding-right: 0; + line-height: 1.5; +} + +.security-severity { + font-size: calc(11.5 / var(--rem-base) * 1rem); + padding: calc(3 / var(--rem-base) * 1rem) calc(8 / var(--rem-base) * 1rem); +} + +.security .table-wrapper { + overflow-x: auto; +} + .security td:only-child { text-align: center; } @@ -5,3 +200,18 @@ .security td:first-child { white-space: nowrap; } + +/* responsive */ + +@media screen and (width <= 1024px) { + .security-grid { + grid-template-columns: 1fr; + } +} + +@media screen and (width <= 626px) { + .security-band { + flex-direction: column; + align-items: stretch; + } +} diff --git a/content/download/_index.md b/content/download/_index.md index d39b16bdd42..51af4a8f312 100644 --- a/content/download/_index.md +++ b/content/download/_index.md @@ -1,5 +1,8 @@ --- title: "Downloads" +cli_command: "curl -fsSL https://camel.apache.org/install.sh | sh" +sbom_card_body: "Every release since 4.0.3 includes PGP-signed CycloneDX SBOMs (JSON and XML) listed alongside the source download above. Feed them into tools like [OWASP Dependency-Track](https://dependencytrack.org/) for automated vulnerability scanning, or see [Generating SBOMs](/manual/sbom.html) for your own application." +verify_card_body: "You can verify your download by following these [procedures](http://www.apache.org/info/verification.html) and using these [KEYS](https://www.apache.org/dist/camel/KEYS)." --- We do frequent releases, a release almost every month, and even though we strive to maintain backward compatibility, we may on occasion introduce a breaking change in the interest of the long-term evolution of the project. We document backward compatibility breaking changes in the [Migration and Upgrade](/manual/migration-and-upgrade.html) section of the user manual. @@ -13,22 +16,3 @@ For information on the release planning look at the blog posts in the [Roadmap]( Here you will only find the supported releases, older unsupported releases can be found in the [Releases archive](/releases/). **Note:** Apache Camel Spring Boot is released together with Apache Camel (core) and uses the same version number. - -{{< downloads >}} - -## SBOMs - -Every release since 4.0.3 includes PGP-signed CycloneDX SBOMs (JSON and XML) listed alongside the source -download above. These machine-readable inventories list every dependency in the release and can be fed into -tools like [OWASP Dependency-Track](https://dependencytrack.org/) for automated vulnerability scanning. -To generate an SBOM for your own Camel application, see the [Generating SBOMs](/manual/sbom.html) guide. - -## Camel CLI Launcher - -You can install the [Camel CLI Launcher](/download/camel-cli-launcher/) on a -single machine with a one-line command, without a package manager. See the -[installation guide](/download/camel-cli-launcher/) for details. - -## Keys - -You can verify your download by following these [procedures](http://www.apache.org/info/verification.html) and using these [KEYS](https://www.apache.org/dist/camel/KEYS). diff --git a/content/security/_index.md b/content/security/_index.md index f1e45d58e69..ba5d88fd50b 100644 --- a/content/security/_index.md +++ b/content/security/_index.md @@ -1,45 +1,32 @@ --- title: "Security" +lead: "Apache Camel security information." +read_first: + eyebrow: "Read first" + title: "Security model and report scope" + body: | + Before reporting, please read the **[Apache Camel Security Model](/manual/security-model.html)**. + + It is the canonical reference the Apache Camel PMC uses when triaging security reports. It documents who is trusted, where the trust boundaries sit, which vulnerability classes are accepted as framework vulnerabilities, and which categories are out of scope — route-author or operator responsibility, explicit opt-ins, denial of service through unthrottled routes, third-party transitive CVEs not reachable through Camel code, management surfaces placed on an untrusted network, and automated-scanner output with no proof of concept. Reports that fall outside the documented scope are closed with a reference to that page. + + The Camel subprojects — Camel Quarkus, Camel Spring Boot, Camel Karaf, Camel Kamelets, Camel Kafka Connector and Camel K — inherit the same trust model; report scope for them is governed by the same document unless a subproject publishes its own security model. +sbom: + title: "Software Bill of Materials (SBOM)" + body: | + Every Camel release since 4.0.3 ships with PGP-signed CycloneDX SBOMs that list all dependencies, enabling supply chain risk analysis alongside the CVE advisories below. + See [Generating SBOMs](/manual/sbom.html) for details. +policy_enforcement: + title: "Security Policy Enforcement" + body: | + Camel includes built-in Security Policy Enforcement that validates security-sensitive configuration during startup and can prevent insecure configurations from reaching production. + + See [Security Policy Enforcement](/manual/security-policy.html) for configuration details. +reporting: + title: "Reporting new security problems with Apache Camel" + body: | + The Apache Software Foundation takes a very active stance in eliminating security problems. + + We strongly encourage folks to report such problems to the private security mailing list of the ASF Security Team, before disclosing them in a public forum. + cta_label: "ASF Security Team" + cta_url: "https://www.apache.org/security/" --- - -# Apache Camel security information - -## Security model and report scope - -Before reporting, please read the **[Apache Camel Security Model](/manual/security-model.html)**. - -It is the canonical reference the Apache Camel PMC uses when triaging security reports. It -documents who is trusted, where the trust boundaries sit, which vulnerability classes are -accepted as framework vulnerabilities, and which categories are out of scope — route-author or -operator responsibility, explicit opt-ins, denial of service through unthrottled routes, -third-party transitive CVEs not reachable through Camel code, management surfaces placed on an -untrusted network, and automated-scanner output with no proof of concept. Reports that fall -outside the documented scope are closed with a reference to that page. - -The Camel subprojects — Camel Quarkus, Camel Spring Boot, Camel Karaf, Camel Kamelets, Camel -Kafka Connector and Camel K — inherit the same trust model; report scope for them is governed -by the same document unless a subproject publishes its own security model. - -## Software Bill of Materials (SBOM) - -Every Camel release since 4.0.3 ships with PGP-signed CycloneDX SBOMs that list all dependencies, -enabling supply chain risk analysis alongside the CVE advisories below. -See [Generating SBOMs](/manual/sbom.html) for details. - -## Security Policy Enforcement - -Camel includes built-in Security Policy Enforcement that validates security-sensitive configuration -during startup and can prevent insecure configurations from reaching production. - -See [Security Policy Enforcement](/manual/security-policy.html) for configuration details. - -## Reporting new security problems with Apache Camel - -The Apache Software Foundation takes a very active stance in eliminating security problems. - -We strongly encourage folks to report such problems to the private security mailing list of the ASF Security Team, before disclosing them in a public forum. - -Please see the [page of the ASF Security Team](https://www.apache.org/security/) for further information and contact information. - -## Security advisories - diff --git a/layouts/download/list.html b/layouts/download/list.html new file mode 100644 index 00000000000..8c02ff4ce70 --- /dev/null +++ b/layouts/download/list.html @@ -0,0 +1,47 @@ +{{ partial "header.html" . }} + +
    +
    +
    + +
    +
    +

    {{ .Title }}

    + {{ .Content }} +
    + +
    +
    Camel CLI Launcher
    +

    Install on a single machine with a one-line command, without a package manager.

    + {{ with .Params.cli_command }} +
    + $ {{ . }} + +
    + {{ end }} + Installation guide → +
    +
    + + + + {{ range sort (index site.Data "release-categories") "order" }} + {{ partial "download/rows.html" (dict "Category" . "Pages" site.Pages) }} + {{ end }} + +
    +
    +

    SBOMs

    +

    {{ .Params.sbom_card_body | markdownify }}

    +
    +
    +

    Verify your download

    +

    {{ .Params.verify_card_body | markdownify }}

    +
    +
    + +
    +
    +
    + +{{ partial "footer.html" . }} diff --git a/layouts/partials/download/rows.html b/layouts/partials/download/rows.html new file mode 100644 index 00000000000..4dad0f0b44f --- /dev/null +++ b/layouts/partials/download/rows.html @@ -0,0 +1,159 @@ +{{/* + Renders the "Supported releases" flat row list for a single release category + on the /download/ page. + + This is a deliberate FORK of layouts/partials/releases/downloads.html's + version-selection algorithm, not a call into it: that shared partial is still + used, unmodified, by the per-release "single" page templates + (layouts/partials/releases/camel.html and friends) to render a table on the + release-note detail page, a screen this piece does not touch. Forking here + keeps that screen's behavior byte-for-byte unchanged while letting this + screen emit a completely different row shape (flat rows, no , no + rowspan) around the same underlying data. + + Params: Category (a value from site.Data.release-categories), Pages (site.Pages) +*/}} +{{ $category := .Category }} +{{ $pages := .Pages }} + +{{ $sha1_cutoff := time "2018-11-10" }} +{{ $sbom_cutoff := time "2023-11-14" }} +{{ $artifact_base_url := "https://www.apache.org/dyn/closer.lua/" }} +{{ $meta_base_url := "https://downloads.apache.org/" }} + +{{ $versions := slice }} +{{ $category_releases := where (where $pages "Section" "releases") ".Params.category" $category.id }} + +{{ range $kind := $category.kinds }} + {{ if eq $kind.filter "latest" }} + {{ $released_versions := partial "releases/version_sort.html" $category_releases }} + {{ $version := (index $released_versions 0).Param "version" }} + {{ $versions = $versions | append (dict $kind.name $version) }} + {{ else }} + {{ $released_versions := partial "releases/version_sort.html" $category_releases }} + {{ if $kind.last }} + {{ $last_major_minor := "" }} + {{ $no_last := 0 }} + {{ range $release := where $released_versions ".Params.kind" $kind.filter }} + {{ $version := $release.Param "version" }} + {{ $major_minor := replaceRE "\\.\\d+$" "" $version }} + {{ if (and (ne $last_major_minor $major_minor) (lt $no_last $kind.last)) }} + {{ $versions = $versions | append (dict $kind.name $version) }} + {{ $no_last = $no_last | add 1 }} + {{ end }} + {{ $last_major_minor = $major_minor }} + {{ end }} + {{ else }} + {{ $version := (index (where $released_versions ".Params.kind" $kind.filter) 0).Param "version" }} + {{ $versions = $versions | append (dict $kind.name $version) }} + {{ end }} + {{ end }} +{{ end }} + +{{/* same version can be matched by two kinds (e.g. latest is also the newest LTS); merge */}} +{{ $versions_grouped := slice }} +{{ range $version1 := $versions }} + {{ $groupped := false }} + {{ range $k1, $v1 := $version1 }} + {{ range $version2 := $versions }} + {{ range $k2, $v2 := $version2 }} + {{ if and (eq $v1 $v2) (ne $k1 $k2) }} + {{ $groupped = true }} + {{ $kind := printf "%s, %s" $k1 $k2 }} + {{ $contained := false }} + {{ range $g := $versions_grouped }} + {{ range $x, $v := $g }} + {{ if eq $v $v1 }} + {{ $contained = true }} + {{ end }} + {{ end }} + {{ end }} + {{ if not $contained }} + {{ $versions_grouped = $versions_grouped | append (dict $kind $v1) }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} + {{ if not $groupped }} + {{ $versions_grouped = $versions_grouped | append $version1 }} + {{ end }} +{{ end }} +{{ $versions = $versions_grouped }} + +{{/* wrapping id preserves the pre-existing per-category anchor (e.g. /download/#camel-k) */}} +
    + {{ range $version := $versions }} + {{ range $kind, $v := $version }} + {{ $release_note := index (where (where (where $pages "Section" "releases") ".Params.category" $category.id) ".Params.version" $v) 0 }} + {{ $hash_extension := ".sha512" }} + {{ if le $release_note.Date $sha1_cutoff }} + {{ $hash_extension = ".sha1" }} + {{ end }} + + {{ $downloads := $category.downloads }} + {{ if lt $release_note.Date $sbom_cutoff }} + {{ $downloads = collections.Where $downloads "name" "not in" "SBOM, CycloneDX XML" }} + {{ $downloads = collections.Where $downloads "name" "not in" "SBOM, CycloneDX JSON" }} + {{ $downloads = collections.Where $downloads "name" "not in" "SBOM" }} + {{ end }} + + {{ $is_lts := in $kind "LTS" }} + + {{ $note := "" }} + {{ with $release_note.Params.jdk }} + {{ $note = printf "Supports Java %s" (delimit . ", " " and ") }} + {{ end }} + {{ with $release_note.Params.eol }} + {{ $note = print $note (printf ", end of life %s" (dateFormat "Jan 2006" .)) }} + {{ end }} + +
    +
    +
    {{ $category.name }}
    +
    {{ ($release_note.Param "date").Format "Jan 2006" }}
    +
    +
    + {{ $v }} + {{ if $is_lts }}LTS{{ end }} +
    +
    {{ $note }}
    + +
    + {{ end }} + {{ end }} +
    diff --git a/layouts/security/list.html b/layouts/security/list.html index e82dc8dcfa3..47728210b61 100644 --- a/layouts/security/list.html +++ b/layouts/security/list.html @@ -2,19 +2,49 @@
    -
    +
    - {{ .Content }} +
    +

    {{ .Title }}

    +

    {{ .Params.lead }}

    +
    + +
    +
    +
    {{ .Params.read_first.eyebrow }}
    +

    {{ .Params.read_first.title }}

    + {{ .Params.read_first.body | markdownify }} +
    + +
    +

    {{ .Params.sbom.title }}

    + {{ .Params.sbom.body | markdownify }} +
    + +
    +

    {{ .Params.policy_enforcement.title }}

    + {{ .Params.policy_enforcement.body | markdownify }} +
    + +
    +
    +

    {{ .Params.reporting.title }}

    + {{ .Params.reporting.body | markdownify }} +
    + {{ .Params.reporting.cta_label }} → +
    +
    + +
    -
    - +
    Security advisories by year
    - - - - - + + + + + @@ -32,14 +62,14 @@ {{ range $pages }} {{ if eq $year (int .Key) }} - + {{ range .Pages }} - + - + {{ end }} @@ -47,7 +77,7 @@ {{ end }} {{ else }} - + From 6c06e4ee1f5b0cf74f04a0a4c6f311e0eefdc003 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 17:59:14 -0400 Subject: [PATCH 097/209] feat(docs,community): redesign the documentation index and community pages Replace the shortcode-driven /docs/ and /community/ content with the data-file + layout pattern already used by /projects/: new layouts/docs/list.html + data/docs-projects.yaml (hero, dark User Manual and light Component Reference feature cards, then a 3-col grid of 9 project cards with gated Documentation/Source/Examples links), and new layouts/community/list.html + data/community.yaml (7 channel cards plus a dark "Talk to us" CTA card spanning two grid columns). Both screens are built entirely on the shared primitives already shipped in primitives.css (.page-hero-title/.page-hero-lead, .card, .card-grid, .card-grid--feature/--3, .section-label) and the existing a.button.* variants and color tokens (--color-prompt, --color-button-on-dark-border) - no new tokens or primitives introduced. docs.css now carries both screens' page-specific layout, replacing the old shared, now-dead `.docs, .community` flex/80%-width rule left over from the generic _default/section.html wrapper. Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/docs.css | 246 ++++++++++++++++++++++++++++++- content/community/_index.md | 146 ++---------------- content/docs/_index.md | 233 ++--------------------------- data/community.yaml | 60 ++++++++ data/docs-projects.yaml | 108 ++++++++++++++ layouts/community/list.html | 41 ++++++ layouts/docs/list.html | 59 ++++++++ 7 files changed, 531 insertions(+), 362 deletions(-) create mode 100644 data/community.yaml create mode 100644 data/docs-projects.yaml create mode 100644 layouts/community/list.html create mode 100644 layouts/docs/list.html diff --git a/antora-ui-camel/src/css/docs.css b/antora-ui-camel/src/css/docs.css index 75ec71275af..d2421e0455a 100644 --- a/antora-ui-camel/src/css/docs.css +++ b/antora-ui-camel/src/css/docs.css @@ -1,15 +1,251 @@ +/* Documentation index (/docs/, layouts/docs/list.html, data/docs-projects.yaml) + and Community (/community/, layouts/community/list.html, data/community.yaml). + Both are card-grid-over-a-page-header screens; grouped in one file per the + piece-4b build plan. Page shell, hero typography, card shell/hover, and the + "By runtime and project" eyebrow all come from the shared primitives in + primitives.css (.page-hero-title, .page-hero-lead, .card, .card-grid, + .section-label) - only page-specific layout lives here. */ + +/* ---- shared page shell ------------------------------------------------- */ + .docs, .community { - padding: 1rem 3rem 2rem; + width: 100%; + max-width: var(--static-max-width--desktop); + margin: 0 auto; + padding: calc(56 / var(--rem-base) * 1rem) var(--page-padding-x) calc(40 / var(--rem-base) * 1rem); +} + +.docs-hero, +.community-hero { + max-width: calc(760 / var(--rem-base) * 1rem); +} + +/* ---- docs: feature-card pair ------------------------------------------- */ + +.docs-features { + margin-top: calc(40 / var(--rem-base) * 1rem); +} + +.docs-feature-eyebrow { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.docs-feature--dark .docs-feature-eyebrow { + color: var(--color-prompt); +} + +.docs-feature--light .docs-feature-eyebrow { + color: var(--color-orange-deep); +} + +.docs-feature-title { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(30 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + margin: calc(12 / var(--rem-base) * 1rem) 0 0; +} + +.docs-feature--light .docs-feature-title { + color: var(--color-ink); +} + +.docs-feature-desc { + font-size: calc(15.5 / var(--rem-base) * 1rem); + line-height: 1.6; + margin: calc(12 / var(--rem-base) * 1rem) 0 calc(26 / var(--rem-base) * 1rem); + flex: 1; + text-wrap: pretty; +} + +.docs-feature--dark .docs-feature-desc { + color: var(--color-on-dark-soft); +} + +.docs-feature--light .docs-feature-desc { + color: var(--color-ink-soft); +} + +.docs-feature-actions { + display: flex; + flex-wrap: wrap; + gap: calc(10 / var(--rem-base) * 1rem); + margin: 0; +} + +.docs-feature-actions .button { + margin: 0; + padding: calc(11 / var(--rem-base) * 1rem) calc(20 / var(--rem-base) * 1rem); + font-size: calc(14.5 / var(--rem-base) * 1rem); +} + +/* ---- docs: project grid ------------------------------------------------- */ + +.docs-projects { + margin-top: calc(20 / var(--rem-base) * 1rem); +} + +.docs-project-card-head { + display: flex; + align-items: center; + gap: calc(12 / var(--rem-base) * 1rem); +} + +.docs-project-card-icon { + width: calc(30 / var(--rem-base) * 1rem); + height: calc(30 / var(--rem-base) * 1rem); + display: block; + flex: none; + object-fit: contain; +} + +.docs-project-card-title { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(18 / var(--rem-base) * 1rem); + margin: 0; + color: var(--color-ink); +} + +.docs-project-card-desc { + font-size: calc(14 / var(--rem-base) * 1rem); + line-height: 1.55; + color: var(--color-ink-soft); + margin: calc(12 / var(--rem-base) * 1rem) 0 calc(18 / var(--rem-base) * 1rem); + flex: 1; + text-wrap: pretty; +} + +.docs-project-card-links { + display: flex; + flex-wrap: wrap; + gap: calc(14 / var(--rem-base) * 1rem); + font-size: calc(13.5 / var(--rem-base) * 1rem); + font-weight: 700; +} + +.docs-project-card-link { + color: var(--link-font-color); +} + +.docs-project-card-link:hover { + color: var(--link_hover-font-color); + text-decoration: none; +} + +.docs-project-card-link--muted { + color: var(--color-ink-muted); +} + +/* ---- community: card grid ---------------------------------------------- */ + +.community-grid { + margin-top: calc(40 / var(--rem-base) * 1rem); +} + +.community-card-tag { + display: flex; + align-items: center; + justify-content: center; + width: calc(38 / var(--rem-base) * 1rem); + height: calc(38 / var(--rem-base) * 1rem); + border-radius: 9px; /* radius exemption: raw px */ + background: var(--color-orange-tint); + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(15 / var(--rem-base) * 1rem); + color: var(--link-font-color); +} + +.community-card-title { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(19 / var(--rem-base) * 1rem); + margin: calc(16 / var(--rem-base) * 1rem) 0 0; + color: var(--color-ink); +} + +.community-card-body { + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.55; + color: var(--color-ink-soft); + margin: calc(9 / var(--rem-base) * 1rem) 0 calc(18 / var(--rem-base) * 1rem); + flex: 1; + text-wrap: pretty; +} + +.community-card-link { + color: var(--link-font-color); + font-weight: 700; + font-size: calc(13.5 / var(--rem-base) * 1rem); +} + +.community-card-link:hover { + color: var(--link_hover-font-color); + text-decoration: none; +} + +/* ---- community: "Talk to us" dark CTA card ----------------------------- */ + +.community-cta { + grid-column: span 2; +} + +.community-cta-eyebrow { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--color-prompt); +} + +.community-cta-title { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(24 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + margin: calc(12 / var(--rem-base) * 1rem) 0 0; +} + +.community-cta-body { + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.55; + color: var(--color-on-dark-soft); + margin: calc(10 / var(--rem-base) * 1rem) 0 calc(20 / var(--rem-base) * 1rem); + flex: 1; + max-width: calc(560 / var(--rem-base) * 1rem); +} + +.community-cta-actions { display: flex; - width: 80%; - flex-direction: column; + flex-wrap: wrap; + gap: calc(10 / var(--rem-base) * 1rem); + margin: 0; +} + +.community-cta-actions .button { + margin: 0; + padding: calc(10 / var(--rem-base) * 1rem) calc(18 / var(--rem-base) * 1rem); + font-size: calc(14 / var(--rem-base) * 1rem); } +/* ---- responsive: 1024px / 626px (no new breakpoints) ------------------- */ + @media screen and (width <= 1024px) { .docs, .community { - padding: 0 1rem 4rem; - width: 100%; + padding: calc(32 / var(--rem-base) * 1rem) calc(20 / var(--rem-base) * 1rem) calc(48 / var(--rem-base) * 1rem); + } +} + +@media screen and (width <= 626px) { + .community-cta { + grid-column: span 1; } } diff --git a/content/community/_index.md b/content/community/_index.md index 39e9ddf5541..5776fe7b6f7 100644 --- a/content/community/_index.md +++ b/content/community/_index.md @@ -1,139 +1,11 @@ --- -Title: "Community" +title: "Community" +description: Get help, share what you've built, and help make Apache Camel better. +layout: list +keywords: +- apache camel +- community +- support +- mailing list +- contributing --- - -{{< div "box" >}} - -{{< icon "support" "Question bubble" >}} - -{{< div "content" >}} - -## Support - -If you are experiencing problems using Camel, there are several channels available to seek help from the community. -

    -Read More -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box" >}} - -{{< icon "support" "Question bubble" >}} - -{{< div "content" >}} - -## Mailing List - -One way to get help is to use the Camel mailing lists. This allows the entire community to help with your problem. - -When posting to the mailing lists, please use plain text mails. -Do not use HTML mails. - -

    -Read More -

    - -{{< /div >}} - -{{< /div >}} - - -{{< div "box" >}} - -{{< icon "contributing" "Git fork" >}} - -{{< div "content" >}} - -## Contributing - -There are many ways you can help make Camel better. -Please dive in and help! -Identify areas you can contribute first. -You don’t have to be an expert in an area, the Apache Camel developers are available to offer help and guidance. - -

    -Read More -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box" >}} - -{{< icon "user-stories" "Person talking" >}} - -{{< div "content" >}} - -## Who Uses Apache Camel - -Over 100 companies use Apache Camel in production — from UPS and CERN to SAP and Korean Air. -Commercial products from Red Hat, SAP, Huawei, Talend, and others are built on Apache Camel. - -

    -Read More -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box" >}} - -{{< icon "articles" "Article" >}} - -{{< div "content" >}} - -## Articles - -Articles are divided into several sections. As the lists grow, further sectioning refinements may be necessary. The article section includes camel videos and general articles and other categories. - -

    -Read More -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box" >}} - -{{< icon "books" "Books" >}} - -{{< div "content" >}} - -## Books - -This page lists the known books about Apache Camel. -If you happen to know a book which is not listed, then please contact us. - -

    -Read More -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box" >}} - -{{< icon "team" "People" >}} - -{{< div "content" >}} - -## Team - -This page lists who we are. -By all means add yourself to the list. -Let's sort it in alphabetical order. - -

    -Read More -

    - -{{< /div >}} - -{{< /div >}} diff --git a/content/docs/_index.md b/content/docs/_index.md index 01f5d71f3a8..233ed9908e6 100644 --- a/content/docs/_index.md +++ b/content/docs/_index.md @@ -1,222 +1,15 @@ --- -Title: "Documentation" +title: "Documentation" +description: Apache Camel documentation - the User Manual, Component + Reference, and per-runtime docs for Camel K, Camel Quarkus, Camel Spring + Boot, Camel Kafka Connector, Camel Karaf, and more. +layout: list +keywords: +- apache camel +- documentation +- user manual +- component reference +- camel k +- camel quarkus +- camel spring boot --- -{{< div "box left" >}} - -{{< icon "logo-d" "Apache Camel logo" >}} - -{{< div "content" >}} - -## Camel Core - - -The foundation for all other projects. Ideal for experienced Java developers or architects willing to innovate and build upon a lower level integration framework. - -The [User Manual](/manual/) is a comprehensive guide meant to help you with the key concepts of Apache Camel and software integration. -For instance, you can find information such as how to [get started](/manual/getting-started.html) with Apache Camel, how to [upgrade to Camel 4.x](/manual/camel-4x-upgrade-guide.html), information about Apache Camel [architecture](/manual/architecture.html), [integration patterns](/components/latest/eips/enterprise-integration-patterns.html) and more. - -

    -Documentation -Old Documentation -Source -Examples -

    - - -Camel is comes with several hundred components that can be used to access databases, message queues, and APIs. -The [Component reference](/components/latest/) provides you information about the functionality and configuration of each component. - -

    -Component Reference -API Documentation -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box right" >}} - -{{< div "content">}} - -## Camel K - -Apache Camel K is a lightweight integration framework built on Apache Camel -that runs natively on [Kubernetes](https://kubernetes.io/) -and is specifically designed for serverless and microservice architectures. -It allows you to run integration code written in Camel DSL on your cloud. - -

    -Documentation -Source -Examples -

    - -{{< /div >}} - -{{< icon "logo-d" "Apache Camel logo" "kubernetes" "Kubernetes logo" >}} - -{{< /div >}} - -{{< div "box left" >}} - -{{< icon "logo-d" "Apache Camel logo" "apache-kafka" "Apache Kafka logo" >}} - -{{< div "content">}} - -## Camel Kafka Connector - -Camel Kafka Connector allows you to use all [Camel components](/components/latest/) as [Kafka Connect](http://kafka.apache.org/documentation/#connect) connectors, which, as a result, expands Kafka Connect compatibility by allowing Camel components to be used in the Kafka ecosystem. - -

    -Documentation -Source -Examples -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box right" >}} - -{{< div "content">}} - -## Camel Quarkus - -This project hosts the efforts to port and package most of the Camel components as Quarkus extensions. [Quarkus](https://quarkus.io/) is a Java platform offering fast boot times and low memory footprint. It targets both stock JVMs and the GraalVM. - -

    -Documentation -Source -Examples -

    - -{{< /div >}} - -{{< icon "logo-d" "Apache Camel logo" "quarkus" "Quarkus logo" >}} - -{{< /div >}} - -{{< div "box left" >}} - -{{< icon "logo-d" "Apache Camel logo" "spring-boot" "Spring Boot logo" >}} - -{{< div "content">}} - -## Camel Spring Boot - -Camel support for Spring Boot provides many features for Spring Boot users. -Including autoconfiguration of the Camel context by auto-detecting Camel routes available in the Spring context and registers the key Camel utilities as beans. -It also provides starters for the Camel components. - -

    -Documentation -Source -Examples -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box right" >}} - -{{< div "content">}} - -## Camel Karaf - -[Apache Karaf](https://karaf.apache.org/) makes running Apache Camel in the Karaf [OSGi](https://www.osgi.org/) container. - -

    -Documentation -Source -

    - -{{< /div >}} - -{{< icon "logo-d" "Apache Camel logo" "apache-karaf" "Apache Karaf logo" >}} - -{{< /div >}} - -{{< div "box left" >}} - -{{< icon "logo-d" "Apache Camel logo" "karavan" "Karavan logo" >}} - -{{< div "content">}} - -## Camel Karavan - -An Integration Toolkit aimed to increase developer performance through a graphical user interface to design and configure routes (EIP and REST) using Kamelets and Components, integration with runtimes and package, image build and deploy to Kubernetes out-of-the-box. - -Being deployed in Kubernetes, Karavan helps to manage projects, design and monitor integrations, Tekton pipeline to build and deploy integrations. - -[Karavan VS Code Extension](https://marketplace.visualstudio.com/items?itemName=camel-karavan.karavan) is integrated with [Camel CLI](/manual/camel-jbang.html) runtime for fast local development cycles. - -

    - -Source -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box right" >}} - -{{< div "content">}} - -## Camel CLI - -The Camel CLI, powered by [JBang](https://www.jbang.dev/), lets you easily install and get started with Apache Camel -in only a few minutes. Camel CLI is excellent for no-code/low-code use-cases and -when you need to quickly build a prototype with Camel. - -

    -Documentation -Source -Examples -

    - -{{< /div >}} - -{{< icon "logo-d" "Apache Camel logo" "cli" "CLI icon" >}} - -{{< /div >}} - -{{< div "box left" >}} - -{{< icon "logo-d" "Apache Camel logo" >}} - -{{< div "content">}} - -## Tooling - -Apache Camel has a rich ecosystem of developer tooling — IDE plugins, visual editors, AI-assisted development tools, Maven plugins, and monitoring solutions. - -

    -Tooling -

    - -{{< /div >}} - -{{< /div >}} - -{{< div "box right" >}} - -{{< icon "logo-d" "Apache Camel logo" >}} - -{{< div "content">}} - -## Kamelets - -Apache Camel now leverages a catalog of connectors called "Kamelets" (_Kamel_ route snipp-_ets_) that allow creating sources or sinks towards external systems via a -simplified interface, hiding all the low level details about how those connections are implemented. - -

    -Kamelet Catalog -

    - -{{< /div >}} - -{{< /div >}} diff --git a/data/community.yaml b/data/community.yaml new file mode 100644 index 00000000000..f22a1f2b9f3 --- /dev/null +++ b/data/community.yaml @@ -0,0 +1,60 @@ +# Community (/community/) - drives layouts/community/list.html + +lead: >- + Camel is your project. Get help, share what you've built, and help make + Camel better. + +cards: + - tag: "?" + title: Support + body: >- + If you are experiencing problems using Camel, there are several + channels available to seek help from the community. + url: /community/support/ + - tag: "@" + title: Mailing List + body: >- + One way to get help is to use the Camel mailing lists. This allows + the entire community to help with your problem. + url: /community/mailing-list/ + - tag: PR + title: Contributing + body: >- + There are many ways you can help make Camel better. You don't have to + be an expert; the Apache Camel developers are available to offer help + and guidance. + url: /community/contributing/ + - tag: 100+ + title: Who Uses Apache Camel + body: >- + Over 100 companies use Apache Camel in production, from UPS and CERN + to SAP and Korean Air. Commercial products from Red Hat, SAP, Huawei, + Talend, and others are built on Apache Camel. + url: /community/user-stories/ + - tag: A + title: Articles + body: >- + Articles are divided into several sections, including Camel videos, + general articles, and other categories. + url: /community/articles/ + - tag: B + title: Books + body: >- + The known books about Apache Camel. If you happen to know a book + which is not listed, please contact us. + url: /community/books/ + - tag: T + title: Team + body: "Who we are. By all means add yourself to the list, in alphabetical order." + url: /community/team/ + +cta: + eyebrow: Talk to us + title: Zulip chat, mailing lists, and GitHub + body: >- + Everything is fully open. When posting to the mailing lists, please use + plain text mails. + zulip_url: https://camel.zulipchat.com/ + zulip_label: Join Zulip + mail: users@camel.apache.org + github_url: https://github.com/apache/camel/ diff --git a/data/docs-projects.yaml b/data/docs-projects.yaml new file mode 100644 index 00000000000..e34fd20822a --- /dev/null +++ b/data/docs-projects.yaml @@ -0,0 +1,108 @@ +# Documentation index (/docs/) - drives layouts/docs/list.html +# Icons resolve through the Antora UI rev-manifest: antora-ui-camel/src/img/.svg + +lead: >- + Start with the User Manual and Component Reference, then pick the runtime + that matches how you deploy. + +manual: + eyebrow: Start here + title: User Manual + desc: >- + A comprehensive guide to the key concepts of Apache Camel and software + integration: getting started, upgrading to Camel 4.x, architecture, and + integration patterns. + primary_cta: + label: Getting started + url: /manual/getting-started.html + secondary_cta: + label: Camel 4.x upgrade guide + url: /manual/camel-4x-upgrade-guide.html + +components: + eyebrow: 300+ components + title: Component Reference + desc: >- + Functionality and configuration for every component, data format, + language, and EIP. + primary_cta: + label: Browse components + url: /components/latest/ + secondary_cta: + label: API docs + url: https://www.javadoc.io/doc/org.apache.camel/camel-api/latest/index.html + +projects: + - name: Camel K + icon: kubernetes + desc: >- + Apache Camel K is a lightweight integration framework built on Apache + Camel that runs natively on Kubernetes and is specifically designed + for serverless and microservice architectures. It allows you to run + integration code written in Camel DSL on your cloud. + docs: /camel-k/latest/ + source: https://github.com/apache/camel-k/ + examples: https://github.com/apache/camel-k-examples + - name: Camel Kafka Connector + icon: apache-kafka + desc: >- + Camel Kafka Connector allows you to use all Camel components as + Kafka Connect connectors, expanding Kafka Connect compatibility by + allowing Camel components to be used in the Kafka ecosystem. + docs: /camel-kafka-connector/latest/ + source: https://github.com/apache/camel-kafka-connector/ + examples: https://github.com/apache/camel-kafka-connector-examples/ + - name: Camel Quarkus + icon: quarkus + desc: >- + This project hosts the efforts to port and package most of the Camel + components as Quarkus extensions, a Java platform offering fast boot + times and low memory footprint that targets both stock JVMs and + GraalVM. + docs: /camel-quarkus/latest/ + source: https://github.com/apache/camel-quarkus/ + examples: https://github.com/apache/camel-quarkus-examples/ + - name: Camel Spring Boot + icon: spring-boot + desc: >- + Camel support for Spring Boot, including autoconfiguration of the + Camel context by auto-detecting Camel routes and registering the key + Camel utilities as beans, plus starters for the Camel components. + docs: /camel-spring-boot/latest/ + source: https://github.com/apache/camel-spring-boot + examples: https://github.com/apache/camel-spring-boot-examples + - name: Camel Karaf + icon: apache-karaf + desc: Apache Karaf makes running Apache Camel in the Karaf OSGi container. + docs: /camel-karaf/latest/ + source: https://github.com/apache/camel-karaf + - name: Camel Karavan + icon: karavan + desc: >- + A low-code, visual data-integration platform for designing and + managing Camel routes. + source: https://github.com/apache/camel-karavan + - name: Camel CLI + icon: cli + desc: >- + The Camel CLI, powered by JBang, lets you easily install and get + started with Apache Camel in only a few minutes - excellent for + no-code/low-code use cases and quick prototypes. + docs: /manual/camel-jbang.html + source: https://github.com/apache/camel/tree/main/dsl/camel-jbang + examples: https://github.com/apache/camel-jbang-examples + - name: Tooling + icon: logo-d + desc: >- + A rich ecosystem of developer tooling - IDE plugins, visual editors, + AI-assisted development tools, Maven plugins, and monitoring + solutions. + docs: /tooling/ + - name: Kamelets + icon: logo-d + desc: >- + A catalog of connectors called "Kamelets" (Kamel route snippets) that + let you create sources or sinks to external systems via a simplified + interface, hiding the low-level connection details. + docs: /camel-kamelets/latest/ + source: https://github.com/apache/camel-kamelets diff --git a/layouts/community/list.html b/layouts/community/list.html new file mode 100644 index 00000000000..fc6550e95c9 --- /dev/null +++ b/layouts/community/list.html @@ -0,0 +1,41 @@ +{{ partial "header.html" . }} +{{- $data := .Site.Data.community }} + +
    +
    +
    + +
    +
    +
    + +{{ partial "footer.html" . }} diff --git a/layouts/docs/list.html b/layouts/docs/list.html new file mode 100644 index 00000000000..b71c7856b1f --- /dev/null +++ b/layouts/docs/list.html @@ -0,0 +1,59 @@ +{{ partial "header.html" . }} +{{- $data := index site.Data "docs-projects" }} + +
    +
    +
    +
    + +
    +

    {{ .Title }}

    +

    {{ $data.lead }}

    +
    + +
    +
    +

    {{ $data.manual.eyebrow }}

    +

    {{ $data.manual.title }}

    +

    {{ $data.manual.desc }}

    +

    + {{ $data.manual.primary_cta.label }} + {{ $data.manual.secondary_cta.label }} +

    +
    +
    +

    {{ $data.components.eyebrow }}

    +

    {{ $data.components.title }}

    +

    {{ $data.components.desc }}

    +

    + {{ $data.components.primary_cta.label }} + {{ $data.components.secondary_cta.label }} +

    +
    +
    + + +
      + {{- range $data.projects }} + {{- $p := . }} +
    • +
      + +

      {{ .name }}

      +
      +

      {{ .desc }}

      + +
    • + {{- end }} +
    + +
    +
    +
    +
    + +{{ partial "footer.html" . }} From bb0d5ea09961fa623237c1e37d41badb347dc16a Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 18:15:15 -0400 Subject: [PATCH 098/209] feat(tooling): redesign the Tooling screen with data-driven groups Rebuild /tooling/ per the piece-4b design: CLI command list on a dark block, TUI text+screenshot split, an MCP card with two AI-tool tiles, and the remaining five groups as name/description rows behind a sticky "On this page" rail that reuses the existing aside.toc.sidebar + 02-on-this-page.js scroll-spy unchanged. Tables render from a new data/tooling.yaml (not the {{< table >}} shortcode) via a new layouts/tooling/list.html, matching the /projects/ and /docs/ data-file pattern - the design restructures the groups (AI-Assisted Development folds into the MCP card, Libraries folds into Monitoring) in ways a markdown table can't express. The MCP feature card reuses the shared .card/.card--lg primitive; the nested AI-tool tiles don't fit either card size tier and stay a small, page-owned shape (documented in tooling.css). content/tooling/_index.md is trimmed to front matter only. Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/site.css | 1 + antora-ui-camel/src/css/tooling.css | 294 ++++++++++++++++++++++++++++ content/tooling/_index.md | 115 +---------- data/tooling.yaml | 133 +++++++++++++ layouts/tooling/list.html | 109 +++++++++++ 5 files changed, 538 insertions(+), 114 deletions(-) create mode 100644 antora-ui-camel/src/css/tooling.css create mode 100644 data/tooling.yaml create mode 100644 layouts/tooling/list.html diff --git a/antora-ui-camel/src/css/site.css b/antora-ui-camel/src/css/site.css index 1ecd33833a4..dee0be1f020 100644 --- a/antora-ui-camel/src/css/site.css +++ b/antora-ui-camel/src/css/site.css @@ -27,6 +27,7 @@ @import url('misc.css'); @import url('docs.css'); @import url('projects.css'); +@import url('tooling.css'); @import url('sitemap.css'); @import url('videos.css'); @import url('download.css'); diff --git a/antora-ui-camel/src/css/tooling.css b/antora-ui-camel/src/css/tooling.css new file mode 100644 index 00000000000..5bc34011ce1 --- /dev/null +++ b/antora-ui-camel/src/css/tooling.css @@ -0,0 +1,294 @@ +/* Tooling (/tooling/, content/tooling/_index.md, layouts/tooling/list.html, + data/tooling.yaml). Same two-column "site page" shell as Blog/Documentation/ + Download/Security/Community (max-width 1200px), but the sticky "On this page" + rail reuses the Antora aside.toc.sidebar + 02-on-this-page.js scroll-spy + unchanged (see toc.css) rather than a page-owned rail. That script requires + `article.doc` with real h1[id]/h2[id]/h3[id] headings and either `.static` + or `.sectN>hN` nesting to find them (see antora-ui-camel/src/js/ + 02-on-this-page.js) - so this is the one "site page" article that must also + carry `doc static`. That pulls in doc.css's/static.css's generic heading, + paragraph, and link rules, several of which meet or beat the specificity of + a bare element selector. Every rule below that needs to win against them is + deliberately written at >= their specificity (never !important); see the + per-rule notes. See .superpowers/sdd/4b/extract/tooling.md sections 3 and 6 + for the full reasoning (C-toc-color/-border already fixed in toc.css by an + earlier group; C-aspect resolved below as "letterbox", see .tooling-media). + + Card usage: the MCP section reuses the shared .card/.card--lg primitive + (primitives.css) exactly as security's read-first card and docs' feature + cards do. The nested "AI tool" tiles inside it (10px radius, 16/18px + padding) do NOT match either .card size tier (13px/24px or 16px/32px) and + are single-use, non-interactive, and nested one level deeper than every + other card consumer - see 00-primitives.md section 1.4's two named tiers. + Rather than silently forcing them into .card--flat with overridden radius/ + padding (a fork wearing the primitive's name), they get their own small, + page-owned .tooling-ai-card shape. Flagged in the implementation report. */ + +.tooling { + width: 100%; + max-width: var(--static-max-width--desktop); + margin: 0 auto; + padding: calc(56 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem) calc(40 / var(--rem-base) * 1rem); + display: grid; + grid-template-columns: minmax(0, 1fr) var(--toc-width); + gap: calc(56 / var(--rem-base) * 1rem); + align-items: start; +} + +/* .doc h1..h6 (specificity 0,1,1) sets margin/font-weight/line-height that + the page-hero-title primitive (0,1,0) can't outrank; re-assert the + primitive's own values here, matching specificity, so the primitive stays + the single source of truth for what the numbers *are*. */ +.tooling h1 { + font-weight: 800; + line-height: 1.05; + margin: 0; +} + +/* .doc p / .static p (both 0,1,1) set their own margin; beat them here too + so the page-hero-lead primitive's 14px top margin actually wins. */ +.tooling .tooling-lead { + max-width: calc(760 / var(--rem-base) * 1rem); + margin: calc(14 / var(--rem-base) * 1rem) 0 0; +} + +.tooling-section { + margin-top: calc(48 / var(--rem-base) * 1rem); +} + +.tooling-cli-section { + margin-top: calc(52 / var(--rem-base) * 1rem); +} + +/* .doc h2:not(.discrete) is (0,2,1); match it so tooling.css (imported after + doc.css) reliably wins the tie for every h2 on this page. */ +.tooling .tooling-section h2 { + font-weight: 800; + font-size: calc(28 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + margin: 0; + padding: 0; +} + +.tooling .tooling-section-intro { + font-size: calc(15.5 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-ink-soft); + margin: calc(10 / var(--rem-base) * 1rem) 0 0; + max-width: calc(760 / var(--rem-base) * 1rem); + text-wrap: pretty; +} + +.tooling-cli-section .tooling-section-intro { + margin-bottom: calc(20 / var(--rem-base) * 1rem); +} + +.tooling code { + font-size: calc(14 / var(--rem-base) * 1rem); + padding: calc(2 / var(--rem-base) * 1rem) calc(6 / var(--rem-base) * 1rem); + border-radius: 4px; /* radius exemption: raw px */ +} + +/* ---- Camel CLI: dark command list --------------------------------------- */ + +.tooling-cli { + background: var(--color-ink); + border: 1px solid var(--color-dark-line); + border-radius: 12px; /* radius exemption: raw px */ + overflow: hidden; +} + +.tooling-cli-row { + display: grid; + grid-template-columns: calc(170 / var(--rem-base) * 1rem) minmax(0, 1fr); + gap: calc(20 / var(--rem-base) * 1rem); + padding: calc(13 / var(--rem-base) * 1rem) calc(20 / var(--rem-base) * 1rem); + border-top: 1px solid var(--color-dark-line); + font-size: calc(14 / var(--rem-base) * 1rem); +} + +.tooling-cli-cmd { + color: var(--color-orange-glow); + font-weight: 600; +} + +.tooling-cli-desc { + color: var(--color-on-dark-soft); + line-height: 1.5; +} + +/* ---- Camel TUI: text + screenshot split --------------------------------- */ + +.tooling-split { + display: grid; + grid-template-columns: 1fr 1fr; + gap: calc(28 / var(--rem-base) * 1rem); +} + +/* C-aspect (tooling.md sec 6): the real screenshot is ~2.33:1; the design's + box is 16:10 (1.6:1). Letterboxing (object-fit: contain against the same + dark background) shows the whole real screenshot without cropping content, + at the cost of visible bars - chosen over cover-crop, which would hide + real UI. Flagged as a implementation decision, not a transcribed value. */ +.tooling-media { + aspect-ratio: 16 / 10; + border-radius: 12px; /* radius exemption: raw px */ + background: var(--color-ink); + border: 1px solid var(--color-dark-line); + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +.tooling-media img { + width: 100%; + height: 100%; + object-fit: contain; +} + +/* ---- Camel MCP Server: card + AI tool grid ------------------------------ */ +/* .tooling-mcp also carries .tooling-section, which already supplies the + 48px margin-top shared by every other section on this page. */ + +/* .doc p / .static p (both 0,1,1) beat a bare class for margin; every .tooling +

    below is compound-scoped (.tooling .foo, 0,2,0) for the same reason. */ +.tooling .tooling-eyebrow { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-orange-deep); + letter-spacing: 0.08em; + text-transform: uppercase; + margin: 0; +} + +.tooling-mcp .tooling-eyebrow + h2 { + margin-top: calc(10 / var(--rem-base) * 1rem); +} + +.tooling-ai-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: calc(14 / var(--rem-base) * 1rem); + margin-top: calc(22 / var(--rem-base) * 1rem); +} + +.tooling-ai-card { + border: 1px solid var(--color-line); + border-radius: 10px; /* radius exemption: raw px */ + padding: calc(16 / var(--rem-base) * 1rem) calc(18 / var(--rem-base) * 1rem); +} + +.tooling .tooling-ai-name { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(16 / var(--rem-base) * 1rem); + color: var(--color-ink); + text-decoration: none; + background: none; +} + +.tooling .tooling-ai-name:hover { + color: var(--link_hover-font-color); + text-decoration: underline; +} + +.tooling .tooling-ai-desc { + font-size: calc(13.5 / var(--rem-base) * 1rem); + line-height: 1.5; + color: var(--color-ink-soft); + margin: calc(6 / var(--rem-base) * 1rem) 0 0; +} + +/* ---- looped tool groups: name/description rows -------------------------- */ + +.tooling-rows { + display: flex; + flex-direction: column; + margin-top: calc(18 / var(--rem-base) * 1rem); + border-top: 1px solid var(--color-line); +} + +.tooling-row { + display: grid; + grid-template-columns: calc(260 / var(--rem-base) * 1rem) minmax(0, 1fr); + gap: calc(24 / var(--rem-base) * 1rem); + padding: calc(16 / var(--rem-base) * 1rem) 0; + border-bottom: 1px solid var(--color-line-soft); +} + +.tooling .tooling-row-name { + font-weight: 700; + font-size: calc(15 / var(--rem-base) * 1rem); + color: var(--color-ink); + text-decoration: none; + background: none; +} + +.tooling .tooling-row-name:hover { + color: var(--link_hover-font-color); + text-decoration: underline; +} + +.tooling-row-name--mono { + font-family: var(--monospace-font-family); +} + +.tooling .tooling-row-desc { + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.55; + color: var(--color-ink-soft); + margin: 0; + text-wrap: pretty; +} + +/* ---- footnote ------------------------------------------------------------ */ + +.tooling .tooling-footnote { + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-ink-muted); + margin: calc(48 / var(--rem-base) * 1rem) 0 0; + padding-top: calc(24 / var(--rem-base) * 1rem); + border-top: 1px solid var(--color-line); +} + +/* ---- "On this page" sticky rail: page-scoped top offset only ------------ */ + +/* This page has no secondary toolbar (unlike the Antora docs screen, which + is why the shared .toc.sidebar default bakes in --toolbar-height). Derive + the design's 90px literal from existing tokens instead of a new one: + --navbar-height (66px) + 24px = 90px exactly. */ +.tooling .toc.sidebar .toc-menu { + top: calc(var(--navbar-height) + calc(24 / var(--rem-base) * 1rem)); +} + +/* ---- responsive: 1024px / 626px (no new breakpoints) --------------------- */ + +@media screen and (width <= 1024px) { + .tooling { + grid-template-columns: minmax(0, 1fr); + padding: calc(32 / var(--rem-base) * 1rem) calc(20 / var(--rem-base) * 1rem) calc(48 / var(--rem-base) * 1rem); + } + + .tooling-split { + grid-template-columns: minmax(0, 1fr); + } + + .tooling-row { + grid-template-columns: minmax(0, 1fr); + gap: calc(6 / var(--rem-base) * 1rem); + } +} + +@media screen and (width <= 626px) { + .tooling-cli-row { + grid-template-columns: minmax(0, 1fr); + gap: calc(6 / var(--rem-base) * 1rem); + } + + .tooling-ai-grid { + grid-template-columns: minmax(0, 1fr); + } +} diff --git a/content/tooling/_index.md b/content/tooling/_index.md index 7c30ba4ce8f..70fa9344f0f 100644 --- a/content/tooling/_index.md +++ b/content/tooling/_index.md @@ -1,117 +1,4 @@ --- title: "Tooling" +layout: list --- - -Apache Camel ships with a rich set of built-in developer tools and is supported by a growing ecosystem of third-party tooling. Whether you prefer the command line, an IDE, a visual editor, or AI-assisted development — there is tooling to help you build, test, debug, and manage your Camel integrations. - -## Camel CLI - -The Camel CLI, powered by [JBang](https://www.jbang.dev/), lets you get started with Camel instantly — no project setup, no build tool configuration. Install it once, then use the `camel` command to develop, run, test, and export your integrations. - -{{< table >}} -| Command | Description | -|---------|-------------| -|`camel run`|Run Camel routes from source files (Java, YAML, XML, etc.) with automatic classpath management| -|`camel dev`|Run in developer mode with hot-reload — changes are picked up automatically without restarting| -|`camel trace`|Live message tracing, step by step through your routes to see how messages are processed| -|`camel send`|Send test messages to running Camel routes for quick testing and debugging| -|`camel test`|Run tests for your Camel routes| -|`camel export`|Export your Camel project to Spring Boot, Quarkus, or standalone Java for production deployment| -{{< /table >}} - -See the [Camel CLI documentation](/manual/camel-jbang.html) for installation instructions and detailed usage. - -## Camel TUI - -The `camel tui` command launches a full terminal-based UI that provides fast, real-time feedback during development — a natural fit for CLI-first and AI-assisted workflows. It gives you route status, message flow, and tracing all in a single terminal view, so you can stay in the flow without switching tools. Ideal for low-code and AI-assisted development where quick iteration matters. - -The TUI also includes a built-in mini source editor for Camel YAML DSL routes with context-aware Tab completion for EIPs, components, endpoint options, and expressions — plus validation on save and inline quick docs. A low-code editing experience without leaving the terminal. - -![Camel TUI Overview — four running integrations with live throughput chart and log](./camel-tui-overview.png) - -See the [Camel TUI documentation](/manual/camel-jbang-tui.html) for more details. - -## Camel MCP Server - -The [Camel MCP Server](/manual/camel-jbang-mcp.html) connects Apache Camel to AI coding assistants through the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/). It gives AI tools access to Camel's component catalog, DSL documentation, and integration patterns — so they can help you write, debug, and optimize Camel routes with full context. - -Supported AI tools include Claude Code, GitHub Copilot, Gemini CLI, Cursor, Windsurf, and any MCP-compatible assistant. - -## AI-Assisted Development - -{{< table >}} -| Tool | Description | -|------|-------------| -|[Camel Kit](https://github.com/luigidemasi/camel-kit)|A set of structured slash commands for AI coding assistants that guide you through the complete integration lifecycle — from design and planning to implementation and verification. Supports Claude Code, Gemini CLI, and more.| -|[Wanaku](https://wanaku.ai)|The Wanaku MCP Router is a router for AI-enabled applications powered by the Model Context Protocol (MCP) and Apache Camel.| -{{< /table >}} - -## Maven Plugins - -For production projects, Camel provides a set of Maven plugins that integrate with your existing build workflow: - -{{< table >}} -| Plugin | Description | -|--------|-------------| -|[Camel Maven Plugin](/manual/camel-maven-plugin.html)|The main plugin for running and developing Camel applications from Maven. Goals: `camel:run` (run routes), `camel:dev` (developer mode with hot-reload), `camel:debug` (debug mode for textual route debugging), `camel:prepare-fatjar` (prepare for fat-jar packaging).| -|[Camel Report Maven Plugin](/manual/camel-report-maven-plugin.html)|Validates source code for invalid Camel endpoint URIs, Simple expressions, duplicate route IDs, and generates route coverage reports after unit testing.| -|[Camel YAML DSL Validator Maven Plugin](/manual/camel-yaml-dsl-validator-maven-plugin.html)|Validates YAML DSL route files for syntax errors according to the spec, without needing to run Camel.| -|[Camel Component Maven Plugin](/manual/camel-component-maven-plugin.html)|Assists third-party component developers in generating all necessary metadata and configuration Java classes for custom Camel components.| -|[Camel REST DSL OpenAPI Plugin](/manual/rest-dsl-openapi.html)|Generates REST DSL routes and DTOs from OpenAPI v3 specification files for a contract-first approach.| -{{< /table >}} - -## Maven Archetypes - -Camel provides [Maven Archetypes](/manual/camel-maven-archetypes.html) to quickly scaffold new projects: - -{{< table >}} -| Archetype | Description | -|-----------|-------------| -|camel-archetype-java|Creates a new Camel project using Java DSL| -|camel-archetype-main|Creates a new Camel project using standalone Camel Main| -|camel-archetype-spring|Creates a new Camel project with Spring DSL support| -|camel-archetype-component|Creates a new Camel component| -|camel-archetype-dataformat|Creates a new Camel data format| -|camel-archetype-api-component|Creates a new Camel component that wraps one or more API proxies| -{{< /table >}} - -## IDE Plugins and Extensions - -{{< table >}} -| Tool | Description | -|------|-------------| -|[Apache Camel IDEA Plugin](https://github.com/camel-idea-plugin/camel-idea-plugin)|Plugin for IntelliJ IDEA to provide a set of Apache Camel related editing capabilities to the code editor. It also provides Camel textual route debugging capabilities.| -|[VS Code Extension Pack for Camel](https://marketplace.visualstudio.com/items?itemName=redhat.apache-camel-extension-pack)|A set of VS Code extensions for developing Camel applications — includes language support, debugging, and more.| -|[Camel Language Server](https://github.com/camel-tooling/camel-language-server)|A [Language Server Protocol](https://github.com/Microsoft/language-server-protocol) implementation that provides Camel DSL smartness (completion, validation, hover, outline). Packaged for [VS Code](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-apache-camel) and [Eclipse Desktop](https://marketplace.eclipse.org/content/language-support-apache-camel).| -|[Camel Debug Adapter](https://github.com/camel-tooling/camel-debug-adapter)|A [Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol/) implementation that provides Camel textual route debugging capabilities. Packaged for [VS Code](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-debug-adapter-apache-camel) and [Eclipse Desktop](https://marketplace.eclipse.org/content/textual-debugging-apache-camel).| -{{< /table >}} - -## Visual Editing - -{{< table >}} -| Tool | Description | -|------|-------------| -|[Camel Karavan](https://karavan.space/)|Camel Karavan is a visual development tool for Apache Camel that provides a rich graphical editor for designing and deploying integration routes.| -|[Kaoto](https://kaoto.io/)|Kaoto is an integration editor to create and deploy workflows in a visual, low-code way; with developer-friendly features like a code editor and deployments to the cloud.| -{{< /table >}} - -## Monitoring and Management - -{{< table >}} -| Tool | Description | -|------|-------------| -|[Camel Monitor Operator](https://camel-tooling.github.io/camel-dashboard/docs/installation-guide/advanced/operator/)|A Kubernetes operator that discovers and monitors Camel applications running in the cloud. Provides a lightweight monitoring layer with a GUI dashboard and integrates with advanced monitoring systems like Prometheus.| -|[hawt.io](http://hawt.io)|hawt.io is an open source HTML5 web application for visualizing, managing and tracing Camel routes & endpoints, ActiveMQ brokers, JMX, and much more.| -{{< /table >}} - -## Libraries - -{{< table >}} -| Tool | Description | -|------|-------------| -|[Forage](https://kaotoio.github.io/forage/)|Opinionated bean factories for Apache Camel — configure data sources, connection factories, AI models, transaction managers, and more via properties instead of Java code. Works with Camel JBang, Spring Boot, and Quarkus.| -{{< /table >}} - ---- - -If you are using or have developed tooling for Apache Camel please add an entry via a [pull request](https://github.com/apache/camel-website); or post to the [mailing list](/community/mailing-list/). diff --git a/data/tooling.yaml b/data/tooling.yaml new file mode 100644 index 00000000000..9836654c04e --- /dev/null +++ b/data/tooling.yaml @@ -0,0 +1,133 @@ +# Tooling (/tooling/) — drives layouts/tooling/list.html + +lead: >- + Apache Camel ships with a rich set of built-in developer tools and is + supported by a growing ecosystem of third-party tooling. Whether you + prefer the command line, an IDE, a visual editor, or AI-assisted + development — there is tooling to help you build, test, debug, and + manage your Camel integrations. + +cliCommands: + - cmd: camel run + desc: Run Camel routes from source files (Java, YAML, XML, etc.) with automatic classpath management + - cmd: camel dev + desc: Run in developer mode with hot-reload — changes are picked up automatically without restarting + - cmd: camel trace + desc: Live message tracing, step by step through your routes to see how messages are processed + - cmd: camel send + desc: Send test messages to running Camel routes for quick testing and debugging + - cmd: camel test + desc: Run tests for your Camel routes + - cmd: camel export + desc: Export your Camel project to Spring Boot, Quarkus, or standalone Java for production deployment + +aiTools: + - name: Camel Kit + url: https://github.com/luigidemasi/camel-kit + desc: >- + Structured slash commands for AI coding assistants that guide you + through the complete integration lifecycle. Supports Claude Code, + Gemini CLI, and more. + - name: Wanaku + url: https://wanaku.ai + desc: >- + The Wanaku MCP Router is a router for AI-enabled applications + powered by the Model Context Protocol and Apache Camel. + +toolGroups: + - id: maven-plugins + title: Maven Plugins + intro: >- + For production projects, Camel provides a set of Maven plugins that + integrate with your existing build workflow. + items: + - name: Camel Maven Plugin + url: /manual/camel-maven-plugin.html + desc: "Run and develop Camel applications from Maven: camel:run, camel:dev (hot-reload), camel:debug, camel:prepare-fatjar." + - name: Camel Report Maven Plugin + url: /manual/camel-report-maven-plugin.html + desc: Validates endpoint URIs, Simple expressions, duplicate route IDs, and generates route coverage reports after unit testing. + - name: Camel YAML DSL Validator Maven Plugin + url: /manual/camel-yaml-dsl-validator-maven-plugin.html + desc: Validates YAML DSL route files for syntax errors according to the spec, without needing to run Camel. + - name: Camel Component Maven Plugin + url: /manual/camel-component-maven-plugin.html + desc: Generates metadata and configuration Java classes for custom Camel components. + - name: Camel REST DSL OpenAPI Plugin + url: /manual/rest-dsl-openapi.html + desc: Generates REST DSL routes and DTOs from OpenAPI v3 specification files for a contract-first approach. + + - id: archetypes + title: Maven Archetypes + intro: >- + Camel provides Maven + Archetypes to quickly scaffold new projects. + mono: true + items: + - name: camel-archetype-java + desc: Creates a new Camel project using Java DSL + - name: camel-archetype-main + desc: Creates a new Camel project using standalone Camel Main + - name: camel-archetype-spring + desc: Creates a new Camel project with Spring DSL support + - name: camel-archetype-component + desc: Creates a new Camel component + - name: camel-archetype-dataformat + desc: Creates a new Camel data format + - name: camel-archetype-api-component + desc: Creates a new Camel component that wraps one or more API proxies + + - id: ide + title: IDE Plugins and Extensions + items: + - name: Apache Camel IDEA Plugin + url: https://github.com/camel-idea-plugin/camel-idea-plugin + desc: Camel editing capabilities for IntelliJ IDEA, including textual route debugging. + - name: VS Code Extension Pack for Camel + url: https://marketplace.visualstudio.com/items?itemName=redhat.apache-camel-extension-pack + desc: A set of VS Code extensions for developing Camel applications — language support, debugging, and more. + - name: Camel Language Server + url: https://github.com/camel-tooling/camel-language-server + desc: >- + LSP implementation providing completion, validation, hover, and + outline. Packaged for + VS Code + and + Eclipse Desktop. + - name: Camel Debug Adapter + url: https://github.com/camel-tooling/camel-debug-adapter + desc: >- + DAP implementation providing Camel textual route debugging. + Packaged for + VS Code + and + Eclipse Desktop. + + - id: visual + title: Visual Editing + items: + - name: Camel Karavan + url: https://karavan.space/ + desc: A rich graphical editor for designing and deploying integration routes. + - name: Kaoto + url: https://kaoto.io/ + desc: >- + An integration editor to create and deploy workflows in a + visual, low-code way; with a code editor and deployments to the + cloud. + + - id: monitoring + title: Monitoring and Management + items: + - name: Camel Monitor Operator + url: https://camel-tooling.github.io/camel-dashboard/docs/installation-guide/advanced/operator/ + desc: A Kubernetes operator that discovers and monitors Camel applications, with a GUI dashboard and Prometheus integration. + - name: hawt.io + url: http://hawt.io + desc: An open source HTML5 web application for visualizing, managing and tracing Camel routes & endpoints, ActiveMQ brokers, JMX, and more. + - name: Forage + url: https://kaotoio.github.io/forage/ + desc: >- + Opinionated bean factories for Apache Camel — configure data + sources, connection factories, AI models, and more via + properties. Works with Camel JBang, Spring Boot, and Quarkus. diff --git a/layouts/tooling/list.html b/layouts/tooling/list.html new file mode 100644 index 00000000000..0d5e91304d0 --- /dev/null +++ b/layouts/tooling/list.html @@ -0,0 +1,109 @@ +{{ partial "header.html" . }} +{{- $data := site.Data.tooling }} +{{- $tui := .Resources.GetMatch "camel-tui-overview.png" }} + +

    +
    +
    +
    +
    +

    {{ .Title }}

    +

    {{ $data.lead }}

    + +
    +

    Camel CLI

    +

    + The Camel CLI, powered by JBang, + lets you get started with Camel instantly — no project setup, no + build tool configuration. Install it once, then use the + camel command to develop, run, test, and export your + integrations. +

    +
    + {{- range $data.cliCommands }} +
    + {{ .cmd }} + {{ .desc }} +
    + {{- end }} +
    +
    + +
    +
    +

    Camel TUI

    +

    + The camel tui command launches a full terminal-based + UI with route status, message flow, and tracing in a single view + — plus a built-in mini source editor for YAML DSL routes with + context-aware Tab completion, validation on save, and inline + quick docs. +

    +
    +
    + {{- with $tui }} + Camel TUI Overview — four running integrations with live throughput chart and log + {{- end }} +
    +
    + +
    +

    AI-assisted development

    +

    Camel MCP Server

    +

    + Connects Apache Camel to AI coding assistants through the + Model Context Protocol. + It gives AI tools access to Camel's component catalog, DSL + documentation, and integration patterns — so they can help you + write, debug, and optimize Camel routes with full context. + Supported tools include Claude Code, GitHub Copilot, Gemini CLI, + Cursor, Windsurf, and any MCP-compatible assistant. See the + Camel MCP Server documentation. +

    +
    + {{- range $data.aiTools }} +
    + {{ .name }} +

    {{ .desc }}

    +
    + {{- end }} +
    +
    + + {{- range $data.toolGroups }} + {{- $g := . }} +
    +

    {{ .title }}

    + {{- with .intro }}

    {{ . | safeHTML }}

    {{ end }} +
    + {{- range .items }} +
    + {{- if .url }} + {{ .name }} + {{- else }} + {{ .name }} + {{- end }} +

    {{ .desc | safeHTML }}

    +
    + {{- end }} +
    +
    + {{- end }} + +

    If you are using or have developed + tooling for Apache Camel please add an entry via a + pull request; + or post to the mailing list.

    +
    + + +
    +
    +
    +
    + +{{ partial "footer.html" . }} From a9e895e8103b1f763e1620b37ed9cd5578df3b21 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 18:41:56 -0400 Subject: [PATCH 099/209] feat(blog): redesign blog list, category and post screens Rebuild /blog/, /categories// and /blog// against the piece-4b design: a 240px sticky category rail shared by the list and category screens, day/month post cards with tag chips and a mono numbered pager, and a single-post layout with a 260px rail (author, share pills, an "In this post" TOC rendered from real headings, prev/next), a 760px article column, a 16:8 featured image and an orange-rule blockquote. Reuses the .page-hero-title/.page-hero-lead/.detail-lead/.card/.card-grid primitives from primitives.css instead of re-declaring them. taxonomy.html gains the pagination and Releases-only filter list.html already had, which it was missing entirely before this change. Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/blog.css | 683 ++++++++++++++------- antora-ui-camel/src/css/category.css | 49 +- antora-ui-camel/src/css/sharingbuttons.css | 107 +--- layouts/_default/taxonomy.html | 104 +++- layouts/blog/list.html | 74 +-- layouts/blog/post.html | 160 +++-- layouts/blog/summary.html | 43 +- 7 files changed, 729 insertions(+), 491 deletions(-) diff --git a/antora-ui-camel/src/css/blog.css b/antora-ui-camel/src/css/blog.css index 2b9f5c1baf0..402bfb6fc60 100644 --- a/antora-ui-camel/src/css/blog.css +++ b/antora-ui-camel/src/css/blog.css @@ -1,42 +1,84 @@ -.blog { - margin: var(--static-margin); +/* Blog list, Category and Blog post screens (piece 4b, "blog" group). See + .superpowers/sdd/4b/extract/{blog,post,category}.md for the transcribed + design values this file implements. Shared primitives (.page-hero-title, + .page-hero-lead, .detail-lead, .card, .card-grid) live in primitives.css + and are reused directly rather than re-declared here. */ + +/* ========================================================================== + Blog list / Category (shared rail + post-card + pagination markup) + ========================================================================== */ + +.blog-layout { + display: grid; + grid-template-columns: calc(240 / var(--rem-base) * 1rem) 1fr; + gap: calc(56 / var(--rem-base) * 1rem); + max-width: var(--static-max-width--desktop); + margin: 0 auto; + padding: calc(56 / var(--rem-base) * 1rem) var(--page-padding-x) calc(40 / var(--rem-base) * 1rem); + align-items: start; +} + +.blog-rail { + position: sticky; + top: calc(var(--navbar-height) + calc(24 / var(--rem-base) * 1rem)); +} + +.blog-rail-eyebrow { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + letter-spacing: 0.08em; + text-transform: uppercase; + padding-bottom: calc(12 / var(--rem-base) * 1rem); + border-bottom: 1px solid var(--color-line); } -.blog.list { +.blog-categories { display: flex; - flex-direction: column-reverse; + flex-direction: column; + margin-top: calc(8 / var(--rem-base) * 1rem); } -.blog.list aside { - margin-top: 2.5rem; - padding-right: 2rem; - line-height: 2rem; - align-self: flex-start; - position: sticky; - top: 2rem; +.blog-category { + display: flex; + justify-content: space-between; + align-items: center; + padding: calc(8 / var(--rem-base) * 1rem) 0; + font-size: calc(14 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-2); + border-bottom: 1px solid var(--color-line-soft); + text-decoration: none; } -@media screen and (width <= 1024px) { - .blog.list aside { - margin-top: 0; - } +.blog-category:hover { + color: var(--color-camel-orange); } -.blog.list aside ul { - list-style: none; - padding: 0; - margin-top: 1rem; - max-height: calc(100vh - 300px); - overflow-y: auto; - display: inline-block; +/* .blog-category.is-current lives in category.css: it only ever applies + on a Category page, and that file's the one place the piece-4b spec asks + to keep for this exact reason (see category.md §3d). */ + +.blog-category-count { + font-family: var(--monospace-font-family); + font-size: calc(11.5 / var(--rem-base) * 1rem); + color: var(--color-ink-muted); } .blog-rss { - margin-top: 1rem; + display: inline-flex; + align-items: center; + gap: calc(8 / var(--rem-base) * 1rem); + margin-top: calc(20 / var(--rem-base) * 1rem); + font-size: calc(13.5 / var(--rem-base) * 1rem); + font-weight: 700; + color: var(--color-orange-deep); + text-decoration: none; } -.blog-rss a { - text-decoration: none; +.blog-rss:hover { + color: var(--color-camel-orange); } .blog-rss .brand-icon { @@ -46,89 +88,372 @@ fill: currentcolor; } -article.blog:first-child { - margin-top: 3rem; +.blog-main { + min-width: 0; +} + +.blog-back-link { + display: inline-block; + font-family: var(--monospace-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + margin-bottom: calc(14 / var(--rem-base) * 1rem); + text-decoration: none; +} + +.blog-back-link:hover { + color: var(--color-camel-orange); +} + +.blog-posts { + display: flex; + flex-direction: column; + margin-top: calc(36 / var(--rem-base) * 1rem); +} + +.blog-post { + display: grid; + grid-template-columns: calc(96 / var(--rem-base) * 1rem) 1fr; + gap: calc(28 / var(--rem-base) * 1rem); + padding: calc(30 / var(--rem-base) * 1rem) 0; + border-top: 1px solid var(--color-line); +} + +.blog-post-date { + text-align: center; +} + +.blog-post-day { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(40 / var(--rem-base) * 1rem); + line-height: 1; + letter-spacing: -0.03em; + color: var(--color-camel-orange); } -article.blog { - padding-bottom: 1rem; +.blog-post-month { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + text-transform: uppercase; + letter-spacing: 0.06em; + margin-top: calc(6 / var(--rem-base) * 1rem); } -article.blog p { - padding-bottom: 1rem; +.blog-post-tags { + display: flex; + gap: calc(8 / var(--rem-base) * 1rem); + flex-wrap: wrap; } -.blog a.continue { - font-weight: bold; +/* Shared by the blog-list/category post-card tags and the blog-post hero + tags (post.md §2.3): one primitive, per the piece-4b inventory §1.7. */ +.tag-chip { + display: inline-block; + font-family: var(--monospace-font-family); + font-size: calc(11 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-orange-deep); + background: var(--color-orange-tint); + padding: calc(3 / var(--rem-base) * 1rem) calc(9 / var(--rem-base) * 1rem); + border-radius: 20px; /* radius exemption: raw px, see hard constraints */ + text-transform: uppercase; + letter-spacing: 0.04em; text-decoration: none; +} + +.blog-post-title { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(24 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + line-height: 1.2; + margin: calc(12 / var(--rem-base) * 1rem) 0 0; +} + +.blog-post-title a { + color: var(--color-ink); + text-decoration: none; +} + +.blog-post-title a:hover { + color: var(--color-camel-orange); +} + +.blog-post-summary { + font-size: calc(15.5 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-ink-soft); + margin: calc(10 / var(--rem-base) * 1rem) 0 0; + text-wrap: pretty; +} + +.blog-post-meta { + display: flex; + align-items: center; + gap: calc(16 / var(--rem-base) * 1rem); + margin-top: calc(14 / var(--rem-base) * 1rem); + font-size: calc(13.5 / var(--rem-base) * 1rem); + color: var(--color-ink-muted); +} + +.blog-post-continue { + font-weight: 700; + color: var(--color-orange-deep); + text-decoration: none; +} + +.blog-post-continue:hover { + color: var(--color-camel-orange); +} + +/* Numbered pager: mono, ink active pill (blog.md §4). Scoped by the shared + .blog-list root so it never leaks into an unrelated future ".pagination". */ +.blog-list .pagination { + display: flex; + gap: calc(6 / var(--rem-base) * 1rem); + justify-content: center; + margin: calc(28 / var(--rem-base) * 1rem) 0 0; + padding: calc(28 / var(--rem-base) * 1rem) 0 0; + border-top: 1px solid var(--color-line); + font-family: var(--monospace-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + font-weight: 600; + list-style: none; +} + +.blog-list .page-item { + display: contents; +} + +.blog-list .page-link { + display: inline-block; + padding: calc(8 / var(--rem-base) * 1rem) calc(12 / var(--rem-base) * 1rem); + border-radius: 6px; /* radius exemption: raw px */ + color: var(--color-ink-soft); + text-decoration: none; +} + +.blog-list .page-link:hover { + background: var(--color-line-soft); +} + +.blog-list .page-link--next { + color: var(--color-orange-deep); +} + +.blog-list .page-item.active .page-link { + background: var(--color-ink); + color: var(--color-on-dark); +} + +.blog-list .page-item.active .page-link:hover { + background: var(--color-ink); +} + +.blog-list .page-item.disabled .page-link { + padding: calc(8 / var(--rem-base) * 1rem) calc(6 / var(--rem-base) * 1rem); + color: var(--color-ink-muted); + cursor: default; +} + +.blog-list .page-item.disabled .page-link:hover { background: none; } -.blog header { - margin-bottom: 0.4rem; - border-image: linear-gradient(to right, var(--color-ink), var(--color-ink) 50px, #fff 50px) 1 / 0 0 1px 0; +@media screen and (width <= 1024px) { + .blog-layout { + grid-template-columns: minmax(0, 1fr); + padding: calc(40 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem); + } + + .blog-rail { + position: static; + } } -.blog header h1 { - font-size: 2rem; - font-weight: bold; - padding-bottom: 0.2rem; +@media screen and (width <= 626px) { + .blog-list .page-hero-title { + font-size: calc(36 / var(--rem-base) * 1rem); + } } -.blog header time { - color: var(--color-gray-60); - font-style: italc; +/* ========================================================================== + Blog post (single) + ========================================================================== */ + +.post { + max-width: var(--static-max-width--desktop); + margin: 0 auto; + padding: calc(56 / var(--rem-base) * 1rem) var(--page-padding-x) calc(40 / var(--rem-base) * 1rem); } -.blog .post { - margin-top: 1rem; +.post-back { + font-family: var(--monospace-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + text-decoration: none; +} + +.post-back:hover { + color: var(--link_hover-font-color); +} + +.post-hero { + max-width: calc(820 / var(--rem-base) * 1rem); + margin-top: calc(18 / var(--rem-base) * 1rem); +} + +.post-tags { + display: flex; + gap: calc(8 / var(--rem-base) * 1rem); + flex-wrap: wrap; +} + +.post-title { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(46 / var(--rem-base) * 1rem); + letter-spacing: -0.03em; + line-height: 1.05; + margin: calc(16 / var(--rem-base) * 1rem) 0 0; + color: var(--color-ink); +} + +.post-layout { + display: grid; + grid-template-columns: calc(260 / var(--rem-base) * 1rem) minmax(0, 1fr); + gap: calc(56 / var(--rem-base) * 1rem); + margin-top: calc(40 / var(--rem-base) * 1rem); + align-items: start; +} + +.post-rail { + position: sticky; + top: var(--body-top); display: flex; flex-direction: column; - padding-bottom: 2rem; + gap: calc(22 / var(--rem-base) * 1rem); } -.blog .post aside .summary { - font-size: 1.2rem; - font-style: italic; +.post-authors { + display: flex; + flex-direction: column; + gap: calc(14 / var(--rem-base) * 1rem); } -.blog .post aside time { - color: var(--color-gray-60); +.post-author { + display: flex; + align-items: center; + gap: calc(12 / var(--rem-base) * 1rem); } -.blog .post aside p { - padding-top: 1.5rem; - color: var(--color-gray-60); +.post-avatar { + width: 44px; + height: 44px; + border-radius: 50%; + background: var(--color-line); } -.blog .post aside p span[rel='author'] { - display: inline-block; +.post-author-name { + font-weight: 700; + font-size: calc(14.5 / var(--rem-base) * 1rem); } -.blog .post aside { - width: 100%; +.post-date { + font-size: calc(13 / var(--rem-base) * 1rem); + color: var(--color-ink-muted); +} + +/* Shared eyebrow typography for the rail's Share / In this post labels + (post.md §2.7b/§2.7c call these "identical typography"). */ +.post-eyebrow { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + letter-spacing: 0.08em; + text-transform: uppercase; + padding-bottom: calc(10 / var(--rem-base) * 1rem); +} + +.post-share-links { + display: flex; + gap: calc(8 / var(--rem-base) * 1rem); + flex-wrap: wrap; +} + +.post-adjacent { + display: flex; + justify-content: space-between; + padding-top: calc(18 / var(--rem-base) * 1rem); + border-top: 1px solid var(--color-line); + font-size: calc(13 / var(--rem-base) * 1rem); } -.blog a.arrow { - font-size: 1rem; +.post-adjacent a { + color: var(--color-ink-soft); + font-weight: 600; text-decoration: none; - background: none; } -.blog a.arrow.prev::after { - content: '\00A0previous'; +.post-adjacent a:hover { + color: var(--link_hover-font-color); } -.blog a.arrow.next::before { - content: 'next\00A0'; +.post-content { + max-width: calc(760 / var(--rem-base) * 1rem); } -.blog .post .post-content { - margin-left: 0; - width: auto; +/* .blog .post-content is also the legacy selector chain that + 07-image-zoom.js (out of this screen's owned files) queries for + zoomable body images; the article/content wrapper keep the "blog" / + "post-content" hook classes for that reason, see impl report. */ +.blog .post-content img.featured { + aspect-ratio: 16 / 8; + object-fit: cover; + width: 100%; + /* Beats the img's width/height HTML attributes, which otherwise act as a + low-priority "height" declaration in the cascade and make aspect-ratio + inert since height would no longer be auto. */ + height: auto; + border-radius: 14px; /* radius exemption: raw px */ + display: block; + margin-bottom: calc(34 / var(--rem-base) * 1rem); } -.blog .post-content img { +.blog .post-content h2 { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(28 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + margin: calc(40 / var(--rem-base) * 1rem) 0 0; +} + +.blog .post-content p { + font-size: calc(17 / var(--rem-base) * 1rem); + line-height: 1.75; + color: var(--color-ink-2); +} + +.blog .post-content blockquote { + margin: calc(24 / var(--rem-base) * 1rem) 0 0; + padding: calc(18 / var(--rem-base) * 1rem) calc(22 / var(--rem-base) * 1rem); + border-left: 3px solid var(--color-camel-orange); + background: var(--color-white); + border-radius: 0 12px 12px 0; /* radius exemption: raw px */ + font-family: var(--display-font-family); + font-weight: 500; + font-size: calc(19 / var(--rem-base) * 1rem); + line-height: 1.45; + color: var(--color-ink-2); +} + +.blog .post-content img:not(.featured) { width: auto; max-width: 800px; height: auto; @@ -136,20 +461,40 @@ article.blog p { margin-left: auto; margin-right: auto; display: block; -} - -.blog .post-content img:not(.featured) { cursor: zoom-in; } - @media screen and (width <= 1024px) { - .blog .post-content img { + .blog .post-content img:not(.featured) { max-width: 100%; max-height: none; } } +.blog .post-content figcaption { + font-size: 0.8rem; + text-align: center; +} + +.blog .post-content table { + width: 100%; + text-align: center; + margin-bottom: 1rem; +} + +.blog .post-content tr:nth-child(even) { + background: var(--color-smoke-50); +} + +.blog .post-content td { + padding: 0.5rem; +} + +.blog .post-content th { + padding: 0.7rem; + background: var(--color-smoke-90); +} + .image-zoom-overlay { position: fixed; top: 0; @@ -199,172 +544,60 @@ article.blog p { } } -.blog .post-content figcaption { - font-size: 0.8rem; - text-align: center; +.post-related { + margin-top: calc(56 / var(--rem-base) * 1rem); + padding-top: calc(28 / var(--rem-base) * 1rem); + border-top: 1px solid var(--color-line); } -.blog .post-content pre { - max-width: 800px; +.post-related-heading { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(15 / var(--rem-base) * 1rem); + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--color-ink-muted); + margin: 0 0 calc(18 / var(--rem-base) * 1rem); } -.blog .post .post-content table { - width: 100%; - text-align: center; - margin-bottom: 1rem; -} - -.blog .post .post-content tr:nth-child(even) { - background: var(--color-smoke-50); -} - -.blog .post .post-content td { - padding: 0.5rem; +.post-related-grid { + gap: calc(14 / var(--rem-base) * 1rem); } -.blog .post .post-content th { - padding: 0.7rem; - background: var(--color-smoke-90); -} - -.blog .post aside figure img { - margin-right: 1rem; - vertical-align: middle; - width: 4rem; - height: 4rem; - border-radius: 50%; -} - -.blog .post aside figure { - margin: 1rem 0; -} - -.blog .post aside figure figcaption { - display: inline; -} - -@media screen and (width >= 1025px) { - .blog { - max-width: var(--static-max-width--desktop); - } - - .blog .post { - flex-direction: row; - padding-bottom: 2rem; - } - - .blog .post aside { - width: 30rem; - min-width: 16rem; - } - - .blog a.arrow { - font-size: 3rem; - } - - .blog a.arrow.prev::after { - content: ''; - } - - .blog a.arrow.next::before { - content: ''; - } - - .blog .post .post-content { - margin-left: 2rem; - width: 60%; - } - - .blog.list { - flex-direction: row; - } - - main.blog.list { - margin-left: 0; - } -} - -.blog ul, -.blog ol { - padding-bottom: 1rem; -} - -.blog li ul, -.blog li ol { - padding-bottom: 0; -} - -.blog .pagination { - margin: var(--static-margin); - list-style: none; - padding: 1rem; -} - -@media screen and (width >= 1025px) { - .blog .pagination { - max-width: var(--static-max-width--desktop); - } -} - -.blog .page-item { - display: inline; - padding: 0; - margin: 0; -} - -.blog .page-item a { - color: var(--color-gray-30); - font-weight: bold; - padding: 0.5rem; -} - -.blog .page-item.disabled a { - color: var(--color-gray-30); +/* Reuses the .card primitive's shell/hover recipe (primitives.css); only + the radius/padding/color deltas below are page-specific (piece-4b + inventory §1.4). */ +.post-related-card { + border-radius: 12px; /* radius exemption: raw px */ + padding: calc(18 / var(--rem-base) * 1rem) calc(20 / var(--rem-base) * 1rem); + color: var(--color-ink); + text-decoration: none; } -.blog .page-item.active { - border-radius: 3px; - background: var(--color-ink); +.post-related-date { + font-family: var(--monospace-font-family); + font-size: calc(11.5 / var(--rem-base) * 1rem); + color: var(--color-ink-muted); } -.blog .page-item.active a { - color: var(--color-white); +.post-related-card-title { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(16.5 / var(--rem-base) * 1rem); + margin-top: calc(6 / var(--rem-base) * 1rem); + line-height: 1.3; } @media screen and (width <= 1024px) { - .blog.list aside { - margin-top: 4.5rem; + .post { + padding: calc(40 / var(--rem-base) * 1rem) calc(24 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem); } -} - -.blog .related { - display: flex; - flex-wrap: wrap; - border-top: 1px solid var(--color-camel-orange); - margin-top: 3rem; -} - -.blog .related > h3 { - min-width: 100%; -} -.blog .related article { - padding-right: 0; - width: 50%; - margin: 0; -} - -.blog .related article:nth-child(2n) { - padding-left: 0; -} - -.blog .related article header h1 { - font-size: 1rem; -} + .post-layout { + grid-template-columns: minmax(0, 1fr); + } -@media screen and (width <= 1024px) { - .blog .related article { - width: 100%; - padding-left: 0; + .post-rail { + position: static; } } diff --git a/antora-ui-camel/src/css/category.css b/antora-ui-camel/src/css/category.css index e421eeebd16..4c3c25114a7 100644 --- a/antora-ui-camel/src/css/category.css +++ b/antora-ui-camel/src/css/category.css @@ -1,41 +1,10 @@ -a.category:first-child::before { - content: '\2022\00A0\00A0'; -} - -a.category:first-child { - border-radius: 1rem 0.2rem 0.2rem 1rem; - margin-left: 0; -} - -a.category { - border-radius: 0.2rem; - margin-left: 1px; - color: var(--color-white); - padding: 0.2rem 0.5rem; - font-weight: bold; - font-size: 0.65rem; - text-decoration: none; -} - -li > a.category { - display: block; - margin: 0.2rem; - line-height: 2; -} - -a.category, -li > a.category { - background-color: var(--color-camel-orange); - background-image: none; - background-position: 0; - background-repeat: no-repeat; - background-size: 0; -} - -a.category:hover { - color: var(--color-white); -} - -a.category span { - margin-left: 0.5rem; +/* Category screen (piece 4b, "blog" group). The rail, post-card and + pagination markup are Blog List's (see blog.css) and are reused + byte-for-byte, not reimplemented here. This is the one rule that only + ever applies on a category page: highlighting the current category's + row in the shared rail. See .superpowers/sdd/4b/extract/category.md §3d. */ + +.blog-category.is-current { + color: var(--color-orange-deep); + font-weight: 700; } diff --git a/antora-ui-camel/src/css/sharingbuttons.css b/antora-ui-camel/src/css/sharingbuttons.css index 7fe0c752d3c..b53a882fa7e 100644 --- a/antora-ui-camel/src/css/sharingbuttons.css +++ b/antora-ui-camel/src/css/sharingbuttons.css @@ -1,89 +1,26 @@ -.resp-sharing-button__link, -.resp-sharing-button__icon { - display: inline-block; -} - -.resp-sharing-button__link { +/* Blog post share buttons (piece 4b, "blog" group). The design (post.md §6 + conflict C1) replaces the old brand-colored icon buttons (Facebook, + Twitter, LinkedIn) with three plain outlined-pill text buttons: X, + LinkedIn, Copy link. Facebook is dropped. + + This file's old .resp-sharing-button* rules and the icons they styled + are gone from layouts/blog/post.html; site.css's @import of this file is + outside this screen's owned files (see impl report), so the file is + repurposed in place rather than deleted. */ + +.post-share-link { + font-family: inherit; + font-size: calc(13 / var(--rem-base) * 1rem); + font-weight: 700; + color: var(--color-ink-soft); + background: none; + border: 1px solid var(--color-line); + padding: calc(6 / var(--rem-base) * 1rem) calc(12 / var(--rem-base) * 1rem); + border-radius: 6px; /* radius exemption: raw px */ text-decoration: none; - color: #fff; - margin: 0.5em; -} - -.resp-sharing-button { - border-radius: 5px; - transition: 25ms ease-out; - padding: 0.5em 0.75em; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -.resp-sharing-button__icon svg { - width: 1em; - height: 1em; - margin-right: 0.4em; - vertical-align: top; -} - -.resp-sharing-button--small svg { - margin: 0; - vertical-align: middle; -} - -/* Non solid icons get a stroke */ - -.resp-sharing-button__icon { - stroke: #fff; - fill: none; -} - -/* Solid icons get a fill */ - -.resp-sharing-button__icon--solid, -.resp-sharing-button__icon--solidcircle { - fill: #fff; - stroke: none; -} - -.resp-sharing-button--twitter { - background-color: #55acee; - border-color: #55acee; -} - -.resp-sharing-button--twitter:hover { - background-color: #2795e9; -} - -.resp-sharing-button--facebook { - background-color: #3b5998; - border-color: #3b5998; -} - -.resp-sharing-button--facebook:hover { - background-color: #2d4373; -} - -.resp-sharing-button--linkedin { - background-color: #0077b5; - border-color: #0077b5; -} - -.resp-sharing-button--linkedin:hover { - background-color: #046293; -} - -.resp-sharing-button--facebook:hover, -.resp-sharing-button--facebook:active { - background-color: #2d4373; - border-color: #2d4373; -} - -.resp-sharing-button--twitter:hover, -.resp-sharing-button--twitter:active { - background-color: #2795e9; - border-color: #2795e9; + cursor: pointer; } -.resp-sharing-button--linkedin:hover, -.resp-sharing-button--linkedin:active { - background-color: #046293; - border-color: #046293; +.post-share-link:hover { + border-color: var(--color-line-hover); } diff --git a/layouts/_default/taxonomy.html b/layouts/_default/taxonomy.html index e5b794b31fb..22d03a9f06c 100644 --- a/layouts/_default/taxonomy.html +++ b/layouts/_default/taxonomy.html @@ -1,31 +1,95 @@ {{ partial "header.html" . }} +{{ $current := .Data.Term }}
    - - -
    -
    - {{ range .Pages }} - {{ .Render "summary" }} + {{ end }} +
    - + + + {{ partial "footer.html" . }} diff --git a/layouts/blog/list.html b/layouts/blog/list.html index 791c41bea30..3484b6ba207 100644 --- a/layouts/blog/list.html +++ b/layouts/blog/list.html @@ -1,41 +1,41 @@ {{ partial "header.html" . }}
    - - -
    -
    - {{ $filtered := slice }} - {{ range .Pages }} - {{/* hide posts where Releases is the only category */}} - {{ $cats := default slice .Params.categories }} - {{ if not (and (in $cats "Releases") (eq (len $cats) 1)) }} - {{ $filtered = $filtered | append . }} + + RSS feed → + + +
    +

    Blog

    +

    Release notes, roadmap updates, and engineering notes from the Camel team and community.

    + +
    + {{ $filtered := slice }} + {{ range .Pages }} + {{/* hide posts where Releases is the only category */}} + {{ $cats := default slice .Params.categories }} + {{ if not (and (in $cats "Releases") (eq (len $cats) 1)) }} + {{ $filtered = $filtered | append . }} + {{ end }} {{ end }} - {{ end }} - {{ $pages := (.Paginate $filtered 3).Pages }} - {{ range $pages }} - {{ .Render "summary" }} - {{ end }} + {{ $pages := (.Paginate $filtered 3).Pages }} + {{ range $pages }} + {{ .Render "summary" }} + {{ end }} +
    {{ $page := .Paginator }} {{ if gt $page.TotalPages 1 }} @@ -70,8 +70,7 @@

    Categories

    {{ if $page.HasNext }}
  • - + Next →
  • {{ end }} @@ -84,8 +83,11 @@

    Categories

    {{ end }} +
    -
    + +
    + {{ partial "footer.html" . }} diff --git a/layouts/blog/post.html b/layouts/blog/post.html index ad17d0b66f3..429862505d2 100644 --- a/layouts/blog/post.html +++ b/layouts/blog/post.html @@ -1,70 +1,88 @@ -
    +{{ partial "header.html" . }} -
    - {{ if .Params.categories }} - {{ range .Params.categories }}{{ upper . }}{{ end }} - {{ end }} -

    {{ .Title }}

    -
    -
    - + +
    {{ $featured := (.Resources.ByType "image").GetMatch "*featured*" }} {{ if not $featured }} {{ $featured = resources.Get "img/default-featured.jpg" }} @@ -79,15 +97,25 @@

    Share this blog

    {{ end }} {{ end }} {{ .Content }} - +
    +
    + + - +{{ partial "footer.html" . }} diff --git a/layouts/blog/summary.html b/layouts/blog/summary.html index 1241856c4a7..77c5bbd6067 100644 --- a/layouts/blog/summary.html +++ b/layouts/blog/summary.html @@ -1,21 +1,26 @@ -
    - -
    -

    {{ .Title }}

    - {{ $headers := dict }} - {{ with os.Getenv "GITHUB_TOKEN" }} - {{ $headers = dict "Authorization" (printf "Bearer %s" .) }} - {{ else }} - {{ $headers = dict "Authorization" (printf "Basic %s" (printf "%s:%s" $.Site.Params.GitHubUsername $.Site.Params.GitHubToken | base64Encode)) }} +
    + +
    + {{ with .Params.categories }} + {{ end }} - , by {{ range $idx, $author := .Params.authors }}{{ if gt $idx 0 }}, {{ end }}{{ end }} -
    -

    {{ .Summary }}

    -

    Continue reading ❯

    -

    - {{ if .Params.categories }} - {{ range .Params.categories }}{{ upper . }}{{ end }} - {{end}} -

    - +

    {{ .Title }}

    +

    {{ .Params.preview }}

    + +
    From 1e5004d750449d2c1d6cf638ffc079b91b3304d0 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 19:01:53 -0400 Subject: [PATCH 100/209] feat(releases): redesign releases archive and security advisory screens Rewrite the Releases archive as a paper-2-header white table per project with a sticky "Projects" rail, and the Security advisory single page as an eyebrow/H1/lead detail view with uppercase section labels and a sticky facts card. Reuses the shared .page-hero-title/.page-hero-lead, .detail-lead, .lts-chip and .severity-chip primitives from primitives.css. Also sweeps the undesigned release-note detail template onto the shared .static/.doc typography (no CSS changes needed there beyond removing two dead, visually-inconsistent .release selectors) and fixes a malformed closing tag found along the way. Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/release.css | 359 ++++++++++++++++++- content/releases/_index.md | 4 +- layouts/partials/releases/release-table.html | 18 +- layouts/release-note/single.html | 2 +- layouts/releases/list.html | 44 ++- layouts/security-advisory/single.html | 99 +++-- 6 files changed, 456 insertions(+), 70 deletions(-) diff --git a/antora-ui-camel/src/css/release.css b/antora-ui-camel/src/css/release.css index eb229ba99bb..c1c939e1282 100644 --- a/antora-ui-camel/src/css/release.css +++ b/antora-ui-camel/src/css/release.css @@ -1,3 +1,328 @@ +/* Releases archive (content/releases/_index.md, layouts/releases/list.html) and + Security advisory (content/security/CVE-*.md, layouts/security-advisory/single.html). + Grouped in one file per the piece-4b build plan (both are release/advisory data + views; see .superpowers/sdd/4b/00-primitives.md). H1/lead on the archive screen + use the shared .page-hero-title/.page-hero-lead primitives; the advisory lead + uses the shared .detail-lead primitive; the LTS chip and the severity chip use + the shared .lts-chip/.severity-chip primitives from primitives.css -- only + page-scoped sizing is added here, per the primitives contract. Advisory styling + lives in this file rather than a separate advisory.css because the task's file + ownership list for this screen group names only release.css. */ + +/* ====================================================================== + Releases archive + ====================================================================== */ + +.releases { + display: grid; + grid-template-columns: minmax(0, 1fr) calc(220 / var(--rem-base) * 1rem); + gap: calc(56 / var(--rem-base) * 1rem); + align-items: start; + padding: calc(56 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem) calc(40 / var(--rem-base) * 1rem); +} + +.releases-intro { + max-width: calc(720 / var(--rem-base) * 1rem); +} + +.releases-lead a { + color: var(--link-font-color); +} + +.releases-lead a:hover { + color: var(--link_hover-font-color); + text-decoration: none; +} + +.releases-group { + margin-top: calc(48 / var(--rem-base) * 1rem); +} + +.releases-content > .releases-group:first-child { + margin-top: calc(40 / var(--rem-base) * 1rem); +} + +.releases-group-title { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(26 / var(--rem-base) * 1rem); + letter-spacing: -0.02em; + margin: 0 0 calc(14 / var(--rem-base) * 1rem); + color: var(--heading-font-color); +} + +/* table */ + +.releases-table { + width: 100%; + font-size: calc(14.5 / var(--rem-base) * 1rem); + background: var(--color-white); + border: 1px solid var(--color-line); + border-radius: 12px; /* radius exemption: raw px */ + border-collapse: collapse; + overflow: hidden; +} + +.releases-table thead tr { + background: var(--color-paper-2); +} + +.releases-table th { + text-align: left; + font-family: var(--monospace-font-family); + font-size: calc(11.5 / var(--rem-base) * 1rem); + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--color-ink-muted); + padding: calc(11 / var(--rem-base) * 1rem) calc(16 / var(--rem-base) * 1rem); +} + +.releases-col-version { + width: calc(140 / var(--rem-base) * 1rem); +} + +.releases-col-date { + width: calc(150 / var(--rem-base) * 1rem); +} + +.releases-table tbody tr { + border-top: 1px solid var(--color-line-soft); +} + +.releases-table tbody tr:first-child { + border-top: 0; +} + +.releases-table td { + padding: calc(12 / var(--rem-base) * 1rem) calc(16 / var(--rem-base) * 1rem); +} + +.releases-version { + font-family: var(--monospace-font-family); + font-weight: 600; + font-size: calc(14 / var(--rem-base) * 1rem); + color: var(--link-font-color); +} + +.releases-version:hover { + color: var(--link_hover-font-color); + text-decoration: none; +} + +.releases-table .lts-chip { + margin-left: calc(8 / var(--rem-base) * 1rem); +} + +.releases-date { + font-family: var(--monospace-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + color: var(--color-ink-soft); +} + +.releases-desc { + color: var(--color-ink-soft); + line-height: 1.5; +} + +/* sticky "Projects" rail -- deliberately not .toc-menu (see + .superpowers/sdd/4b/00-primitives.md 1.8b): 02-on-this-page.js only ever looks + for aside.toc.sidebar, which this markup never carries, but the class names + below stay distinct from the TOC component on purpose, not by accident. */ + +.releases-rail { + position: sticky; + top: calc(var(--navbar-height) + calc(24 / var(--rem-base) * 1rem)); +} + +.releases-rail-heading { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + letter-spacing: 0.08em; + text-transform: uppercase; + padding-bottom: calc(12 / var(--rem-base) * 1rem); + border-bottom: 1px solid var(--color-line); +} + +.releases-rail-links { + display: flex; + flex-direction: column; + margin-top: calc(10 / var(--rem-base) * 1rem); +} + +.releases-rail-link { + display: block; + padding: calc(6 / var(--rem-base) * 1rem) 0 calc(6 / var(--rem-base) * 1rem) calc(12 / var(--rem-base) * 1rem); + font-size: calc(13.5 / var(--rem-base) * 1rem); + color: var(--color-ink-soft); + border-left: 2px solid var(--color-line); + text-decoration: none; +} + +.releases-rail-link:hover, +.releases-rail-link:focus-visible { + border-left-color: var(--color-line-hover); + color: var(--color-ink); +} + +/* ====================================================================== + Security advisory (single CVE page) + ====================================================================== */ + +.advisory { + width: 100%; + max-width: var(--static-max-width--desktop); + margin: 0 auto; + padding: calc(56 / var(--rem-base) * 1rem) calc(32 / var(--rem-base) * 1rem) calc(40 / var(--rem-base) * 1rem); +} + +.advisory-back { + display: inline-block; + font-family: var(--monospace-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + text-decoration: none; +} + +.advisory-back:hover { + color: var(--link_hover-font-color); +} + +.advisory-layout { + display: grid; + grid-template-columns: minmax(0, 1fr) calc(320 / var(--rem-base) * 1rem); + gap: calc(56 / var(--rem-base) * 1rem); + align-items: start; + margin-top: calc(18 / var(--rem-base) * 1rem); +} + +.advisory-article { + max-width: calc(760 / var(--rem-base) * 1rem); +} + +.advisory-eyebrow { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-orange-deep); + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.advisory-title { + font-family: var(--display-font-family); + font-weight: 800; + font-size: calc(42 / var(--rem-base) * 1rem); + letter-spacing: -0.03em; + line-height: 1.05; + margin: calc(10 / var(--rem-base) * 1rem) 0 0; + color: var(--heading-font-color); +} + +.advisory-section { + margin-top: calc(36 / var(--rem-base) * 1rem); +} + +.advisory-section-title { + font-family: var(--display-font-family); + font-weight: 700; + font-size: calc(15 / var(--rem-base) * 1rem); + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--color-ink-muted); + margin: 0 0 calc(10 / var(--rem-base) * 1rem); +} + +.advisory-section-body { + font-size: calc(16.5 / var(--rem-base) * 1rem); + line-height: 1.7; + color: var(--color-ink-2); + margin: 0; + text-wrap: pretty; +} + +.advisory-references { + display: flex; + flex-direction: column; + gap: calc(8 / var(--rem-base) * 1rem); + font-size: calc(15 / var(--rem-base) * 1rem); +} + +.advisory-reference { + font-family: var(--monospace-font-family); + font-size: calc(13.5 / var(--rem-base) * 1rem); + color: var(--link-font-color); + text-decoration: none; +} + +.advisory-reference:hover { + color: var(--link_hover-font-color); + text-decoration: none; +} + +/* facts card */ + +.advisory-facts { + position: sticky; + top: calc(var(--navbar-height) + calc(24 / var(--rem-base) * 1rem)); + background: var(--color-white); + border: 1px solid var(--color-line); + border-radius: 14px; /* radius exemption: raw px */ + padding: calc(24 / var(--rem-base) * 1rem); + display: flex; + flex-direction: column; + gap: calc(18 / var(--rem-base) * 1rem); +} + +.advisory-facts-label { + font-family: var(--monospace-font-family); + font-size: calc(11.5 / var(--rem-base) * 1rem); + font-weight: 600; + color: var(--color-ink-muted); + letter-spacing: 0.06em; + text-transform: uppercase; +} + +.advisory-severity-chip { + margin-top: calc(8 / var(--rem-base) * 1rem); + font-size: calc(12 / var(--rem-base) * 1rem); + padding: calc(4 / var(--rem-base) * 1rem) calc(10 / var(--rem-base) * 1rem); +} + +.advisory-facts-value { + margin-top: calc(6 / var(--rem-base) * 1rem); + font-size: calc(14.5 / var(--rem-base) * 1rem); + line-height: 1.6; + color: var(--color-ink-2); +} + +.advisory-facts-value--mono { + font-family: var(--monospace-font-family); + font-size: calc(14 / var(--rem-base) * 1rem); + line-height: 1.7; + color: var(--color-ink); + font-weight: 600; +} + +a.advisory-facts-cta { + display: block; + margin: calc(4 / var(--rem-base) * 1rem) 0 0; + padding: calc(11 / var(--rem-base) * 1rem) calc(18 / var(--rem-base) * 1rem); + font-size: calc(14 / var(--rem-base) * 1rem); + text-align: center; +} + +/* ====================================================================== + Release detail (release-note/single.html) -- undesigned template, token + sweep only. Its h1/h2/pre/table typography already comes free from the + shared .static/.doc rules (doc.css, base.css); only the Resolved-Issues +
    grid and the floated Note
    ReferenceAffectedFixedCVSS scoreDescriptionReferenceAffectedFixedCVSSDescription
    {{ .Key }}{{ .Key }}
    {{ .Params.cve }} {{ .Params.affected }} {{ .Params.fixed }}{{ .Params.severity }}{{ .Params.severity }} {{ .Params.summary }}
    {{ $year }}{{ $year }}
    No issues reported
    - +
    - Releases by release date -
    - - - + + + {{ range . }} - - + + {{ end }} diff --git a/layouts/release-note/single.html b/layouts/release-note/single.html index 389489e250c..36819cbc5f4 100644 --- a/layouts/release-note/single.html +++ b/layouts/release-note/single.html @@ -16,5 +16,5 @@

    Keys

    You can verify your download by following these procedures and using these KEYS.

    - + {{ partial "footer.html" . }} diff --git a/layouts/releases/list.html b/layouts/releases/list.html index 7c6b4905fb6..66a4da24823 100644 --- a/layouts/releases/list.html +++ b/layouts/releases/list.html @@ -1,23 +1,33 @@ {{ partial "header.html" . }} -
    -
    - {{ .Content }} +
    +
    +
    +
    +
    +

    {{ .Title }}

    +

    Every release of every Camel project, newest first. + Supported releases are on the Download page.

    +
    -

    - On this page you'll find archived releases of: -

    - {{ range $category := sort (index .Site.Data "release-categories") ".order" }} -
    Apache {{ $category.name }}
    - {{ end }} -
    -

    + {{ range $category := sort (index site.Data "release-categories") ".order" }} +
    +

    Releases of {{ $category.name }}

    + {{ partial "releases/release-table.html" (where (where site.Pages "Section" "releases") ".Params.category" $category.id) }} +
    + {{ end }} +
    - {{ range $category := sort (index .Site.Data "release-categories") ".order" }} -

    Releases of {{ $category.name }}

    - {{ partial "releases/release-table.html" (where (where $.Site.Pages "Section" "releases") ".Params.category" $category.id) }} - {{ end }} -
    -
    + +
    +
    + {{ partial "footer.html" . }} diff --git a/layouts/security-advisory/single.html b/layouts/security-advisory/single.html index e29c59d27c5..5080ff58a18 100644 --- a/layouts/security-advisory/single.html +++ b/layouts/security-advisory/single.html @@ -1,36 +1,75 @@ {{ partial "header.html" . }}
    -
    -
    - -

    Apache Camel security advisory: {{ .Params.cve }}

    -

    Severity

    - {{ .Params.severity }} -

    Summary

    - {{ .Params.summary }} -

    Versions affected

    - {{ .Params.affected }} -

    Versions fixed

    - {{ .Params.fixed }} -

    Description

    - {{ .Params.description }} - {{ with .Content }} -

    Notes

    - {{ . }} - {{ end }} -

    Mitigation

    - {{ .Params.mitigation | markdownify }} -

    Credit

    - {{ .Params.credit }} -

    References

    -
    -
    PGP signed advisory data: {{ .Params.cve }}.txt.asc
    -
    Mitre CVE Entry: https://www.cve.org/CVERecord?id={{ .Params.cve }}
    -
    - -
    -
    +
    +
    + ← Security advisories + +
    +
    +
    Apache Camel security advisory
    +

    {{ .Params.cve }}

    +

    {{ .Params.summary }}

    + + {{ with .Params.description }} +
    +

    Description

    +

    {{ . }}

    +
    + {{ end }} + + {{ with .Params.mitigation }} +
    +

    Mitigation

    +

    {{ . | markdownify }}

    +
    + {{ end }} + + {{ with .Params.credit }} +
    +

    Credit

    +

    {{ . }}

    +
    + {{ end }} + + {{ with .Content }} +
    +

    Notes

    +
    {{ . }}
    +
    + {{ end }} + +
    +

    References

    + +
    +
    + + +
    +
    +
    {{ partial "footer.html" . }} From 10fb96df4d346e548e603530cfe0be3ba36b5389 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 19:17:04 -0400 Subject: [PATCH 101/209] fix(download,security): apply blocking review findings for tables group Add computed aria-labels to the repeated Signature/Checksum/Release notes/SBOM links in the download rows so a link-list/rotor screen reader view can distinguish them, and compose .security-grid from the shared .card-grid/.card-grid--2 primitives (matching how download.css already does this for .download-cards) instead of hand-rolling the same grid declarations. Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/security.css | 3 --- layouts/partials/download/rows.html | 10 +++++----- layouts/security/list.html | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/antora-ui-camel/src/css/security.css b/antora-ui-camel/src/css/security.css index 6c871fc9174..c605c1e6f06 100644 --- a/antora-ui-camel/src/css/security.css +++ b/antora-ui-camel/src/css/security.css @@ -21,9 +21,6 @@ } .security-grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: calc(18 / var(--rem-base) * 1rem); margin-top: calc(40 / var(--rem-base) * 1rem); } diff --git a/layouts/partials/download/rows.html b/layouts/partials/download/rows.html index 4dad0f0b44f..a8b710bf345 100644 --- a/layouts/partials/download/rows.html +++ b/layouts/partials/download/rows.html @@ -139,19 +139,19 @@ {{ $label = printf "SBOM (%s)" (replace $download.name "SBOM, CycloneDX " "") }} {{ end }} - {{ $label }} + {{ $label }} - Signature - Checksum + Signature + Checksum {{ else }} - {{ replace $download.title "{version}" $v }} + {{ replace $download.title "{version}" $v }} {{ end }} {{ end }} - Release notes + Release notes {{ end }} diff --git a/layouts/security/list.html b/layouts/security/list.html index 47728210b61..c672b36794a 100644 --- a/layouts/security/list.html +++ b/layouts/security/list.html @@ -9,7 +9,7 @@

    {{ .Title }}

    {{ .Params.lead }}

    -
    +
    {{ .Params.read_first.eyebrow }}

    {{ .Params.read_first.title }}

    From 362a34695f9dc49bfe684d33e319bcc5ea5f7fc0 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 19:19:23 -0400 Subject: [PATCH 102/209] fix(a11y): add aria-label to Community card "Read more" links The 7 repeated "Read more" links on the Community page were indistinguishable to screen-reader users out of context. Mirror the pattern already used in layouts/projects/list.html and the docs project cards. --- layouts/community/list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/community/list.html b/layouts/community/list.html index fc6550e95c9..4f489a38ead 100644 --- a/layouts/community/list.html +++ b/layouts/community/list.html @@ -17,7 +17,7 @@

    {{ .Title }}

    {{ .tag }}

    {{ .title }}

    {{ .body }}

    - Read more → + Read more → {{- end }} From 31ebcf7709675ee03035db4fb02665a282a2e9db Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 19:22:56 -0400 Subject: [PATCH 103/209] fix(tooling): scope safeHTML to fields that actually carry markup Applying `| safeHTML` unconditionally to every group item's .desc and group .intro disabled Go's default HTML-escaping on plain-text fields, so a bare `&` in the hawt.io description rendered as invalid HTML and would fail the repo's check:html gate (html-validate's no-raw-characters rule). Add explicit htmlDesc/htmlIntro flags in data/tooling.yaml for the handful of fields that legitimately embed markup (the two IDE group items, and the archetypes group's intro), and only apply safeHTML when those flags are set. Every other description now falls through Go's default auto-escaping, so the & in hawt.io's description renders as & as it did before this screen existed (previously inside a {{< table >}} cell escaped by Goldmark). --- data/tooling.yaml | 3 +++ layouts/tooling/list.html | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/data/tooling.yaml b/data/tooling.yaml index 9836654c04e..aedb6ac49dd 100644 --- a/data/tooling.yaml +++ b/data/tooling.yaml @@ -62,6 +62,7 @@ toolGroups: intro: >- Camel provides Maven Archetypes to quickly scaffold new projects. + htmlIntro: true mono: true items: - name: camel-archetype-java @@ -88,6 +89,7 @@ toolGroups: desc: A set of VS Code extensions for developing Camel applications — language support, debugging, and more. - name: Camel Language Server url: https://github.com/camel-tooling/camel-language-server + htmlDesc: true desc: >- LSP implementation providing completion, validation, hover, and outline. Packaged for @@ -96,6 +98,7 @@ toolGroups: Eclipse Desktop. - name: Camel Debug Adapter url: https://github.com/camel-tooling/camel-debug-adapter + htmlDesc: true desc: >- DAP implementation providing Camel textual route debugging. Packaged for diff --git a/layouts/tooling/list.html b/layouts/tooling/list.html index 0d5e91304d0..977f7056317 100644 --- a/layouts/tooling/list.html +++ b/layouts/tooling/list.html @@ -75,7 +75,7 @@

    Camel MCP Server

    {{- $g := . }}

    {{ .title }}

    - {{- with .intro }}

    {{ . | safeHTML }}

    {{ end }} + {{- with .intro }}

    {{ if $g.htmlIntro }}{{ . | safeHTML }}{{ else }}{{ . }}{{ end }}

    {{ end }}
    {{- range .items }}
    @@ -85,7 +85,7 @@

    {{ .title }}

    {{- else }} {{ .name }} {{- end }} -

    {{ .desc | safeHTML }}

    +

    {{ if .htmlDesc }}{{ .desc | safeHTML }}{{ else }}{{ .desc }}{{ end }}

    {{- end }}
    From b865444104123eb5408702d3fa17792f984c6712 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 19:27:22 -0400 Subject: [PATCH 104/209] fix(blog): restore paragraph spacing and fix orange contrast on hover Blog post body paragraphs had no vertical spacing between them because .doc p { margin: 0 } from doc.css governed unopposed once blog.css dropped its own margin declaration. Add .blog .post-content p + p with the spec's 12px top margin. Also swap --color-camel-orange (2.74:1, fails WCAG AA) for the WCAG-safe --link_hover-font-color on five hover states (.blog-category, .blog-rss, .blog-back-link, .blog-post-title a, .blog-post-continue) and for --color-orange-deep on the static .blog-post-day color, matching the pattern already used on the post screen for the same kind of text. Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/blog.css | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/antora-ui-camel/src/css/blog.css b/antora-ui-camel/src/css/blog.css index 402bfb6fc60..a5f324c2013 100644 --- a/antora-ui-camel/src/css/blog.css +++ b/antora-ui-camel/src/css/blog.css @@ -53,7 +53,7 @@ } .blog-category:hover { - color: var(--color-camel-orange); + color: var(--link_hover-font-color); } /* .blog-category.is-current lives in category.css: it only ever applies @@ -78,7 +78,7 @@ } .blog-rss:hover { - color: var(--color-camel-orange); + color: var(--link_hover-font-color); } .blog-rss .brand-icon { @@ -103,7 +103,7 @@ } .blog-back-link:hover { - color: var(--color-camel-orange); + color: var(--link_hover-font-color); } .blog-posts { @@ -130,7 +130,7 @@ font-size: calc(40 / var(--rem-base) * 1rem); line-height: 1; letter-spacing: -0.03em; - color: var(--color-camel-orange); + color: var(--color-orange-deep); } .blog-post-month { @@ -180,7 +180,7 @@ } .blog-post-title a:hover { - color: var(--color-camel-orange); + color: var(--link_hover-font-color); } .blog-post-summary { @@ -207,7 +207,7 @@ } .blog-post-continue:hover { - color: var(--color-camel-orange); + color: var(--link_hover-font-color); } /* Numbered pager: mono, ink active pill (blog.md §4). Scoped by the shared @@ -440,6 +440,10 @@ color: var(--color-ink-2); } +.blog .post-content p + p { + margin-top: calc(12 / var(--rem-base) * 1rem); +} + .blog .post-content blockquote { margin: calc(24 / var(--rem-base) * 1rem) 0 0; padding: calc(18 / var(--rem-base) * 1rem) calc(22 / var(--rem-base) * 1rem); From 86e333f952f2c0ea10a44da555118654f4bcaccd Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 19:31:05 -0400 Subject: [PATCH 105/209] fix(releases): address blocking review findings on advisory screen - Scope a{color} in .advisory-section-body so bare-URL autolinks inside Mitigation/Notes markdown render in the site's link color instead of the browser default blue. - Add code-block styling scoped to .advisory-section-body so
    
      blocks in the Notes section get the same dark background/padding/
      overflow-x treatment as .doc pre, instead of unstyled plain text.
    - Change .advisory-back's color from --color-ink-muted (3.6-3.9:1, fails
      WCAG AA) to --color-ink-soft (~7:1), matching the already-shipped
      .projects-back this feature's own spec cites as precedent.
    ---
     antora-ui-camel/src/css/release.css | 25 ++++++++++++++++++++++++-
     1 file changed, 24 insertions(+), 1 deletion(-)
    
    diff --git a/antora-ui-camel/src/css/release.css b/antora-ui-camel/src/css/release.css
    index c1c939e1282..092ba22cdcc 100644
    --- a/antora-ui-camel/src/css/release.css
    +++ b/antora-ui-camel/src/css/release.css
    @@ -183,7 +183,7 @@
       font-family: var(--monospace-font-family);
       font-size: calc(13 / var(--rem-base) * 1rem);
       font-weight: 600;
    -  color: var(--color-ink-muted);
    +  color: var(--color-ink-soft);
       text-decoration: none;
     }
     
    @@ -244,6 +244,29 @@
       text-wrap: pretty;
     }
     
    +.advisory-section-body a {
    +  color: var(--link-font-color);
    +}
    +
    +.advisory-section-body a:hover {
    +  color: var(--link_hover-font-color);
    +}
    +
    +.advisory-section-body pre {
    +  background: var(--pre-background);
    +  border-radius: calc(10 / var(--rem-base) * 1rem);
    +  color: var(--pre-font-color);
    +  display: block;
    +  font-size: calc(13.5 / var(--rem-base) * 1rem);
    +  line-height: 1.7;
    +  overflow-x: auto;
    +  padding: calc(18 / var(--rem-base) * 1rem) calc(20 / var(--rem-base) * 1rem);
    +}
    +
    +.advisory-section-body pre code {
    +  color: inherit;
    +}
    +
     .advisory-references {
       display: flex;
       flex-direction: column;
    
    From 7eb4a50493caabc40c1133719d407ceda7e100ce Mon Sep 17 00:00:00 2001
    From: Adriano Machado <60320+ammachado@users.noreply.github.com>
    Date: Fri, 4 Sep 2026 19:32:34 -0400
    Subject: [PATCH 106/209] chore(antora-ui): regenerate the bundle for the
     remaining redesign pages
    
    ---
     .../{site-fed18c630b.css => site-f1cc375821.css} |  4 ++--
     antora-ui-camel/public/_/data/rev-manifest.json  |  4 ++--
     antora-ui-camel/public/_/helpers/asset.js        |  4 ++--
     .../{site-48ffd3a465.js => site-c7bbbf7be8.js}   | 16 +++++-----------
     .../public/_/partials/footer-scripts.hbs         |  2 +-
     .../public/_/partials/head-styles.hbs            |  2 +-
     antora-ui-camel/public/_/rev-manifest            |  4 ++--
     7 files changed, 15 insertions(+), 21 deletions(-)
     rename antora-ui-camel/public/_/css/{site-fed18c630b.css => site-f1cc375821.css} (50%)
     rename antora-ui-camel/public/_/js/{site-48ffd3a465.js => site-c7bbbf7be8.js} (78%)
    
    diff --git a/antora-ui-camel/public/_/css/site-fed18c630b.css b/antora-ui-camel/public/_/css/site-f1cc375821.css
    similarity index 50%
    rename from antora-ui-camel/public/_/css/site-fed18c630b.css
    rename to antora-ui-camel/public/_/css/site-f1cc375821.css
    index b557504ff34..97bdeac2f8a 100644
    --- a/antora-ui-camel/public/_/css/site-fed18c630b.css
    +++ b/antora-ui-camel/public/_/css/site-f1cc375821.css
    @@ -1,4 +1,4 @@
    -@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:300;src:local("Open Sans Light"),local("OpenSans-Light"),url(../font/open-sans-latin-ext-300.woff2) format("woff2"),url(../font/open-sans-latin-ext-300.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:300;src:local("Open Sans Light Italic"),local("OpenSans-LightItalic"),url(../font/open-sans-latin-ext-300-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-300-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:700;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(../font/open-sans-latin-ext-700.woff2) format("woff2"),url(../font/open-sans-latin-ext-700.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:700;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(../font/open-sans-latin-ext-700-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-700-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold"),local("OpenSans-ExtraBold"),url(../font/open-sans-latin-ext-800.woff2) format("woff2"),url(../font/open-sans-latin-ext-800.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold Italic"),local("OpenSans-ExtraBoldItalic"),url(../font/open-sans-latin-ext-800-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-800-italic.woff) format("woff")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:500;src:local("Archivo Medium"),local("Archivo-Medium"),url(../font/archivo-latin-500-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:600;src:local("Archivo SemiBold"),local("Archivo-SemiBold"),url(../font/archivo-latin-600-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:700;src:local("Archivo Bold"),local("Archivo-Bold"),url(../font/archivo-latin-700-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:800;src:local("Archivo ExtraBold"),local("Archivo-ExtraBold"),url(../font/archivo-latin-800-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:local("JetBrains Mono Regular"),local("JetBrainsMono-Regular"),url(../font/jetbrains-mono-latin-400-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:local("JetBrains Mono Medium"),local("JetBrainsMono-Medium"),url(../font/jetbrains-mono-latin-500-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:local("JetBrains Mono SemiBold"),local("JetBrainsMono-SemiBold"),url(../font/jetbrains-mono-latin-600-normal.woff2) format("woff2")}.fa{display:inline-block}.fa-lock::before{content:"🔒"}body,html{height:100%}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}::-moz-selection{background:#cf7428;color:#fff}::selection{background:#cf7428;color:#fff}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;-webkit-text-size-adjust:100%}@media screen and (width >= 1025px){html{font-size:1.125em}}body{background:#faf7f1;color:#3a332b;font-family:Open Sans,system-ui,sans-serif;line-height:1.15;margin:0}h1,h2,h3,h4,h5,h6{font-family:Archivo,sans-serif}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{color:#211c17;font-family:JetBrains Mono,ui-monospace,monospace;overflow-wrap:break-word}b,dt,strong,th{font-weight:700}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}mark{color:#e97826;font-weight:700;background:#fff}.text-center{text-align:center}.body{min-height:calc(100vh - 42.66667rem);word-wrap:break-word}@media screen and (width >= 1025px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:3.66667rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (width >= 769px){.nav-container{width:15.55556rem}}@media screen and (width >= 1025px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible;padding:0}@media screen and (width <= 1024px){.nav-category{margin-left:1rem}}.nav{background:#f4eee3;border-right:1px solid #e7e0d5;height:calc(100vh - 6.22222rem);position:relative;top:2.55556rem}@media screen and (width >= 769px){.nav{-webkit-box-shadow:none;box-shadow:none}}@media screen and (width >= 1025px){.nav{top:3.66667rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.66667rem)}}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}.nav-search{-webkit-box-flex:0;-ms-flex:none;flex:none;padding:.77778rem .88889rem;border-bottom:1px solid #e7e0d5;position:relative}.nav-search .navbar-search{padding:0}.nav-search input.search{width:100%;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;padding:.44444rem 1.88889rem .44444rem 1.77778rem;background:#fff no-repeat .61111rem/.72222rem url(../img/search-a73cfec790.svg);color:#211c17;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;outline:0}.nav-search input.search::-webkit-input-placeholder{color:#5c554c}.nav-search input.search::-moz-placeholder{color:#5c554c}.nav-search input.search:-ms-input-placeholder{color:#5c554c}.nav-search input.search::-ms-input-placeholder{color:#5c554c}.nav-search input.search::placeholder{color:#5c554c}.nav-search input.search:focus{border-color:#d9ccb8}.nav-search-hint{position:absolute;top:50%;right:1.5rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);padding:.05556rem .33333rem;border-radius:.22222rem;background:#f4eee3;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;pointer-events:none}.nav-search:focus-within .nav-search-hint{display:none}.nav-search #search-cancel{position:absolute;inset:50% 1.5rem auto auto;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none;height:.88889rem;cursor:pointer}.nav-search #search_results{position:absolute;top:100%;left:.88889rem;width:min(600px,90vw);max-width:none;min-width:0;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;background:#fff;z-index:5;max-height:80vh;overflow-y:auto;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);scrollbar-width:thin}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;padding-bottom:2.55556rem;position:relative}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;inset:0}.nav-item[data-depth="2"]>.nav-item-toggle{margin-left:-.675em}.nav-item .nav-list{margin-left:1rem}.nav-menu{min-height:0;width:100%;padding:.77778rem .88889rem 1.11111rem;line-height:1.35;position:relative;word-break:break-word;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.nav-menu::-webkit-scrollbar{width:.425em}.nav-menu::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb:active,.nav-menu::-webkit-scrollbar-thumb:hover{background:grey}@media screen and (width <= 1024px){.nav-menu::-webkit-scrollbar{width:0;background:transparent}}.nav-menu h3.title{color:#211c17;font-family:Archivo,sans-serif;font-size:.77778rem;font-weight:700;margin:0 0 .44444rem;padding:0}.nav-menu a{color:inherit}.nav-list{margin:0;padding:0}.nav-menu>.nav-list{margin-bottom:.5rem}.nav-item{list-style:none;margin-top:0}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.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-8823676a4b.svg) no-repeat 50%/.5rem;border:none;outline:none;line-height:inherit;position:absolute;height:1.33333rem;width:.88889rem;margin-left:-.88889rem}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.nav-menu .nav-text,.nav-menu a.nav-link{display:block;padding:.27778rem .44444rem;border-radius:.33333rem;color:#3a332b;font-size:.75rem;font-weight:400;line-height:1.4}.nav-menu .nav-text:hover,.nav-menu a.nav-link:hover{background:#e7e0d5;color:#211c17;text-decoration:none}.is-current-page>.nav-text,.is-current-page>a.nav-link{background:#fbead8;color:#a84e0d;font-weight:700}.nav-menu .is-current-page>.nav-text:hover,.nav-menu .is-current-page>a.nav-link:hover{background:#fbead8;color:#853c09}.breadcrumbs li .image>img,.nav-link .image>img{width:1em}.nav-panel-explore{background:#f4eee3;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;right:0;bottom:0;left:0;max-height:calc(50% + 2.55556rem)}.nav-panel-explore,.nav-panel-explore .context{display:-webkit-box;display:-ms-flexbox;display:flex}.nav-panel-explore .context{-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:2.55556rem;padding:0 .88889rem;border-top:1px solid #e7e0d5;-webkit-box-shadow:none;box-shadow:none;color:#5c554c;cursor:pointer;font-size:.72222rem;line-height:1}.nav-panel-explore .context .title{font-weight:600}.nav-panel-explore .context .noversion,.nav-panel-explore .context .version{display:block;padding:.16667rem 1.22222rem .16667rem .5rem;border:1px solid #e7e0d5;border-radius:.33333rem;background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.nav-panel-explore .components{line-height:1.6;-webkit-box-shadow:inset 0 1px 5px #f5f5f5;box-shadow:inset 0 1px 5px #f5f5f5;background:#f0f0f0;padding:.5rem .75rem 0;margin:0;overflow-y:auto;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:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:700}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;margin-top:-.25rem;line-height:1}.nav-panel-explore .component .version{display:block;margin:.375rem .375rem 0 0}.nav-panel-explore .component .title a{color:inherit;display:inherit}.nav-panel-explore .component .version a{border:1px solid #e7e0d5;border-radius:.25rem;color:inherit;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentcolor;opacity:.9;font-weight:700}@media screen and (width <= 1024px){aside.toc.sidebar{display:none}}@media screen and (width >= 1025px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}main.article>.content{display:grid;grid-template-columns:minmax(0,1fr);gap:3.11111rem;max-width:65.55556rem;padding:2.44444rem 2.22222rem 4.44444rem}main.article>.content:has(>aside.toc.sidebar){grid-template-columns:minmax(0,1fr) 12.22222rem}main.article>.content>.doc{margin:0;max-width:none;padding:0}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 12.22222rem;flex:0 0 12.22222rem;min-width:0}.toc.sidebar .toc-menu ul{scrollbar-width:thin}.toc.sidebar .toc-menu ul::-webkit-scrollbar{width:.425em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:active,.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:hover{background:grey}}@media screen and (width >= 1216px){aside.toc.sidebar{-ms-flex-preferred-size:12.22222rem;flex-basis:12.22222rem}}.toolbar{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:rgba(250,247,241,.92);backdrop-filter:blur(8px);border-bottom:1px solid #e7e0d5;color:#5c554c;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.75rem;gap:1rem;height:2.55556rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:0 2.22222rem;position:sticky;top:3.66667rem;z-index:2}.static.toolbar,.toolbar{-webkit-box-shadow:none;box-shadow:none}.static.toolbar{border-bottom:0;margin:0;max-width:100vw}@media screen and (width <= 1024px){.toolbar{top:3.66667rem;padding:0 .88889rem}}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu-8775cec4be.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;height:2.5rem;padding:0;width:2.5rem;margin-right:-.25rem}@media screen and (width >= 1025px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back-e8d811f74c.svg);background-size:41.5%}.edit-this-page{display:none;padding:0}@media screen and (width >= 1025px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#5c554c;font-weight:600}.toolbar .edit-this-page a:hover{color:#a84e0d}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;min-width:0;padding:0;line-height:1.35}@media screen and (width >= 1025px){.breadcrumbs{display:block}}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .44444rem}.breadcrumbs li:last-of-type::after{content:none}.toolbar .breadcrumbs a{color:#5c554c}.toolbar .breadcrumbs a:hover{color:#a84e0d}.toolbar .breadcrumbs li:last-of-type a{color:#211c17;font-weight:600;text-decoration:none}.page-versions{display:none;margin:0;position:relative;line-height:1}@media screen and (width >= 1025px){.page-versions{display:block}}.page-versions .version-menu-toggle{background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;color:#5c554c;cursor:pointer;outline:none;padding:.16667rem 1.22222rem .16667rem .5rem;position:relative;z-index:3}.page-versions .version-menu,.page-versions .version-menu-toggle{border:1px solid #e7e0d5;border-radius:.33333rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.page-versions .version-menu{background-color:#fff;padding:1.66667rem .5rem .44444rem;position:absolute;top:0;left:0;min-width:100%}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#333}.toc.sidebar .toc-menu{margin-right:0;position:sticky;top:7.22222rem}.toc .toc-menu h3{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;line-height:1.3;margin:0;padding-bottom:.55556rem;text-transform:uppercase}.toc.sidebar .toc-menu h3{display:block;height:auto}.toc .toc-menu ul{font-size:.75rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 9.72222rem);overflow-y:auto}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.33333rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}@media screen and (width <= 1024px){.toc .toc-menu ul li ul li ul li a{padding-left:1.33333rem}}.toc .toc-menu a{border-left:2px solid #e7e0d5;color:#5c554c;display:block;padding:.33333rem 0 .33333rem .66667rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:not(.is-active):hover{border-left-color:#d9ccb8;color:#211c17}.toc .toc-menu a.is-active{border-left-color:#e97826;color:#211c17;font-weight:600}.sidebar.toc .toc-menu a:focus{background:#f4eee3}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#3a332b;font-size:inherit;-ms-hyphens:auto;hyphens:auto;line-height:1.7;margin:0 auto;padding:0 1rem 4rem}@media screen and (width >= 1025px){.doc{font-size:.88889rem;margin:0 2rem;max-width:75.88889rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#211c17;font-weight:700;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page,.static>h1:first-child{font-size:2.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0}.doc>h1.page img{width:2rem}.doc .doc-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.doc>#preamble>.sectionbody>.paragraph:first-child>p,.doc>h1.page+.paragraph>p{font-size:.91667rem;line-height:1.7;margin:1.11111rem 0 0}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f4eee3;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){font-size:1.44444rem;letter-spacing:-.02em;margin:2.44444rem 0 0;overflow-wrap:break-word;padding:.44444rem 0 0}.doc h3:not(.discrete){font-weight:700;overflow-wrap:break-word}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor,.doc td .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em;background-image:none}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before,.doc td .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,.doc td:hover .anchor{visibility:visible}.doc p{margin:0}.doc .table-wrapper{background:#fff;border:1px solid #e7e0d5;border-radius:.55556rem;margin:.88889rem 0 0;overflow-x:auto}.doc .table-wrapper::-webkit-scrollbar{height:.425em}.doc .table-wrapper::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb:active,.doc .table-wrapper::-webkit-scrollbar-thumb:hover{background:grey}.doc .table-wrapper table{width:100%}.doc .tableblock p{font-size:inherit}.doc .tableblock td:not(:first-child)>p,.doc .tableblock thead,.doc :not(td)>.content,.doc :not(td)>p{-ms-hyphens:auto;hyphens:auto}.doc a{color:#a84e0d;word-break:break-word;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}.doc .camel-project .links a,.doc .sect2 h3 a,.doc .section .links a,.doc li a,.doc table a{background:none}.doc table.tableblock td a{word-break:normal}.doc table.tableblock tbody tr td:first-child{width:25%;overflow-wrap:anywhere;font-weight:700}.doc a:hover{color:#853c09}.doc a.unresolved{color:#d32f2f}.doc i.fa{font-style:normal}.doc p code,.doc thead code{background:#f4eee3;border-radius:.22222rem;color:#211c17;font-size:.80556rem;overflow-wrap:break-word;padding:.11111rem .33333rem}.doc pre{font-size:.75rem;line-height:1.7;margin:0}.doc blockquote{margin:0}.doc .right{float:right}.doc .left{float:left}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock{margin:1rem 0 0;word-break:break-word}.doc table.tableblock{border-collapse:collapse;font-size:.83333rem;margin:0}.doc table.stretch{width:100%}.doc table.tableblock thead th{background:#f4eee3;border-bottom:1px solid #e7e0d5;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;letter-spacing:.06em;padding:.61111rem .88889rem;text-align:left;text-transform:uppercase}.doc table.tableblock>:not(thead) th,.doc table.tableblock td{border-top:1px solid #f0e9dd;border-bottom:0;padding:.66667rem .88889rem}.doc table.tableblock tbody tr:first-child>td,.doc table.tableblock tbody tr:first-child>th{border-top:0}.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{background:#fff;border:1px solid #e7e0d5;border-left:.16667rem solid #e97826;border-radius:0 .66667rem .66667rem 0;-webkit-box-shadow:none;box-shadow:none;margin:1.55556rem 0 0;padding:.88889rem 1.11111rem}.doc .admonitionblock .table-wrapper,.doc .colist .table-wrapper{background:none;border:0;border-radius:0;margin:0;overflow:visible}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.80556rem;line-height:1.6}.doc .admonitionblock td.content>:first-child{margin:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock table{border-collapse:collapse;position:relative;table-layout:auto;width:100%}.doc .admonitionblock td.content{background:none;color:#5c554c;padding:0;width:auto}.doc .admonitionblock td.icon{padding:0 .77778rem 0 0;vertical-align:top;white-space:nowrap;width:1px}.doc .admonitionblock .icon i{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-style:normal;font-weight:600;height:auto;letter-spacing:.04em;line-height:1.4;padding:.16667rem .44444rem;text-transform:uppercase;vertical-align:top}.doc .admonitionblock .icon i::after{content:attr(title);-ms-hyphens:none;hyphens:none;-webkit-writing-mode:horizontal-tb;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.doc .admonitionblock.caution{border-left-color:#a0439c}.doc .admonitionblock.caution .icon i{background:#f7e9f6;color:#8e3b8a}.doc .admonitionblock.important{border-left-color:#d32f2f}.doc .admonitionblock.important .icon i{background:#fce9e9;color:#b02525}.doc .admonitionblock.warning{border-left-color:#e18114}.doc .admonitionblock.warning .icon i{background:#fdf0dc;color:#8a5209}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock img{display:block}.doc .image>img,.doc .imageblock img{height:auto;max-width:100%}.doc table.tableblock td .imageblock img{max-width:50px}#preamble .abstract blockquote{background:#f4eee3;border-left:5px solid #e7e0d5;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock{background:#f4eee3;border-left:5px solid #5d5d5d;color:#5d5d5d;padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#5c554c;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc table.tableblock .paragraph{margin:0;padding:0}.doc .olist .admonitionblock,.doc .ulist .admonitionblock,.doc table.tableblock .admonitionblock{padding:.88889rem 1.11111rem}.doc ol,.doc ul{margin:0;padding:0 0 0 1.22222rem}.doc .olist>ol,.doc .ulist>ul{line-height:1.8}.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:.5rem;list-style:none}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem}.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:.5rem}.doc .olist li,.doc .ulist li{margin-bottom:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{color:#5d5d5d;font-size:.88889rem;font-weight:700;font-style:italic;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc .admonitionblock .title+.paragraph{margin-top:0}.doc .exampleblock>.content{background:#faf7f1;border:.25rem solid #e7e0d5;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#f4eee3;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:700;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight code,.doc pre:not(.highlight){background:#211c17;border-radius:.55556rem;-webkit-box-shadow:none;box-shadow:none;color:#f0e9df;display:block;overflow-x:auto;padding:1rem 1.11111rem}.doc .listingblock{margin-top:.77778rem}.doc pre code{color:inherit}.doc pre.highlight code::-webkit-scrollbar{height:.425em}.doc pre.highlight code::-webkit-scrollbar-track{background:#2b2620;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb{background:#34302a;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb:active,.doc pre.highlight code::-webkit-scrollbar-thumb:hover{background:#8f867a}.doc pre.highlight{position:relative}.doc .listingblock code[data-lang]::before{content:attr(data-lang);display:none;color:#8f867a;font-size:.75rem;letter-spacing:.05em;line-height:1;text-transform:uppercase;position:absolute;top:.25rem;right:.25rem}.doc .listingblock:hover code[data-lang]::before{display:none}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:#8f867a;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:500;line-height:1.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1.25em;height:1.25em;cursor:pointer;position:relative}.doc .source-toolbox .copy-button::before{content:"";display:block;width:1.25em;height:1.25em;background-image:url(../img/copy-d7c1e3194d.svg);background-size:contain;background-repeat:no-repeat;background-position:50%;-ms-flex-negative:0;flex-shrink:0}.doc .source-toolbox .copy-button.clicked::before{background-image:url(../img/copy-checkmark-9a4caf1664.svg)}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#3a332b;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#3a332b;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .3rem 1.5rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;font-style:normal;height:1.25em;line-height:1.2;text-align:center;width:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#f4eee3;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #faf7f1 inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #faf7f1;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:700;line-height:.90909}.doc .icon i::after,.doc .menuseq,.doc .path,.doc a.bare,.doc b.button,.doc code,.doc kbd{-ms-hyphens:none;hyphens:none}@media screen and (width <= 626px){#preamble+.sect1,.doc .sect1+.sect1{overflow-wrap:break-word}}div.badges p{text-align:left}div.badges span{color:#fff;padding:.15rem .3rem;font-weight:400;font-style:normal;font-size:.8rem}div.badges span.badge-key{background-color:#555;border-radius:.2rem 0 0 .2rem}div.badges span.badge-version{background-color:#217ee7;border-radius:0 .2rem .2rem 0}div.badges span.badge-supported{background-color:#4d4fb7;border-radius:0 .2rem .2rem 0}div.badges span.badge-unsupported{background-color:#d32f2f;border-radius:0 .2rem .2rem 0}.static{margin:0 auto}.static dl,.static ol,.static p,.static pre,.static ul{margin:1rem 0 0}.static a.icon{margin:2rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;text-align:center;background:none}.static .box,.static a.icon{display:-webkit-box;display:-ms-flexbox;display:flex}.static .box{margin:1rem 0}.static .box img{margin-top:1rem;height:6rem;margin-right:.5rem}.static .icon a{background-image:none}@media screen and (width >= 1025px){.static{max-width:66.66667rem}}@media screen and (width <= 1024px){.static .box,.static .content,.static .icon{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0;text-align:center;width:100%}.static .box .content{width:100%}.static .box img{height:6rem;max-width:25vw;margin-left:auto}.static .box img:only-child{margin-left:auto;margin-right:auto}.static .box img+img{margin-left:1rem;margin-right:auto}.static .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.static a.icon{margin:0;width:100%}}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.66667rem}.navbar{background:rgba(250,247,241,.9);backdrop-filter:blur(10px);border-bottom:1px solid #e7e0d5;color:#5c554c;font-size:.80556rem;height:3.66667rem;position:fixed;top:0;width:100%;z-index:4}.navbar-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.55556rem;height:100%;width:100%;max-width:66.66667rem;margin-inline:auto;padding-inline:1.77778rem}.navbar a{text-decoration:none}.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.22222rem}.navbar-item{font-weight:600;font-size:.80556rem;color:#5c554c;white-space:nowrap}.navbar-item:hover{color:#211c17}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.61111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;height:auto}.navbar-logo{width:2rem;height:2rem}.navbar-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1.05556rem;letter-spacing:-.02em;color:#211c17;white-space:nowrap}.navbar-burger{color:#5c554c;background:none;border:none;outline:none;line-height:1;height:3rem;position:relative;width:2rem;-ms-flex-negative:0;flex-shrink:0;top:-2.1px;padding:0}.navbar-burger:focus{outline:none}.navbar-burger span{background:#5c554c;display:block;height:1px;left:50%;margin-left:-7px;position:absolute;top:60%;width:25px}.navbar-burger span:first-child{margin-top:-10px}.navbar-burger span:nth-child(2){margin-top:-3px}.navbar-burger span:nth-child(3){margin-top:4px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:left top;transform-origin:left top;margin-top:-.75rem}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:left bottom;transform-origin:left bottom}@media screen and (width <= 1024px){.navbar-menu{display:none}.navbar-menu.is-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:0;position:absolute;top:3.66667rem;left:0;right:0;max-height:calc(100vh - 3.66667rem);overflow-y:auto;background:#faf7f1;border-bottom:1px solid #e7e0d5;padding:.44444rem 1.77778rem}.navbar-menu.is-active .navbar-item{padding:.66667rem 0;border-bottom:1px solid #f0e9dd}.navbar-burger{display:block}}@media screen and (width >= 1025px){.navbar-burger{display:none}}.navbar-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.77778rem;margin-left:auto}.navbar-github .brand-icon{height:1.11111rem;width:1.11111rem;fill:#5c554c;display:block}.navbar-github:hover .brand-icon{fill:#211c17}a.button.navbar-cta{margin:0;padding:.5rem 1rem;border-radius:.38889rem;font-size:.80556rem}.header .navbar-search{padding:0}.header .navbar-search input{border:1px solid #e7e0d5;border-radius:.38889rem;width:11.11111rem;margin:0;padding:.33333rem .55556rem .33333rem 1.66667rem;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;background:no-repeat .5rem/.9rem url(../img/search-a73cfec790.svg);background-color:#fff;color:#211c17;outline:0}.header .navbar-search input:focus-within{background-color:#fff;border-color:#d9ccb8}.header #search-cancel{position:relative;bottom:calc(50% + .1rem);left:calc(100% - 1.25rem);height:1rem;display:none;cursor:pointer}.header #search_results{top:3.66667rem;background:rgba(250,247,241,.9);text-align:left;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);position:absolute;margin-right:10px;overflow-y:auto;max-height:80vh;max-width:min(600px,90vw);min-width:300px;scrollbar-width:thin}#search_results::-webkit-scrollbar{width:.425em}#search_results::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb:active,#search_results::-webkit-scrollbar-thumb:hover{background:grey}.result_header{font-weight:600;color:#211c17;padding-right:.5rem}#search_results div.result{padding:.25rem;pointer-events:none}#search_results div.result:hover{background:#f5f5f5}#search_results div.heading{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#search_results dt{padding:.5rem 0 .5rem .5rem;color:#e97826;text-transform:uppercase;font-weight:700;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#search_results dt.version{height:1.75rem;padding:.3rem;border:2px solid #e97826;border-radius:25px;text-align:center;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}#search_results dd{margin-right:2rem;word-break:break-word}#search_results a{pointer-events:auto;padding:.5rem}#search_results a:hover{text-decoration:underline;-webkit-text-decoration-color:#c1c1c1;text-decoration-color:#c1c1c1}.result_summary{color:#333;padding-top:.3rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}#search_results div.footer-search{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;padding:.75rem}div.footer-search h4{color:#211c17;width:5rem}.no_search_results{padding:1rem;font-weight:700;color:#211c17;border-bottom:2px solid #f5f5f5}.algolia-docsearch-suggestion--highlight{font-weight:700;color:#333}.results-hidden #search_results{display:none}@media (width <= 1024px){.header .navbar-search{min-width:0}.header .navbar-search input{width:100%}.header #search-cancel{margin-top:.75rem}.header #search_results{left:0;width:100vw;top:3.66667rem}}@media (width <= 500px){.header .navbar-search,.navbar-github{display:none}}@media (width <= 430px){.navbar-wordmark{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}}footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#211c17;color:#c4bbac;font-size:.83333rem;line-height:1.6;padding:0;-ms-flex-negative:0;flex-shrink:0}footer .footer{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:2.22222rem;width:100%;max-width:66.66667rem;margin-inline:auto;padding-block:3.11111rem 2.22222rem;padding-inline:1.77778rem}.footer-brand{display:grid;grid-template-columns:auto 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:.61111rem;-moz-column-gap:.61111rem;column-gap:.61111rem}.footer-logo{width:1.88889rem;height:1.88889rem}.footer-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1rem;color:#faf7f1}.footer-blurb{grid-column:1/-1;font-size:.75rem;line-height:1.6;color:#8f867a;margin:.88889rem 0 0;max-width:15.55556rem}footer .footer p.remark{grid-column:1/-1;border-top:1px solid #34302a;margin:0;padding:1.22222rem 0 0;font-size:.69444rem;color:#8f867a}footer .footer a{color:#c4bbac}footer .footer .context{display:inline-block;margin:0 0 1rem}footer .footer .context a{font-size:.83333rem;text-transform:uppercase}footer .footer .context a::after{content:" ";display:inline-block;border-radius:50%;width:8px;height:8px;margin:0 1rem;background:#34302a}footer .footer .context:last-child a::after{display:none}footer .footer .footer-column{margin:0}footer .footer .footer-column dt{font-family:Archivo,sans-serif;font-weight:700;font-size:.72222rem;letter-spacing:.06em;text-transform:uppercase;color:#faf7f1;margin-bottom:.77778rem}footer .footer .footer-column dt label:first-of-type::after{content:"";display:block;position:relative;bottom:0;left:0;height:2px;width:3rem;background:#c4bbac}footer .footer .footer-column dd{margin:0 0 .55556rem}footer .footer .footer-column dd a{font-size:.77778rem;color:#c4bbac}footer .footer .footer-column dd a:hover{color:#faf7f1}.footer-tools{position:relative;top:-2rem;height:0;text-align:right;color:#8a8074;font-size:.72222rem}.footer-tools a{display:inline-block;padding:.4rem;border-radius:.4rem .4rem 0 0;height:2rem;color:#5c554c}.footer-tools a:hover{color:#211c17}footer .resources{grid-column:1/-1;text-align:center}footer .footer .footer-icons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;grid-column:1/-1;line-height:1.6;padding:.5rem;font-weight:700}footer .footer .footer-icons .brand-icon{height:2em;width:1.75em;margin:.35rem;fill:#c4bbac}footer .footer .footer-icons a:hover .brand-icon{fill:#faf7f1}footer .footer dl dt label:nth-child(2),footer .footer input[type=checkbox]{display:none}@media screen and (width <= 1024px){footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}footer .footer{grid-template-columns:1fr}footer .footer .footer-column dt{margin-bottom:1rem;display:-webkit-box;display:-ms-flexbox;display:flex}footer .footer dl dt label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}footer .footer dl dt label:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}footer .footer dl dt label:nth-child(2){display:block;height:1.75rem;width:1.75rem;line-height:1.75rem;font-size:1.75rem;-webkit-transition:.2s;transition:.2s}footer .footer input[type=checkbox]:checked+dl dt label:nth-child(2){-webkit-transform:rotate(45deg);transform:rotate(45deg)}footer .footer dl dd:first-of-type{margin-top:1rem}footer .footer .footer-icons .brand-icon{height:1.5rem}footer input[type=checkbox]:checked+dl dd{display:block}footer input[type=checkbox]+dl dd{display:none}}
    +@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:300;src:local("Open Sans Light"),local("OpenSans-Light"),url(../font/open-sans-latin-ext-300.woff2) format("woff2"),url(../font/open-sans-latin-ext-300.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:300;src:local("Open Sans Light Italic"),local("OpenSans-LightItalic"),url(../font/open-sans-latin-ext-300-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-300-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:700;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(../font/open-sans-latin-ext-700.woff2) format("woff2"),url(../font/open-sans-latin-ext-700.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:700;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(../font/open-sans-latin-ext-700-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-700-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold"),local("OpenSans-ExtraBold"),url(../font/open-sans-latin-ext-800.woff2) format("woff2"),url(../font/open-sans-latin-ext-800.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold Italic"),local("OpenSans-ExtraBoldItalic"),url(../font/open-sans-latin-ext-800-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-800-italic.woff) format("woff")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:500;src:local("Archivo Medium"),local("Archivo-Medium"),url(../font/archivo-latin-500-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:600;src:local("Archivo SemiBold"),local("Archivo-SemiBold"),url(../font/archivo-latin-600-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:700;src:local("Archivo Bold"),local("Archivo-Bold"),url(../font/archivo-latin-700-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:800;src:local("Archivo ExtraBold"),local("Archivo-ExtraBold"),url(../font/archivo-latin-800-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:local("JetBrains Mono Regular"),local("JetBrainsMono-Regular"),url(../font/jetbrains-mono-latin-400-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:local("JetBrains Mono Medium"),local("JetBrainsMono-Medium"),url(../font/jetbrains-mono-latin-500-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:local("JetBrains Mono SemiBold"),local("JetBrainsMono-SemiBold"),url(../font/jetbrains-mono-latin-600-normal.woff2) format("woff2")}.fa{display:inline-block}.fa-lock::before{content:"🔒"}body,html{height:100%}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}::-moz-selection{background:#cf7428;color:#fff}::selection{background:#cf7428;color:#fff}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;-webkit-text-size-adjust:100%}@media screen and (width >= 1025px){html{font-size:1.125em}}body{background:#faf7f1;color:#3a332b;font-family:Open Sans,system-ui,sans-serif;line-height:1.15;margin:0}h1,h2,h3,h4,h5,h6{font-family:Archivo,sans-serif}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{color:#211c17;font-family:JetBrains Mono,ui-monospace,monospace;overflow-wrap:break-word}b,dt,strong,th{font-weight:700}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}mark{color:#e97826;font-weight:700;background:#fff}.text-center{text-align:center}.body{min-height:calc(100vh - 42.66667rem);word-wrap:break-word}@media screen and (width >= 1025px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:3.66667rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (width >= 769px){.nav-container{width:15.55556rem}}@media screen and (width >= 1025px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible;padding:0}@media screen and (width <= 1024px){.nav-category{margin-left:1rem}}.nav{background:#f4eee3;border-right:1px solid #e7e0d5;height:calc(100vh - 6.22222rem);position:relative;top:2.55556rem}@media screen and (width >= 769px){.nav{-webkit-box-shadow:none;box-shadow:none}}@media screen and (width >= 1025px){.nav{top:3.66667rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.66667rem)}}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}.nav-search{-webkit-box-flex:0;-ms-flex:none;flex:none;padding:.77778rem .88889rem;border-bottom:1px solid #e7e0d5;position:relative}.nav-search .navbar-search{padding:0}.nav-search input.search{width:100%;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;padding:.44444rem 1.88889rem .44444rem 1.77778rem;background:#fff no-repeat .61111rem/.72222rem url(../img/search-a73cfec790.svg);color:#211c17;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;outline:0}.nav-search input.search::-webkit-input-placeholder{color:#5c554c}.nav-search input.search::-moz-placeholder{color:#5c554c}.nav-search input.search:-ms-input-placeholder{color:#5c554c}.nav-search input.search::-ms-input-placeholder{color:#5c554c}.nav-search input.search::placeholder{color:#5c554c}.nav-search input.search:focus{border-color:#d9ccb8}.nav-search-hint{position:absolute;top:50%;right:1.5rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);padding:.05556rem .33333rem;border-radius:.22222rem;background:#f4eee3;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;pointer-events:none}.nav-search:focus-within .nav-search-hint{display:none}.nav-search #search-cancel{position:absolute;inset:50% 1.5rem auto auto;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none;height:.88889rem;cursor:pointer}.nav-search #search_results{position:absolute;top:100%;left:.88889rem;width:min(600px,90vw);max-width:none;min-width:0;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;background:#fff;z-index:5;max-height:80vh;overflow-y:auto;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);scrollbar-width:thin}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;padding-bottom:2.55556rem;position:relative}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;inset:0}.nav-item[data-depth="2"]>.nav-item-toggle{margin-left:-.675em}.nav-item .nav-list{margin-left:1rem}.nav-menu{min-height:0;width:100%;padding:.77778rem .88889rem 1.11111rem;line-height:1.35;position:relative;word-break:break-word;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.nav-menu::-webkit-scrollbar{width:.425em}.nav-menu::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb:active,.nav-menu::-webkit-scrollbar-thumb:hover{background:grey}@media screen and (width <= 1024px){.nav-menu::-webkit-scrollbar{width:0;background:transparent}}.nav-menu h3.title{color:#211c17;font-family:Archivo,sans-serif;font-size:.77778rem;font-weight:700;margin:0 0 .44444rem;padding:0}.nav-menu a{color:inherit}.nav-list{margin:0;padding:0}.nav-menu>.nav-list{margin-bottom:.5rem}.nav-item{list-style:none;margin-top:0}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.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-8823676a4b.svg) no-repeat 50%/.5rem;border:none;outline:none;line-height:inherit;position:absolute;height:1.33333rem;width:.88889rem;margin-left:-.88889rem}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.nav-menu .nav-text,.nav-menu a.nav-link{display:block;padding:.27778rem .44444rem;border-radius:.33333rem;color:#3a332b;font-size:.75rem;font-weight:400;line-height:1.4}.nav-menu .nav-text:hover,.nav-menu a.nav-link:hover{background:#e7e0d5;color:#211c17;text-decoration:none}.is-current-page>.nav-text,.is-current-page>a.nav-link{background:#fbead8;color:#a84e0d;font-weight:700}.nav-menu .is-current-page>.nav-text:hover,.nav-menu .is-current-page>a.nav-link:hover{background:#fbead8;color:#853c09}.breadcrumbs li .image>img,.nav-link .image>img{width:1em}.nav-panel-explore{background:#f4eee3;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;right:0;bottom:0;left:0;max-height:calc(50% + 2.55556rem)}.nav-panel-explore,.nav-panel-explore .context{display:-webkit-box;display:-ms-flexbox;display:flex}.nav-panel-explore .context{-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:2.55556rem;padding:0 .88889rem;border-top:1px solid #e7e0d5;-webkit-box-shadow:none;box-shadow:none;color:#5c554c;cursor:pointer;font-size:.72222rem;line-height:1}.nav-panel-explore .context .title{font-weight:600}.nav-panel-explore .context .noversion,.nav-panel-explore .context .version{display:block;padding:.16667rem 1.22222rem .16667rem .5rem;border:1px solid #e7e0d5;border-radius:.33333rem;background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.nav-panel-explore .components{line-height:1.6;-webkit-box-shadow:inset 0 1px 5px #f5f5f5;box-shadow:inset 0 1px 5px #f5f5f5;background:#f0f0f0;padding:.5rem .75rem 0;margin:0;overflow-y:auto;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:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:700}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;margin-top:-.25rem;line-height:1}.nav-panel-explore .component .version{display:block;margin:.375rem .375rem 0 0}.nav-panel-explore .component .title a{color:inherit;display:inherit}.nav-panel-explore .component .version a{border:1px solid #e7e0d5;border-radius:.25rem;color:inherit;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentcolor;opacity:.9;font-weight:700}@media screen and (width <= 1024px){aside.toc.sidebar{display:none}}@media screen and (width >= 1025px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}main.article>.content{display:grid;grid-template-columns:minmax(0,1fr);gap:3.11111rem;max-width:65.55556rem;padding:2.44444rem 2.22222rem 4.44444rem}main.article>.content:has(>aside.toc.sidebar){grid-template-columns:minmax(0,1fr) 12.22222rem}main.article>.content>.doc{margin:0;max-width:none;padding:0}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 12.22222rem;flex:0 0 12.22222rem;min-width:0}.toc.sidebar .toc-menu ul{scrollbar-width:thin}.toc.sidebar .toc-menu ul::-webkit-scrollbar{width:.425em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:active,.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:hover{background:grey}}@media screen and (width >= 1216px){aside.toc.sidebar{-ms-flex-preferred-size:12.22222rem;flex-basis:12.22222rem}}.toolbar{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:rgba(250,247,241,.92);backdrop-filter:blur(8px);border-bottom:1px solid #e7e0d5;color:#5c554c;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.75rem;gap:1rem;height:2.55556rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:0 2.22222rem;position:sticky;top:3.66667rem;z-index:2}.static.toolbar,.toolbar{-webkit-box-shadow:none;box-shadow:none}.static.toolbar{border-bottom:0;margin:0;max-width:100vw}@media screen and (width <= 1024px){.toolbar{top:3.66667rem;padding:0 .88889rem}}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu-8775cec4be.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;height:2.5rem;padding:0;width:2.5rem;margin-right:-.25rem}@media screen and (width >= 1025px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back-e8d811f74c.svg);background-size:41.5%}.edit-this-page{display:none;padding:0}@media screen and (width >= 1025px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#5c554c;font-weight:600}.toolbar .edit-this-page a:hover{color:#a84e0d}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;min-width:0;padding:0;line-height:1.35}@media screen and (width >= 1025px){.breadcrumbs{display:block}}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .44444rem}.breadcrumbs li:last-of-type::after{content:none}.toolbar .breadcrumbs a{color:#5c554c}.toolbar .breadcrumbs a:hover{color:#a84e0d}.toolbar .breadcrumbs li:last-of-type a{color:#211c17;font-weight:600;text-decoration:none}.page-versions{display:none;margin:0;position:relative;line-height:1}@media screen and (width >= 1025px){.page-versions{display:block}}.page-versions .version-menu-toggle{background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;color:#5c554c;cursor:pointer;outline:none;padding:.16667rem 1.22222rem .16667rem .5rem;position:relative;z-index:3}.page-versions .version-menu,.page-versions .version-menu-toggle{border:1px solid #e7e0d5;border-radius:.33333rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.page-versions .version-menu{background-color:#fff;padding:1.66667rem .5rem .44444rem;position:absolute;top:0;left:0;min-width:100%}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#333}.toc.sidebar .toc-menu{margin-right:0;position:sticky;top:7.22222rem}.toc .toc-menu h3{color:#8a8074;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;line-height:1.3;margin:0;padding-bottom:.55556rem;text-transform:uppercase}.toc.sidebar .toc-menu h3{display:block;height:auto}.toc .toc-menu ul{font-size:.75rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 9.72222rem);overflow-y:auto}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.33333rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}@media screen and (width <= 1024px){.toc .toc-menu ul li ul li ul li a{padding-left:1.33333rem}}.toc .toc-menu a{border-left:2px solid #e7e0d5;color:#5c554c;display:block;padding:.33333rem 0 .33333rem .66667rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:not(.is-active):hover{border-left-color:#d9ccb8;color:#211c17}.toc .toc-menu a.is-active{border-left-color:#e97826;color:#211c17;font-weight:600}.sidebar.toc .toc-menu a:focus{background:#f4eee3}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#3a332b;font-size:inherit;-ms-hyphens:auto;hyphens:auto;line-height:1.7;margin:0 auto;padding:0 1rem 4rem}@media screen and (width >= 1025px){.doc{font-size:.88889rem;margin:0 2rem;max-width:75.88889rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#211c17;font-weight:700;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page,.static>h1:first-child{font-size:2.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0}.doc>h1.page img{width:2rem}.doc .doc-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.doc>#preamble>.sectionbody>.paragraph:first-child>p,.doc>h1.page+.paragraph>p{font-size:.91667rem;line-height:1.7;margin:1.11111rem 0 0}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f4eee3;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){font-size:1.44444rem;letter-spacing:-.02em;margin:2.44444rem 0 0;overflow-wrap:break-word;padding:.44444rem 0 0}.doc h3:not(.discrete){font-weight:700;overflow-wrap:break-word}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor,.doc td .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em;background-image:none}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before,.doc td .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,.doc td:hover .anchor{visibility:visible}.doc p{margin:0}.doc .table-wrapper{background:#fff;border:1px solid #e7e0d5;border-radius:.55556rem;margin:.88889rem 0 0;overflow-x:auto}.doc .table-wrapper::-webkit-scrollbar{height:.425em}.doc .table-wrapper::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb:active,.doc .table-wrapper::-webkit-scrollbar-thumb:hover{background:grey}.doc .table-wrapper table{width:100%}.doc .tableblock p{font-size:inherit}.doc .tableblock td:not(:first-child)>p,.doc .tableblock thead,.doc :not(td)>.content,.doc :not(td)>p{-ms-hyphens:auto;hyphens:auto}.doc a{color:#a84e0d;word-break:break-word;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}.doc .camel-project .links a,.doc .sect2 h3 a,.doc .section .links a,.doc li a,.doc table a{background:none}.doc table.tableblock td a{word-break:normal}.doc table.tableblock tbody tr td:first-child{width:25%;overflow-wrap:anywhere;font-weight:700}.doc a:hover{color:#853c09}.doc a.unresolved{color:#d32f2f}.doc i.fa{font-style:normal}.doc p code,.doc thead code{background:#f4eee3;border-radius:.22222rem;color:#211c17;font-size:.80556rem;overflow-wrap:break-word;padding:.11111rem .33333rem}.doc pre{font-size:.75rem;line-height:1.7;margin:0}.doc blockquote{margin:0}.doc .right{float:right}.doc .left{float:left}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock{margin:1rem 0 0;word-break:break-word}.doc table.tableblock{border-collapse:collapse;font-size:.83333rem;margin:0}.doc table.stretch{width:100%}.doc table.tableblock thead th{background:#f4eee3;border-bottom:1px solid #e7e0d5;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;letter-spacing:.06em;padding:.61111rem .88889rem;text-align:left;text-transform:uppercase}.doc table.tableblock>:not(thead) th,.doc table.tableblock td{border-top:1px solid #f0e9dd;border-bottom:0;padding:.66667rem .88889rem}.doc table.tableblock tbody tr:first-child>td,.doc table.tableblock tbody tr:first-child>th{border-top:0}.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{background:#fff;border:1px solid #e7e0d5;border-left:.16667rem solid #e97826;border-radius:0 .66667rem .66667rem 0;-webkit-box-shadow:none;box-shadow:none;margin:1.55556rem 0 0;padding:.88889rem 1.11111rem}.doc .admonitionblock .table-wrapper,.doc .colist .table-wrapper{background:none;border:0;border-radius:0;margin:0;overflow:visible}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.80556rem;line-height:1.6}.doc .admonitionblock td.content>:first-child{margin:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock table{border-collapse:collapse;position:relative;table-layout:auto;width:100%}.doc .admonitionblock td.content{background:none;color:#5c554c;padding:0;width:auto}.doc .admonitionblock td.icon{padding:0 .77778rem 0 0;vertical-align:top;white-space:nowrap;width:1px}.doc .admonitionblock .icon i{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-style:normal;font-weight:600;height:auto;letter-spacing:.04em;line-height:1.4;padding:.16667rem .44444rem;text-transform:uppercase;vertical-align:top}.doc .admonitionblock .icon i::after{content:attr(title);-ms-hyphens:none;hyphens:none;-webkit-writing-mode:horizontal-tb;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.doc .admonitionblock.caution{border-left-color:#a0439c}.doc .admonitionblock.caution .icon i{background:#f7e9f6;color:#8e3b8a}.doc .admonitionblock.important{border-left-color:#d32f2f}.doc .admonitionblock.important .icon i{background:#fce9e9;color:#b02525}.doc .admonitionblock.warning{border-left-color:#e18114}.doc .admonitionblock.warning .icon i{background:#fdf0dc;color:#8a5209}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock img{display:block}.doc .image>img,.doc .imageblock img{height:auto;max-width:100%}.doc table.tableblock td .imageblock img{max-width:50px}#preamble .abstract blockquote{background:#f4eee3;border-left:5px solid #e7e0d5;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock{background:#f4eee3;border-left:5px solid #5d5d5d;color:#5d5d5d;padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#5c554c;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc table.tableblock .paragraph{margin:0;padding:0}.doc .olist .admonitionblock,.doc .ulist .admonitionblock,.doc table.tableblock .admonitionblock{padding:.88889rem 1.11111rem}.doc ol,.doc ul{margin:0;padding:0 0 0 1.22222rem}.doc .olist>ol,.doc .ulist>ul{line-height:1.8}.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:.5rem;list-style:none}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem}.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:.5rem}.doc .olist li,.doc .ulist li{margin-bottom:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{color:#5d5d5d;font-size:.88889rem;font-weight:700;font-style:italic;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc .admonitionblock .title+.paragraph{margin-top:0}.doc .exampleblock>.content{background:#faf7f1;border:.25rem solid #e7e0d5;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#f4eee3;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:700;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight code,.doc pre:not(.highlight){background:#211c17;border-radius:.55556rem;-webkit-box-shadow:none;box-shadow:none;color:#f0e9df;display:block;overflow-x:auto;padding:1rem 1.11111rem}.doc .listingblock{margin-top:.77778rem}.doc pre code{color:inherit}.doc pre.highlight code::-webkit-scrollbar{height:.425em}.doc pre.highlight code::-webkit-scrollbar-track{background:#2b2620;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb{background:#34302a;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb:active,.doc pre.highlight code::-webkit-scrollbar-thumb:hover{background:#8f867a}.doc pre.highlight{position:relative}.doc .listingblock code[data-lang]::before{content:attr(data-lang);display:none;color:#8f867a;font-size:.75rem;letter-spacing:.05em;line-height:1;text-transform:uppercase;position:absolute;top:.25rem;right:.25rem}.doc .listingblock:hover code[data-lang]::before{display:none}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:#8f867a;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:500;line-height:1.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1.25em;height:1.25em;cursor:pointer;position:relative}.doc .source-toolbox .copy-button::before{content:"";display:block;width:1.25em;height:1.25em;background-image:url(../img/copy-d7c1e3194d.svg);background-size:contain;background-repeat:no-repeat;background-position:50%;-ms-flex-negative:0;flex-shrink:0}.doc .source-toolbox .copy-button.clicked::before{background-image:url(../img/copy-checkmark-9a4caf1664.svg)}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#3a332b;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#3a332b;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .3rem 1.5rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;font-style:normal;height:1.25em;line-height:1.2;text-align:center;width:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#f4eee3;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #faf7f1 inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #faf7f1;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:700;line-height:.90909}.doc .icon i::after,.doc .menuseq,.doc .path,.doc a.bare,.doc b.button,.doc code,.doc kbd{-ms-hyphens:none;hyphens:none}@media screen and (width <= 626px){#preamble+.sect1,.doc .sect1+.sect1{overflow-wrap:break-word}}div.badges p{text-align:left}div.badges span{color:#fff;padding:.15rem .3rem;font-weight:400;font-style:normal;font-size:.8rem}div.badges span.badge-key{background-color:#555;border-radius:.2rem 0 0 .2rem}div.badges span.badge-version{background-color:#217ee7;border-radius:0 .2rem .2rem 0}div.badges span.badge-supported{background-color:#4d4fb7;border-radius:0 .2rem .2rem 0}div.badges span.badge-unsupported{background-color:#d32f2f;border-radius:0 .2rem .2rem 0}.static{margin:0 auto}.static dl,.static ol,.static p,.static pre,.static ul{margin:1rem 0 0}.static a.icon{margin:2rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;text-align:center;background:none}.static .box,.static a.icon{display:-webkit-box;display:-ms-flexbox;display:flex}.static .box{margin:1rem 0}.static .box img{margin-top:1rem;height:6rem;margin-right:.5rem}.static .icon a{background-image:none}@media screen and (width >= 1025px){.static{max-width:66.66667rem}}@media screen and (width <= 1024px){.static .box,.static .content,.static .icon{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0;text-align:center;width:100%}.static .box .content{width:100%}.static .box img{height:6rem;max-width:25vw;margin-left:auto}.static .box img:only-child{margin-left:auto;margin-right:auto}.static .box img+img{margin-left:1rem;margin-right:auto}.static .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.static a.icon{margin:0;width:100%}}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.66667rem}.navbar{background:rgba(250,247,241,.9);backdrop-filter:blur(10px);border-bottom:1px solid #e7e0d5;color:#5c554c;font-size:.80556rem;height:3.66667rem;position:fixed;top:0;width:100%;z-index:4}.navbar-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.55556rem;height:100%;width:100%;max-width:66.66667rem;margin-inline:auto;padding-inline:1.77778rem}.navbar a{text-decoration:none}.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.22222rem}.navbar-item{font-weight:600;font-size:.80556rem;color:#5c554c;white-space:nowrap}.navbar-item:hover{color:#211c17}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.61111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;height:auto}.navbar-logo{width:2rem;height:2rem}.navbar-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1.05556rem;letter-spacing:-.02em;color:#211c17;white-space:nowrap}.navbar-burger{color:#5c554c;background:none;border:none;outline:none;line-height:1;height:3rem;position:relative;width:2rem;-ms-flex-negative:0;flex-shrink:0;top:-2.1px;padding:0}.navbar-burger:focus{outline:none}.navbar-burger span{background:#5c554c;display:block;height:1px;left:50%;margin-left:-7px;position:absolute;top:60%;width:25px}.navbar-burger span:first-child{margin-top:-10px}.navbar-burger span:nth-child(2){margin-top:-3px}.navbar-burger span:nth-child(3){margin-top:4px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:left top;transform-origin:left top;margin-top:-.75rem}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:left bottom;transform-origin:left bottom}@media screen and (width <= 1024px){.navbar-menu{display:none}.navbar-menu.is-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:0;position:absolute;top:3.66667rem;left:0;right:0;max-height:calc(100vh - 3.66667rem);overflow-y:auto;background:#faf7f1;border-bottom:1px solid #e7e0d5;padding:.44444rem 1.77778rem}.navbar-menu.is-active .navbar-item{padding:.66667rem 0;border-bottom:1px solid #f0e9dd}.navbar-burger{display:block}}@media screen and (width >= 1025px){.navbar-burger{display:none}}.navbar-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.77778rem;margin-left:auto}.navbar-github .brand-icon{height:1.11111rem;width:1.11111rem;fill:#5c554c;display:block}.navbar-github:hover .brand-icon{fill:#211c17}a.button.navbar-cta{margin:0;padding:.5rem 1rem;border-radius:.38889rem;font-size:.80556rem}.header .navbar-search{padding:0}.header .navbar-search input{border:1px solid #e7e0d5;border-radius:.38889rem;width:11.11111rem;margin:0;padding:.33333rem .55556rem .33333rem 1.66667rem;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;background:no-repeat .5rem/.9rem url(../img/search-a73cfec790.svg);background-color:#fff;color:#211c17;outline:0}.header .navbar-search input:focus-within{background-color:#fff;border-color:#d9ccb8}.header #search-cancel{position:relative;bottom:calc(50% + .1rem);left:calc(100% - 1.25rem);height:1rem;display:none;cursor:pointer}.header #search_results{top:3.66667rem;background:rgba(250,247,241,.9);text-align:left;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);position:absolute;margin-right:10px;overflow-y:auto;max-height:80vh;max-width:min(600px,90vw);min-width:300px;scrollbar-width:thin}#search_results::-webkit-scrollbar{width:.425em}#search_results::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb:active,#search_results::-webkit-scrollbar-thumb:hover{background:grey}.result_header{font-weight:600;color:#211c17;padding-right:.5rem}#search_results div.result{padding:.25rem;pointer-events:none}#search_results div.result:hover{background:#f5f5f5}#search_results div.heading{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#search_results dt{padding:.5rem 0 .5rem .5rem;color:#e97826;text-transform:uppercase;font-weight:700;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#search_results dt.version{height:1.75rem;padding:.3rem;border:2px solid #e97826;border-radius:25px;text-align:center;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}#search_results dd{margin-right:2rem;word-break:break-word}#search_results a{pointer-events:auto;padding:.5rem}#search_results a:hover{text-decoration:underline;-webkit-text-decoration-color:#c1c1c1;text-decoration-color:#c1c1c1}.result_summary{color:#333;padding-top:.3rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}#search_results div.footer-search{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;padding:.75rem}div.footer-search h4{color:#211c17;width:5rem}.no_search_results{padding:1rem;font-weight:700;color:#211c17;border-bottom:2px solid #f5f5f5}.algolia-docsearch-suggestion--highlight{font-weight:700;color:#333}.results-hidden #search_results{display:none}@media (width <= 1024px){.header .navbar-search{min-width:0}.header .navbar-search input{width:100%}.header #search-cancel{margin-top:.75rem}.header #search_results{left:0;width:100vw;top:3.66667rem}}@media (width <= 500px){.header .navbar-search,.navbar-github{display:none}}@media (width <= 430px){.navbar-wordmark{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}}footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#211c17;color:#c4bbac;font-size:.83333rem;line-height:1.6;padding:0;-ms-flex-negative:0;flex-shrink:0}footer .footer{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:2.22222rem;width:100%;max-width:66.66667rem;margin-inline:auto;padding-block:3.11111rem 2.22222rem;padding-inline:1.77778rem}.footer-brand{display:grid;grid-template-columns:auto 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:.61111rem;-moz-column-gap:.61111rem;column-gap:.61111rem}.footer-logo{width:1.88889rem;height:1.88889rem}.footer-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1rem;color:#faf7f1}.footer-blurb{grid-column:1/-1;font-size:.75rem;line-height:1.6;color:#8f867a;margin:.88889rem 0 0;max-width:15.55556rem}footer .footer p.remark{grid-column:1/-1;border-top:1px solid #34302a;margin:0;padding:1.22222rem 0 0;font-size:.69444rem;color:#8f867a}footer .footer a{color:#c4bbac}footer .footer .context{display:inline-block;margin:0 0 1rem}footer .footer .context a{font-size:.83333rem;text-transform:uppercase}footer .footer .context a::after{content:" ";display:inline-block;border-radius:50%;width:8px;height:8px;margin:0 1rem;background:#34302a}footer .footer .context:last-child a::after{display:none}footer .footer .footer-column{margin:0}footer .footer .footer-column dt{font-family:Archivo,sans-serif;font-weight:700;font-size:.72222rem;letter-spacing:.06em;text-transform:uppercase;color:#faf7f1;margin-bottom:.77778rem}footer .footer .footer-column dt label:first-of-type::after{content:"";display:block;position:relative;bottom:0;left:0;height:2px;width:3rem;background:#c4bbac}footer .footer .footer-column dd{margin:0 0 .55556rem}footer .footer .footer-column dd a{font-size:.77778rem;color:#c4bbac}footer .footer .footer-column dd a:hover{color:#faf7f1}.footer-tools{position:relative;top:-2rem;height:0;text-align:right;color:#8a8074;font-size:.72222rem}.footer-tools a{display:inline-block;padding:.4rem;border-radius:.4rem .4rem 0 0;height:2rem;color:#5c554c}.footer-tools a:hover{color:#211c17}footer .resources{grid-column:1/-1;text-align:center}footer .footer .footer-icons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;grid-column:1/-1;line-height:1.6;padding:.5rem;font-weight:700}footer .footer .footer-icons .brand-icon{height:2em;width:1.75em;margin:.35rem;fill:#c4bbac}footer .footer .footer-icons a:hover .brand-icon{fill:#faf7f1}footer .footer dl dt label:nth-child(2),footer .footer input[type=checkbox]{display:none}@media screen and (width <= 1024px){footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}footer .footer{grid-template-columns:1fr}footer .footer .footer-column dt{margin-bottom:1rem;display:-webkit-box;display:-ms-flexbox;display:flex}footer .footer dl dt label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}footer .footer dl dt label:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}footer .footer dl dt label:nth-child(2){display:block;height:1.75rem;width:1.75rem;line-height:1.75rem;font-size:1.75rem;-webkit-transition:.2s;transition:.2s}footer .footer input[type=checkbox]:checked+dl dt label:nth-child(2){-webkit-transform:rotate(45deg);transform:rotate(45deg)}footer .footer dl dd:first-of-type{margin-top:1rem}footer .footer .footer-icons .brand-icon{height:1.5rem}footer input[type=checkbox]:checked+dl dd{display:block}footer input[type=checkbox]+dl dd{display:none}}
     /*! highlight.js theme for the 2026 redesign, per SCOPE.md section 2a.
         Replaces the GitHub light theme; --pre-background is now --color-ink.
         Colors live in vars.css as --syntax-*, shared with chroma.css. */.hljs-comment,.hljs-quote{color:#8f867a;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#e97826;font-weight:600}.hljs-attr,.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:#e8c87a}.hljs-doctag,.hljs-string{color:#f2a05a}.hljs-section,.hljs-selector-id,.hljs-title{color:#faf7f1;font-weight:600}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#d9b6f0;font-weight:600}.hljs-attribute,.hljs-name,.hljs-tag{color:#c4bbac;font-weight:400}.hljs-link,.hljs-regexp{color:#9fd3b0}.hljs-bullet,.hljs-symbol{color:#f2a05a}.hljs-built_in,.hljs-builtin-name{color:#8ec5e6}.hljs-meta{color:#8f867a;font-weight:600}.doc code.language-console .hljs-meta,.doc code.language-shell .hljs-meta,.doc code.language-shellsession .hljs-meta{color:#e0805a}.hljs-deletion{background:rgba(224,82,58,.25)}.hljs-addition{background:rgba(159,211,176,.25)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:600}
    @@ -18,5 +18,5 @@
         identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace),
         .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a
         color). .go, generic command output, is content the reader needs rather
    -    than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-hero-art img{width:40%}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog{max-width:var(--static-max-width);margin:0 auto}.blog.list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.blog.list aside{margin-top:2.5rem;padding-right:2rem;line-height:2rem;-ms-flex-item-align:start;align-self:flex-start;position:sticky;top:2rem}@media screen and (width <= 1024px){.blog.list aside{margin-top:0}}.blog.list aside ul{list-style:none;padding:0;margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;display:inline-block}.blog-rss{margin-top:1rem}.blog-rss a{text-decoration:none}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}article.blog:first-child{margin-top:3rem}article.blog,article.blog p{padding-bottom:1rem}.blog a.continue{font-weight:700;text-decoration:none;background:none}.blog header{margin-bottom:.4rem;-o-border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0;border-image:linear-gradient(90deg,#211c17,#211c17 50px,#fff 0) 1/0 0 1px 0}.blog header h1{font-size:2rem;font-weight:700;padding-bottom:.2rem}.blog header time{color:#555;font-style:italc}.blog .post{margin-top:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-bottom:2rem}.blog .post aside .summary{font-size:1.2rem;font-style:italic}.blog .post aside time{color:#555}.blog .post aside p{padding-top:1.5rem;color:#555}.blog .post aside p span[rel=author]{display:inline-block}.blog .post aside{width:100%}.blog a.arrow{font-size:1rem;text-decoration:none;background:none}.blog a.arrow.prev::after{content:"\00A0previous"}.blog a.arrow.next::before{content:"next\00A0"}.blog .post .post-content{margin-left:0;width:auto}.blog .post-content img{width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block}.blog .post-content img:not(.featured){cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img{max-width:100%;max-height:none}}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content pre{max-width:800px}.blog .post .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post .post-content td{padding:.5rem}.blog .post .post-content th{padding:.7rem;background:#e1e1e1}.blog .post aside figure img{margin-right:1rem;vertical-align:middle;width:4rem;height:4rem;border-radius:50%}.blog .post aside figure{margin:1rem 0}.blog .post aside figure figcaption{display:inline}@media screen and (width >= 1025px){.blog{max-width:66.66667rem}.blog .post{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:2rem}.blog .post aside{width:30rem;min-width:16rem}.blog a.arrow{font-size:3rem}.blog a.arrow.next::before,.blog a.arrow.prev::after{content:""}.blog .post .post-content{margin-left:2rem;width:60%}.blog.list{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}main.blog.list{margin-left:0}}.blog ol,.blog ul{padding-bottom:1rem}.blog li ol,.blog li ul{padding-bottom:0}.blog .pagination{margin:0 auto;list-style:none;padding:1rem}@media screen and (width >= 1025px){.blog .pagination{max-width:66.66667rem}}.blog .page-item{display:inline;padding:0;margin:0}.blog .page-item a{color:#8e8e8e;font-weight:700;padding:.5rem}.blog .page-item.disabled a{color:#8e8e8e}.blog .page-item.active{border-radius:3px;background:#211c17}.blog .page-item.active a{color:#fff}@media screen and (width <= 1024px){.blog.list aside{margin-top:4.5rem}}.blog .related{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-top:1px solid #e97826;margin-top:3rem}.blog .related>h3{min-width:100%}.blog .related article{padding-right:0;width:50%;margin:0}.blog .related article:nth-child(2n){padding-left:0}.blog .related article header h1{font-size:1rem}@media screen and (width <= 1024px){.blog .related article{width:100%;padding-left:0}}a.category:first-child::before{content:"\2022\00A0\00A0"}a.category:first-child{border-radius:1rem .2rem .2rem 1rem;margin-left:0}a.category{border-radius:.2rem;margin-left:1px;color:#fff;padding:.2rem .5rem;font-weight:700;font-size:.65rem;text-decoration:none}li>a.category{display:block;margin:.2rem;line-height:2}a.category,li>a.category{background-color:#e97826;background-image:none;background-position:0;background-repeat:no-repeat;background-size:0}a.category:hover{color:#fff}a.category span{margin-left:.5rem}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release .tableblock thead tr th{text-align:left}.release .tableblock tbody tr:nth-child(2n){background:#f5f5f5}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 626px){.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{padding:1rem 3rem 2rem;display:-webkit-box;display:-ms-flexbox;display:flex;width:80%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}@media screen and (width <= 1024px){.community,.docs{padding:0 1rem 4rem;width:100%}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download thead tr th{text-align:left}.download tr td:first-child{white-space:nowrap}.download tr td:first-child strong{font-size:.9rem}.download tr td em.kind{color:#faf7f1;background:#211c17;border-radius:3px;font-style:normal;font-size:.75rem;font-weight:700;padding:.1rem .3rem}.download .tableblock tbody tr:nth-child(2n){background:#f4eee3}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.resp-sharing-button__icon,.resp-sharing-button__link{display:inline-block}.resp-sharing-button__link{text-decoration:none;color:#fff;margin:.5em}.resp-sharing-button{border-radius:5px;-webkit-transition:25ms ease-out;transition:25ms ease-out;padding:.5em .75em;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.resp-sharing-button__icon svg{width:1em;height:1em;margin-right:.4em;vertical-align:top}.resp-sharing-button--small svg{margin:0;vertical-align:middle}.resp-sharing-button__icon{stroke:#fff;fill:none}.resp-sharing-button__icon--solid,.resp-sharing-button__icon--solidcircle{fill:#fff;stroke:none}.resp-sharing-button--twitter{background-color:#55acee;border-color:#55acee}.resp-sharing-button--twitter:hover{background-color:#2795e9}.resp-sharing-button--facebook{background-color:#3b5998;border-color:#3b5998}.resp-sharing-button--facebook:hover{background-color:#2d4373}.resp-sharing-button--linkedin{background-color:#0077b5;border-color:#0077b5}.resp-sharing-button--linkedin:hover{background-color:#046293}.resp-sharing-button--facebook:active,.resp-sharing-button--facebook:hover{background-color:#2d4373;border-color:#2d4373}.resp-sharing-button--twitter:active,.resp-sharing-button--twitter:hover{background-color:#2795e9;border-color:#2795e9}.resp-sharing-button--linkedin:active,.resp-sharing-button--linkedin:hover{background-color:#046293;border-color:#046293}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}
    +    than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}a.button.ink{background-color:#211c17;color:#fff}a.button.ink:hover{background-color:#3a332b}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-hero-art img{width:40%}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}.page-hero-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:0;color:#211c17}.page-hero-lead{font-size:.97222rem;line-height:1.55;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.detail-lead{font-weight:500;font-size:1.16667rem;line-height:1.4;color:#3a332b;margin:.88889rem 0 0;text-wrap:pretty}.detail-lead,.section-label{font-family:Archivo,sans-serif}.section-label{font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:3.11111rem 0 0;padding-bottom:.77778rem;border-bottom:1px solid #e7e0d5}.card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fff;border:1px solid #e7e0d5;border-radius:13px;padding:1.33333rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.card--flat{-webkit-transition:none;transition:none}.card--flat:hover{border-color:#e7e0d5;-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;transform:none}.card--lg{border-radius:16px;padding:1.77778rem}.card--dark{background:#211c17;border-color:#34302a;color:#faf7f1}.card-grid{display:grid;list-style:none;margin:0;padding:0;gap:1rem}.card-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1.2fr 1fr}@media screen and (width <= 1024px){.card-grid--3{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1fr}}@media screen and (width <= 626px){.card-grid--2,.card-grid--3,.card-grid--feature{grid-template-columns:minmax(0,1fr)}}.lts-chip{font-size:.58333rem;color:#fff;background:#e97826;padding:.11111rem .38889rem}.lts-chip,.severity-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;border-radius:20px}.severity-chip--low{background:#f4eee3;color:#5c554c}.severity-chip--medium{background:#fbead8;color:#a84e0d}.severity-chip--high{background:#fdf0dc;color:#8a5209}.severity-chip--critical{background:#fce9e9;color:#b02525}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog-layout{display:grid;grid-template-columns:13.33333rem 1fr;gap:3.11111rem;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.blog-rail{position:sticky;top:5rem}.blog-rail-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.66667rem;border-bottom:1px solid #e7e0d5}.blog-categories{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.44444rem}.blog-categories,.blog-category{display:-webkit-box;display:-ms-flexbox;display:flex}.blog-category{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.44444rem 0;font-size:.77778rem;font-weight:600;color:#3a332b;border-bottom:1px solid #f0e9dd;text-decoration:none}.blog-category:hover{color:#853c09}.blog-category-count{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#8a8074}.blog-rss{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem;margin-top:1.11111rem;font-size:.75rem;font-weight:700;color:#a84e0d;text-decoration:none}.blog-rss:hover{color:#853c09}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}.blog-main{min-width:0}.blog-back-link{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#8a8074;margin-bottom:.77778rem;text-decoration:none}.blog-back-link:hover{color:#853c09}.blog-posts{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:2rem}.blog-post{display:grid;grid-template-columns:5.33333rem 1fr;gap:1.55556rem;padding:1.66667rem 0;border-top:1px solid #e7e0d5}.blog-post-date{text-align:center}.blog-post-day{font-family:Archivo,sans-serif;font-weight:800;font-size:2.22222rem;line-height:1;letter-spacing:-.03em;color:#a84e0d}.blog-post-month{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;text-transform:uppercase;letter-spacing:.06em;margin-top:.33333rem}.blog-post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.tag-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-weight:600;color:#a84e0d;background:#fbead8;padding:.16667rem .5rem;border-radius:20px;text-transform:uppercase;letter-spacing:.04em;text-decoration:none}.blog-post-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.33333rem;letter-spacing:-.02em;line-height:1.2;margin:.66667rem 0 0}.blog-post-title a{color:#211c17;text-decoration:none}.blog-post-title a:hover{color:#853c09}.blog-post-summary{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}.blog-post-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.88889rem;margin-top:.77778rem;font-size:.75rem;color:#8a8074}.blog-post-continue{font-weight:700;color:#a84e0d;text-decoration:none}.blog-post-continue:hover{color:#853c09}.blog-list .pagination{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.33333rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:1.55556rem 0 0;padding:1.55556rem 0 0;border-top:1px solid #e7e0d5;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;list-style:none}.blog-list .page-item{display:contents}.blog-list .page-link{display:inline-block;padding:.44444rem .66667rem;border-radius:6px;color:#5c554c;text-decoration:none}.blog-list .page-link:hover{background:#f0e9dd}.blog-list .page-link--next{color:#a84e0d}.blog-list .page-item.active .page-link{background:#211c17;color:#faf7f1}.blog-list .page-item.active .page-link:hover{background:#211c17}.blog-list .page-item.disabled .page-link{padding:.44444rem .33333rem;color:#8a8074;cursor:default}.blog-list .page-item.disabled .page-link:hover{background:none}@media screen and (width <= 1024px){.blog-layout{grid-template-columns:minmax(0,1fr);padding:2.22222rem 1.33333rem 1.77778rem}.blog-rail{position:static}}@media screen and (width <= 626px){.blog-list .page-hero-title{font-size:2rem}}.post{max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.post-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#8a8074;text-decoration:none}.post-back:hover{color:#853c09}.post-hero{max-width:45.55556rem;margin-top:1rem}.post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:.88889rem 0 0;color:#211c17}.post-layout{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:3.11111rem;margin-top:2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.post-rail{position:sticky;top:4.66667rem;gap:1.22222rem}.post-authors,.post-rail{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.post-authors{gap:.77778rem}.post-author{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.post-avatar{width:44px;height:44px;border-radius:50%;background:#e7e0d5}.post-author-name{font-weight:700;font-size:.80556rem}.post-date{font-size:.72222rem;color:#8a8074}.post-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.55556rem}.post-share-links{gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post-adjacent,.post-share-links{display:-webkit-box;display:-ms-flexbox;display:flex}.post-adjacent{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem;border-top:1px solid #e7e0d5;font-size:.72222rem}.post-adjacent a{color:#5c554c;font-weight:600;text-decoration:none}.post-adjacent a:hover{color:#853c09}.post-content{max-width:42.22222rem}.blog .post-content img.featured{aspect-ratio:16/8;-o-object-fit:cover;object-fit:cover;width:100%;height:auto;border-radius:14px;display:block;margin-bottom:1.88889rem}.blog .post-content h2{font-family:Archivo,sans-serif;font-weight:700;font-size:1.55556rem;letter-spacing:-.02em;margin:2.22222rem 0 0}.blog .post-content p{font-size:.94444rem;line-height:1.75;color:#3a332b}.blog .post-content p+p{margin-top:.66667rem}.blog .post-content blockquote{margin:1.33333rem 0 0;padding:1rem 1.22222rem;border-left:3px solid #e97826;background:#fff;border-radius:0 12px 12px 0;font-family:Archivo,sans-serif;font-weight:500;font-size:1.05556rem;line-height:1.45;color:#3a332b}.blog .post-content img:not(.featured){width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block;cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img:not(.featured){max-width:100%;max-height:none}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post-content td{padding:.5rem}.blog .post-content th{padding:.7rem;background:#e1e1e1}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.post-related{margin-top:3.11111rem;padding-top:1.55556rem;border-top:1px solid #e7e0d5}.post-related-heading{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:0 0 1rem}.post-related-grid{gap:.77778rem}.post-related-card{border-radius:12px;padding:1rem 1.11111rem;color:#211c17;text-decoration:none}.post-related-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#8a8074}.post-related-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.91667rem;margin-top:.33333rem;line-height:1.3}@media screen and (width <= 1024px){.post{padding:2.22222rem 1.33333rem 1.77778rem}.post-layout{grid-template-columns:minmax(0,1fr)}.post-rail{position:static}}.blog-category.is-current{color:#a84e0d;font-weight:700}.releases{display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;padding:3.11111rem 1.77778rem 2.22222rem}.releases-intro{max-width:40rem}.releases-lead a{color:#a84e0d}.releases-lead a:hover{color:#853c09;text-decoration:none}.releases-group{margin-top:2.66667rem}.releases-content>.releases-group:first-child{margin-top:2.22222rem}.releases-group-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:0 0 .77778rem;color:#211c17}.releases-table{width:100%;font-size:.80556rem;background:#fff;border:1px solid #e7e0d5;border-radius:12px;border-collapse:collapse;overflow:hidden}.releases-table thead tr{background:#f4eee3}.releases-table th{text-align:left;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#8a8074;padding:.61111rem .88889rem}.releases-col-version{width:7.77778rem}.releases-col-date{width:8.33333rem}.releases-table tbody tr{border-top:1px solid #f0e9dd}.releases-table tbody tr:first-child{border-top:0}.releases-table td{padding:.66667rem .88889rem}.releases-version{font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;font-size:.77778rem;color:#a84e0d}.releases-version:hover{color:#853c09;text-decoration:none}.releases-table .lts-chip{margin-left:.44444rem}.releases-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#5c554c}.releases-desc{color:#5c554c;line-height:1.5}.releases-rail{position:sticky;top:5rem}.releases-rail-heading{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.66667rem;border-bottom:1px solid #e7e0d5}.releases-rail-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.55556rem}.releases-rail-link{display:block;padding:.33333rem 0 .33333rem .66667rem;font-size:.75rem;color:#5c554c;border-left:2px solid #e7e0d5;text-decoration:none}.releases-rail-link:focus-visible,.releases-rail-link:hover{border-left-color:#d9ccb8;color:#211c17}.advisory{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.advisory-back{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c;text-decoration:none}.advisory-back:hover{color:#853c09}.advisory-layout{display:grid;grid-template-columns:minmax(0,1fr) 17.77778rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;margin-top:1rem}.advisory-article{max-width:42.22222rem}.advisory-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase}.advisory-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.33333rem;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0;color:#211c17}.advisory-section{margin-top:2rem}.advisory-section-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:0 0 .55556rem}.advisory-section-body{font-size:.91667rem;line-height:1.7;color:#3a332b;margin:0;text-wrap:pretty}.advisory-section-body a{color:#a84e0d}.advisory-section-body a:hover{color:#853c09}.advisory-section-body pre{background:#211c17;border-radius:.55556rem;color:#f0e9df;display:block;font-size:.75rem;line-height:1.7;overflow-x:auto;padding:1rem 1.11111rem}.advisory-section-body pre code{color:inherit}.advisory-references{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.44444rem;font-size:.83333rem}.advisory-reference{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;color:#a84e0d;text-decoration:none}.advisory-reference:hover{color:#853c09;text-decoration:none}.advisory-facts{position:sticky;top:5rem;background:#fff;border:1px solid #e7e0d5;border-radius:14px;padding:1.33333rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:1rem}.advisory-facts-label{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#8a8074;letter-spacing:.06em;text-transform:uppercase}.advisory-severity-chip{margin-top:.44444rem;font-size:.66667rem;padding:.22222rem .55556rem}.advisory-facts-value{margin-top:.33333rem;font-size:.80556rem;line-height:1.6;color:#3a332b}.advisory-facts-value--mono{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.77778rem;line-height:1.7;color:#211c17;font-weight:600}a.advisory-facts-cta{display:block;margin:.22222rem 0 0;padding:.61111rem 1rem;font-size:.77778rem;text-align:center}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 1024px){.releases{grid-template-columns:minmax(0,1fr)}.releases-rail{position:static;margin-top:2.66667rem}.advisory-layout{grid-template-columns:minmax(0,1fr)}.advisory-facts{position:static}}@media screen and (width <= 626px){.releases-table{font-size:.72222rem}.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.community-hero,.docs-hero{max-width:42.22222rem}.docs-features{margin-top:2.22222rem}.docs-feature-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.docs-feature--dark .docs-feature-eyebrow{color:#e0805a}.docs-feature--light .docs-feature-eyebrow{color:#a84e0d}.docs-feature-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.66667rem;letter-spacing:-.02em;margin:.66667rem 0 0}.docs-feature--light .docs-feature-title{color:#211c17}.docs-feature-desc{font-size:.86111rem;line-height:1.6;margin:.66667rem 0 1.44444rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-feature--dark .docs-feature-desc{color:#c4bbac}.docs-feature--light .docs-feature-desc{color:#5c554c}.docs-feature-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.docs-feature-actions .button{margin:0;padding:.61111rem 1.11111rem;font-size:.80556rem}.docs-projects{margin-top:1.11111rem}.docs-project-card-head{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.docs-project-card-icon{width:1.66667rem;height:1.66667rem;display:block;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.docs-project-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0;color:#211c17}.docs-project-card-desc{font-size:.77778rem;line-height:1.55;color:#5c554c;margin:.66667rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-project-card-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.77778rem;font-size:.75rem;font-weight:700}.docs-project-card-link{color:#a84e0d}.docs-project-card-link:hover{color:#853c09;text-decoration:none}.docs-project-card-link--muted{color:#8a8074}.community-grid{margin-top:2.22222rem}.community-card-tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:2.11111rem;height:2.11111rem;border-radius:9px;background:#fbead8;font-family:Archivo,sans-serif;font-weight:800;font-size:.83333rem;color:#a84e0d}.community-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.05556rem;margin:.88889rem 0 0;color:#211c17}.community-card-body{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:.5rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.community-card-link{color:#a84e0d;font-weight:700;font-size:.75rem}.community-card-link:hover{color:#853c09;text-decoration:none}.community-cta{grid-column:span 2}.community-cta-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#e0805a}.community-cta-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:.66667rem 0 0}.community-cta-body{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 1.11111rem;-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:31.11111rem}.community-cta-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.community-cta-actions .button{margin:0;padding:.55556rem 1rem;font-size:.77778rem}@media screen and (width <= 1024px){.community,.docs{padding:1.77778rem 1.11111rem 2.66667rem}}@media screen and (width <= 626px){.community-cta{grid-column:span 1}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.tooling{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.tooling h1{font-weight:800;line-height:1.05;margin:0}.tooling .tooling-lead{max-width:42.22222rem;margin:.77778rem 0 0}.tooling-section{margin-top:2.66667rem}.tooling-cli-section{margin-top:2.88889rem}.tooling .tooling-section h2{font-weight:800;font-size:1.55556rem;letter-spacing:-.02em;margin:0;padding:0}.tooling .tooling-section-intro{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;max-width:42.22222rem;text-wrap:pretty}.tooling-cli-section .tooling-section-intro{margin-bottom:1.11111rem}.tooling code{font-size:.77778rem;padding:.11111rem .33333rem;border-radius:4px}.tooling-cli{background:#211c17;border:1px solid #34302a;border-radius:12px;overflow:hidden}.tooling-cli-row{display:grid;grid-template-columns:9.44444rem minmax(0,1fr);gap:1.11111rem;padding:.72222rem 1.11111rem;border-top:1px solid #34302a;font-size:.77778rem}.tooling-cli-cmd{color:#f2a05a;font-weight:600}.tooling-cli-desc{color:#c4bbac;line-height:1.5}.tooling-split{display:grid;grid-template-columns:1fr 1fr;gap:1.55556rem}.tooling-media{aspect-ratio:16/10;border-radius:12px;background:#211c17;border:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}.tooling-media img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.tooling .tooling-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase;margin:0}.tooling-mcp .tooling-eyebrow+h2{margin-top:.55556rem}.tooling-ai-grid{display:grid;grid-template-columns:1fr 1fr;gap:.77778rem;margin-top:1.22222rem}.tooling-ai-card{border:1px solid #e7e0d5;border-radius:10px;padding:.88889rem 1rem}.tooling .tooling-ai-name{font-family:Archivo,sans-serif;font-weight:700;font-size:.88889rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-ai-name:hover{color:#853c09;text-decoration:underline}.tooling .tooling-ai-desc{font-size:.75rem;line-height:1.5;color:#5c554c;margin:.33333rem 0 0}.tooling-rows{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:1rem;border-top:1px solid #e7e0d5}.tooling-row{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:1.33333rem;padding:.88889rem 0;border-bottom:1px solid #f0e9dd}.tooling .tooling-row-name{font-weight:700;font-size:.83333rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-row-name:hover{color:#853c09;text-decoration:underline}.tooling-row-name--mono{font-family:JetBrains Mono,ui-monospace,monospace}.tooling .tooling-row-desc{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:0;text-wrap:pretty}.tooling .tooling-footnote{font-size:.80556rem;line-height:1.6;color:#8a8074;margin:2.66667rem 0 0;padding-top:1.33333rem;border-top:1px solid #e7e0d5}.tooling .toc.sidebar .toc-menu{top:5rem}@media screen and (width <= 1024px){.tooling{padding:1.77778rem 1.11111rem 2.66667rem}.tooling,.tooling-row,.tooling-split{grid-template-columns:minmax(0,1fr)}.tooling-row{gap:.33333rem}}@media screen and (width <= 626px){.tooling-cli-row{gap:.33333rem}.tooling-ai-grid,.tooling-cli-row{grid-template-columns:minmax(0,1fr)}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.download-hero{display:grid;grid-template-columns:1fr 21.11111rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.download-intro p{font-size:.91667rem;line-height:1.6;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.download-intro p:first-of-type{margin-top:.88889rem}.download-intro strong{color:#211c17}.download-cli-card{background:#211c17;border-radius:16px;padding:1.55556rem;color:#faf7f1}.download-cli-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#e0805a;letter-spacing:.08em;text-transform:uppercase}.download-cli-desc{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 .88889rem}.download-cli-bar{display:-webkit-box;display:-ms-flexbox;display:flex;background:#1c1813;border:1px solid #34302a;border-radius:8px;overflow:hidden}.download-cli-command{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;color:#f0e9df;padding:.66667rem .77778rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.download-cli-prompt{color:#e0805a}.download-cli-copy{border:0;border-left:1px solid #34302a;background:#2b2620;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .77778rem;cursor:pointer}.download-cli-copy:hover{background:#3a342c}.download-cli-guide{display:inline-block;margin-top:.77778rem;font-size:.75rem;font-weight:700;color:#f2a05a}.download-cli-guide:hover{color:#faf7f1;text-decoration:none}.download-row{display:grid;grid-template-columns:12.22222rem 7.22222rem 1fr auto;gap:1.33333rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1.22222rem 0;border-bottom:1px solid #f0e9dd}.download-row-project{font-family:Archivo,sans-serif;font-weight:700;font-size:.94444rem;color:#211c17}.download-row-date{font-size:.72222rem;color:#8a8074;margin-top:.16667rem}.download-row-version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem}.download-row-version-num{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:600;color:#211c17}.download-row-note{font-size:.77778rem;color:#5c554c}.download-row-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.33333rem .88889rem;font-size:.75rem;font-weight:700}.download-row-artifact,.download-row-links{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.download-row-artifact{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;gap:.33333rem;white-space:nowrap}.download-row-link{color:#8a8074}.download-row-link:hover{color:#e97826;text-decoration:none}.download-row-link--primary{color:#a84e0d}.download-row-link--primary:hover{color:#e97826}.download-row-sub{font-size:.61111rem;font-weight:600;color:#8a8074}.download-row-sub::before{content:"("}.download-row-sub::after{content:")"}.download-row-sublink{color:inherit}.download-row-sublink:hover{color:#e97826;text-decoration:none}.download-row-sublink+.download-row-sublink::before{content:" \00b7 ";color:#8a8074}.download-cards{margin-top:2.66667rem}.download-card{padding:1.44444rem}.download-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.download-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}@media screen and (width <= 1024px){.download-hero{grid-template-columns:1fr}.download{padding:2.22222rem 1.33333rem 2.66667rem}}@media screen and (width <= 626px){.download-row{grid-template-columns:1fr;gap:.44444rem}.download-row-links{margin-top:.22222rem}}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.post-share-link{font-family:inherit;font-size:.72222rem;font-weight:700;color:#5c554c;background:none;border:1px solid #e7e0d5;padding:.33333rem .66667rem;border-radius:6px;text-decoration:none;cursor:pointer}.post-share-link:hover{border-color:#d9ccb8}.security{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.security-hero{max-width:42.22222rem}.security-grid{margin-top:2.22222rem}.security-card--feature{grid-column:1/-1}.security-card--feature h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:.55556rem 0 0}.security-card--feature p{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.66667rem 0 0;max-width:45.55556rem}.security-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase}.security-card{padding:1.44444rem}.security-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.security-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0}.security-band{grid-column:1/-1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.33333rem;background:#211c17;border-radius:16px;padding:1.77778rem;color:#faf7f1}.security-band-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:16.66667rem}.security-band-copy h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:0}.security-band-copy p{font-size:.83333rem;line-height:1.6;color:#c4bbac;margin:.55556rem 0 0;max-width:35.55556rem}.security-band .button{white-space:nowrap}.security-advisories{width:100%;font-size:.77778rem;border-collapse:collapse}.security-advisories thead tr{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#8a8074;text-transform:uppercase;letter-spacing:.06em;text-align:left}.security-advisories thead th{padding:.77778rem .66667rem .55556rem}.security-advisories thead th:first-child{padding-left:0}.security-advisories thead th:last-child{padding-right:0}.security-advisories tbody th{text-align:left;padding:1.44444rem 0 .44444rem;font-family:Archivo,sans-serif;font-weight:800;font-size:1.22222rem;letter-spacing:-.02em;color:#211c17}.security-advisories .security-row{border-top:1px solid #f0e9dd}.security-advisories td{padding:.66667rem;color:#5c554c}.security-advisories td:first-child{padding-left:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#3a332b}.security-advisories td:first-child a{font-weight:600;color:#a84e0d}.security-advisories td:first-child a:hover{color:#853c09;text-decoration:none}.security-advisories td:last-child{padding-right:0;line-height:1.5}.security-severity{font-size:.63889rem;padding:.16667rem .44444rem}.security .table-wrapper{overflow-x:auto}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}@media screen and (width <= 1024px){.security-grid{grid-template-columns:1fr}}@media screen and (width <= 626px){.security-band{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}}
     /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0}
    \ No newline at end of file
    diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json
    index 0740052cd4c..6d4d65d54d8 100644
    --- a/antora-ui-camel/public/_/data/rev-manifest.json
    +++ b/antora-ui-camel/public/_/data/rev-manifest.json
    @@ -1,5 +1,5 @@
     {
    -  "css/site.css": "css/site-fed18c630b.css",
    +  "css/site.css": "css/site-f1cc375821.css",
       "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
       "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
       "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
    @@ -44,7 +44,7 @@
       "img/team.svg": "img/team-899f1050c2.svg",
       "img/tooling.svg": "img/tooling-f5e235c238.svg",
       "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg",
    -  "js/site.js": "js/site-48ffd3a465.js",
    +  "js/site.js": "js/site-c7bbbf7be8.js",
       "js/vendor/algoliasearch.js": "js/vendor/algoliasearch-6711ef4b37.js",
       "js/vendor/highlight.js": "js/vendor/highlight-de2def4bea.js",
       "js/vendor/svg4everybody.js": "js/vendor/svg4everybody-a0c573f2b9.js",
    diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js
    index 9b7e06b89c6..d70b1925a1d 100644
    --- a/antora-ui-camel/public/_/helpers/asset.js
    +++ b/antora-ui-camel/public/_/helpers/asset.js
    @@ -1,7 +1,7 @@
     'use strict'
     
     const manifest = {
    -  "css/site.css": "css/site-fed18c630b.css",
    +  "css/site.css": "css/site-f1cc375821.css",
       "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
       "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
       "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
    @@ -46,7 +46,7 @@ const manifest = {
       "img/team.svg": "img/team-899f1050c2.svg",
       "img/tooling.svg": "img/tooling-f5e235c238.svg",
       "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg",
    -  "js/site.js": "js/site-48ffd3a465.js",
    +  "js/site.js": "js/site-c7bbbf7be8.js",
       "js/vendor/algoliasearch.js": "js/vendor/algoliasearch-6711ef4b37.js",
       "js/vendor/highlight.js": "js/vendor/highlight-de2def4bea.js",
       "js/vendor/svg4everybody.js": "js/vendor/svg4everybody-a0c573f2b9.js",
    diff --git a/antora-ui-camel/public/_/js/site-48ffd3a465.js b/antora-ui-camel/public/_/js/site-c7bbbf7be8.js
    similarity index 78%
    rename from antora-ui-camel/public/_/js/site-48ffd3a465.js
    rename to antora-ui-camel/public/_/js/site-c7bbbf7be8.js
    index 979b27a824e..c0bd9c4481b 100644
    --- a/antora-ui-camel/public/_/js/site-48ffd3a465.js
    +++ b/antora-ui-camel/public/_/js/site-c7bbbf7be8.js
    @@ -5,17 +5,11 @@
     document.addEventListener("DOMContentLoaded",(function(){var t=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);0!==t.length&&(t.forEach((function(t){t.addEventListener("click",(function(e){e.stopPropagation(),t.classList.toggle("is-active"),document.getElementById(t.dataset.target).classList.toggle("is-active"),document.documentElement.classList.toggle("is-clipped--navbar")}))})),document.documentElement.dataset.scroll=0,document.addEventListener("scroll",(()=>{document.documentElement.dataset.scroll=window.scrollY})))}));
     !function(){"use strict";var e=/^\$ (\S[^\\\n]*(\\\n(?!\$ )[^\\\n]*)*)(?=\n|$)/gm,t=/( ) *\\\n *|\\\n( ?) */g,a=/ +$/gm,n=window.navigator.clipboard;function i(n){var i=n.innerText.replace(a,"");"console"===n.dataset.lang&&i.startsWith("$ ")&&(i=function(a){for(var n,i=[];n=e.exec(a);)i.push(n[1].replace(t,"$1$2"));return i.join(" && ")}(i)),window.navigator.clipboard.writeText(i).then(function(){this.classList.add("clicked"),setTimeout(function(){this.classList.remove("clicked")}.bind(this),1e3)}.bind(this),(function(){}))}[].slice.call(document.querySelectorAll(".doc pre.highlight, .doc .literalblock pre")).forEach((function(e){var t,a,c,l,o,s;if(e.classList.contains("highlight"))(a=(t=e.querySelector("code")).dataset.lang)&&"console"!==a&&((c=document.createElement("span")).className="source-lang",c.appendChild(document.createTextNode(a)));else{if(!e.innerText.startsWith("$ "))return;var d=e.parentNode.parentNode;d.classList.remove("literalblock"),d.classList.add("listingblock"),e.classList.add("highlightjs","highlight"),(t=document.createElement("code")).className="language-console hljs",t.dataset.lang="console",t.appendChild(e.firstChild),e.appendChild(t)}(s=document.createElement("div")).className="source-toolbox",c&&s.appendChild(c),n&&((l=document.createElement("button")).className="copy-button",l.setAttribute("title","Copy to clipboard"),l.setAttribute("aria-label","Copy to clipboard"),(o=document.createElement("span")).className="copy-toast",o.appendChild(document.createTextNode("Copied!")),l.appendChild(o),s.appendChild(l)),e.appendChild(s),l&&l.addEventListener("click",i.bind(l,t))}))}();
     !function(){"use strict";var e=document.querySelectorAll(".blog .post-content img:not(.featured)");if(e.length){var t=document.createElement("div");t.className="image-zoom-overlay",document.body.appendChild(t),[].slice.call(e).forEach((function(e){e.addEventListener("click",(function(e){e.stopPropagation();var o=this.cloneNode(!0);o.classList.remove("zoomed"),t.innerHTML="",t.appendChild(o),t.classList.add("active"),o.addEventListener("click",(function(e){e.stopPropagation(),n()}))}))})),t.addEventListener("click",(function(e){e.target===t&&n()})),document.addEventListener("keydown",(function(e){"Escape"===e.key&&n()}))}function n(){t.classList.remove("active"),t.innerHTML=""}}();
    -<<<<<<<< HEAD:antora-ui-camel/public/_/js/site-72c5696123.js
    -!function(){"use strict";var n=["/camel-k/","/camel-quarkus/","/camel-spring-boot/","/camel-kafka-connector/","/camel-kamelets/","/camel-karaf/"],e=["/manual/","/user-guide/","/architecture/","/getting-started/","/faq/"];function r(n,e){return!!n&&e.some((function(e){return-1!==n.indexOf(e)}))}function t(n){return r(n,e)}function c(n){return!!n&&-1!==n.indexOf("/components/")}var a=["lvl6","lvl5","lvl4","lvl3","lvl2","lvl1","lvl0"];document.addEventListener("DOMContentLoaded",(function(){window.docsearch&&document.getElementById("docsearch")&&window.docsearch({container:"#docsearch",appId:"V62SL4FFIW",apiKey:"1b7e52df4759e32dd49adedb286997f6",indices:[{name:"apache_camel",searchParameters:{hitsPerPage:75}}],transformItems:function(e){return function(n){return n.map((function(n){var e=n.hierarchy||{},r=a.find((function(n){return e[n]}));return Object.assign({},n,{type:r||"content"})}))}(function(n){return n.slice().sort((function(n,e){var r=t(n.url);if(r!==t(e.url))return r?-1:1;var a=c(n.url);return a!==c(e.url)?a?1:-1:0}))}(function(n){var e={};return n.filter((function(n){var r=function(n){if(!n)return"";var e=n.split("#")[0];return e.endsWith("/")?e.slice(0,-1):e}(n.url);return e[r]=(e[r]||0)+1,e[r]<=2}))}(e.filter((function(e){return!r(e.url,n)})))))}})}))}();
    -document.addEventListener("DOMContentLoaded",(function(){var e=function(e){return".*"+e+".*"},n=document.querySelector(".nav-panel-menu input.search");if(n){var t=document.querySelectorAll(".nav-link");n.addEventListener("keyup",(function(){for(var r=n.value.split(""),i=new RegExp(r.map(e).join(""),"i"),a=0;a"+o[u]+"",l=++u;u"+o[u]+"",l=++u;u>>>>>>> 27f17e7a (chore: regen antora-ui bundle for the docs UI redesign):antora-ui-camel/public/_/js/site-319f1b41a2.js
    -
    +!function(){"use strict";var e=document.querySelector(".home-tablist");if(e){var t=[].slice.call(e.querySelectorAll(".home-tab")),n=function(e,n){t.forEach((function(t){var n=t===e;t.setAttribute("aria-selected",n?"true":"false"),t.setAttribute("tabindex",n?"0":"-1");var o=document.getElementById(t.getAttribute("aria-controls"));o&&(o.hidden=!n)})),n&&e.focus()};t.forEach((function(e,o){e.addEventListener("click",(function(){n(e,!1)})),e.addEventListener("keydown",(function(e){var i;"ArrowRight"===e.key?i=t[(o+1)%t.length]:"ArrowLeft"===e.key?i=t[(o-1+t.length)%t.length]:"Home"===e.key?i=t[0]:"End"===e.key&&(i=t[t.length-1]),i&&(e.preventDefault(),n(i,!0))}))}))}var o=document.querySelector(".home-cli-copy");if(o)if(window.navigator&&window.navigator.clipboard){var i,r=o.textContent;o.addEventListener("click",(function(){window.navigator.clipboard.writeText(o.dataset.command).then((function(){o.textContent="Copied!",clearTimeout(i),i=setTimeout((function(){o.textContent=r}),1600)}))}))}else o.remove()}();
     ||||||| original
    -
    -=======
    +document.addEventListener("DOMContentLoaded",(function(){var e=document.getElementById("search");e&&document.addEventListener("keydown",(function(t){if(!("/"!==t.key||t.ctrlKey||t.metaKey||t.altKey)){var n=t.target;n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName||n.isContentEditable)||(t.preventDefault(),e.focus())}}))}));
     !function(){"use strict";var e=document.querySelector(".home-tablist");if(e){var t=[].slice.call(e.querySelectorAll(".home-tab")),n=function(e,n){t.forEach((function(t){var n=t===e;t.setAttribute("aria-selected",n?"true":"false"),t.setAttribute("tabindex",n?"0":"-1");var o=document.getElementById(t.getAttribute("aria-controls"));o&&(o.hidden=!n)})),n&&e.focus()};t.forEach((function(e,o){e.addEventListener("click",(function(){n(e,!1)})),e.addEventListener("keydown",(function(e){var i;"ArrowRight"===e.key?i=t[(o+1)%t.length]:"ArrowLeft"===e.key?i=t[(o-1+t.length)%t.length]:"Home"===e.key?i=t[0]:"End"===e.key&&(i=t[t.length-1]),i&&(e.preventDefault(),n(i,!0))}))}))}var o=document.querySelector(".home-cli-copy");if(o)if(window.navigator&&window.navigator.clipboard){var i,r=o.textContent;o.addEventListener("click",(function(){window.navigator.clipboard.writeText(o.dataset.command).then((function(){o.textContent="Copied!",clearTimeout(i),i=setTimeout((function(){o.textContent=r}),1600)}))}))}else o.remove()}();
    +=======
    +document.addEventListener("DOMContentLoaded",(function(){var e=document.getElementById("search");e&&document.addEventListener("keydown",(function(t){if(!("/"!==t.key||t.ctrlKey||t.metaKey||t.altKey)){var n=t.target;n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName||n.isContentEditable)||(t.preventDefault(),e.focus())}}))}));
    +!function(){"use strict";var e=document.querySelector(".home-tablist");if(e){var t=[].slice.call(e.querySelectorAll(".home-tab")),n=function(e,n){t.forEach((function(t){var n=t===e;t.setAttribute("aria-selected",n?"true":"false"),t.setAttribute("tabindex",n?"0":"-1");var o=document.getElementById(t.getAttribute("aria-controls"));o&&(o.hidden=!n)})),n&&e.focus()};t.forEach((function(e,o){e.addEventListener("click",(function(){n(e,!1)})),e.addEventListener("keydown",(function(e){var a;"ArrowRight"===e.key?a=t[(o+1)%t.length]:"ArrowLeft"===e.key?a=t[(o-1+t.length)%t.length]:"Home"===e.key?a=t[0]:"End"===e.key&&(a=t[t.length-1]),a&&(e.preventDefault(),n(a,!0))}))}))}[].slice.call(document.querySelectorAll(".home-cli-copy, [data-copy-value]")).forEach((function(e){if(window.navigator&&window.navigator.clipboard){var t,n=e.textContent;e.addEventListener("click",(function(){var o=e.dataset.copyValue||e.dataset.command;window.navigator.clipboard.writeText(o).then((function(){e.textContent="Copied!",clearTimeout(t),t=setTimeout((function(){e.textContent=n}),1600)}))}))}else e.remove()}))}();
     >>>>>>> theirs
    \ No newline at end of file
    diff --git a/antora-ui-camel/public/_/partials/footer-scripts.hbs b/antora-ui-camel/public/_/partials/footer-scripts.hbs
    index 141e42e00f7..79142d37eb8 100644
    --- a/antora-ui-camel/public/_/partials/footer-scripts.hbs
    +++ b/antora-ui-camel/public/_/partials/footer-scripts.hbs
    @@ -1,5 +1,5 @@
     
    -
    +
     
     
     
    diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs
    index e29a06d350d..4e6b6404f0c 100644
    --- a/antora-ui-camel/public/_/partials/head-styles.hbs
    +++ b/antora-ui-camel/public/_/partials/head-styles.hbs
    @@ -1 +1 @@
    -    
    +    
    diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest
    index 0740052cd4c..6d4d65d54d8 100644
    --- a/antora-ui-camel/public/_/rev-manifest
    +++ b/antora-ui-camel/public/_/rev-manifest
    @@ -1,5 +1,5 @@
     {
    -  "css/site.css": "css/site-fed18c630b.css",
    +  "css/site.css": "css/site-f1cc375821.css",
       "img/algolia.svg": "img/algolia-f4ab98e0de.svg",
       "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg",
       "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg",
    @@ -44,7 +44,7 @@
       "img/team.svg": "img/team-899f1050c2.svg",
       "img/tooling.svg": "img/tooling-f5e235c238.svg",
       "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg",
    -  "js/site.js": "js/site-48ffd3a465.js",
    +  "js/site.js": "js/site-c7bbbf7be8.js",
       "js/vendor/algoliasearch.js": "js/vendor/algoliasearch-6711ef4b37.js",
       "js/vendor/highlight.js": "js/vendor/highlight-de2def4bea.js",
       "js/vendor/svg4everybody.js": "js/vendor/svg4everybody-a0c573f2b9.js",
    
    From 862413d79e1362e6770160bfe9ead1c0f9511760 Mon Sep 17 00:00:00 2001
    From: Adriano Machado <60320+ammachado@users.noreply.github.com>
    Date: Fri, 4 Sep 2026 20:23:04 -0400
    Subject: [PATCH 107/209] fix(blog): use phrasing content for post date/month
     inside 
    VersionRelease dateDescriptionVersionRelease dateDescription
    - {{ .Params.version }} + {{ .Params.version }} + {{ if eq .Params.kind "lts" }}LTS{{ end }} {{ .Date | dateFormat "2006-01-02" }}{{ .Params.preview }}{{ .Date | dateFormat "2006-01-02" }}{{ .Params.preview }}
    . Also normalize the site's connector/component count from 350+/300+ to 390+ across these five evergreen pages (17 occurrences), matching the figure already sourced and used on the redesigned pages. Historical anchors (19 components in 2007) are left untouched; content/blog/ is untouched per standing ruling since those are dated, published posts. --- content/camel-core/_index.md | 2 +- content/camel-dna/_index.md | 8 +++++--- content/trust/_index.md | 4 ++-- content/what-is-apache-camel/_index.md | 16 +++++++++------- content/when-to-use/_index.md | 8 ++++---- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/content/camel-core/_index.md b/content/camel-core/_index.md index a9828513345..1243df449bb 100644 --- a/content/camel-core/_index.md +++ b/content/camel-core/_index.md @@ -53,7 +53,7 @@ The Apache Camel Core is the foundation for all other projects. Ideal for experi ## Reference Documentation

    - The comprehensive reference documentation for all 300+ Camel components, enterprise integration patterns (EIPs) and links to the JavaDoc documentation. + The comprehensive reference documentation for all 390+ Camel components, enterprise integration patterns (EIPs) and links to the JavaDoc documentation.

    Learn More diff --git a/content/camel-dna/_index.md b/content/camel-dna/_index.md index f83eefa5205..066294bd48c 100644 --- a/content/camel-dna/_index.md +++ b/content/camel-dna/_index.md @@ -64,7 +64,7 @@ Endpoint → Processor → Processor → Processor → Endpoint This simple pipeline model turned out to be powerful enough to express any integration pattern. A content-based router is a processor that picks the next endpoint. A splitter is a processor that turns one message into many. An aggregator collects messages until a condition is met. Every pattern in the [Enterprise Integration Patterns](https://www.enterpriseintegrationpatterns.com/) book by Gregor Hohpe and Bobby Woolf maps cleanly onto this model — and Camel turned all of them into code. -The `from().to()` syntax is the user-facing expression of this architecture. But underneath, it's always been endpoints and processors — a design so composable that it scaled from 19 components to 350+ without ever needing to change the core model. +The `from().to()` syntax is the user-facing expression of this architecture. But underneath, it's always been endpoints and processors — a design so composable that it scaled from 19 components to 390+ without ever needing to change the core model. ## That same route today @@ -95,6 +95,7 @@ No Maven project. No build step. No manual wiring. Just one YAML file and one co ## What changed, what didn't +{{< table >}} | | **Camel 1.0** (2007) | **Camel CLI** (today) | |---|---|---| | **Language** | Java (40+ lines) | YAML, Java, XML — your choice | @@ -103,10 +104,11 @@ No Maven project. No build step. No manual wiring. Just one YAML file and one co | **Component setup** | Manual ConnectionFactory wiring | Auto-configured via properties | | **Run command** | `mvn camel:run` | `camel run *` | | **Dependencies** | Declared in pom.xml | Auto-downloaded | -| **Components** | 19 | 350+ | +| **Components** | 19 | 390+ | | **Patterns (EIPs)** | ~20 | 65+ | | **Contributors** | A handful | 1,600+ | | **Lines of code** | Tens of thousands | Millions | +{{< /table >}} What stayed the same: **`from("jms:queue:test.queue").to("file://test")`** @@ -136,7 +138,7 @@ SQL has `SELECT * FROM`. Camel has `from().to()`. Both are ideas so fundamental that they outlasted every technology shift around them — new languages, new runtimes, new architectures, cloud, containers, AI. The world changed; the abstraction didn't need to. -Thousands of companies. Billions of messages. 350+ connectors. 65+ patterns. 100,000+ commits. 1,600+ contributors. Nearly two decades of production use. +Thousands of companies. Billions of messages. 390+ connectors. 65+ patterns. 100,000+ commits. 1,600+ contributors. Nearly two decades of production use. It all started with one line: diff --git a/content/trust/_index.md b/content/trust/_index.md index ecf4043caac..b0c5a0f3e14 100644 --- a/content/trust/_index.md +++ b/content/trust/_index.md @@ -201,7 +201,7 @@ major release. The community has fixed [7,070 out of 7,081 reported bugs](/blog/2026/06/camel-bug-fix-track-record/) — a **99.8% resolution rate** — with a median fix time of **1 day**. That track record has been -sustained for 17 of the last 19 years across 350+ connectors and 272 production releases. Only 6 +sustained for 17 of the last 19 years across 390+ connectors and 272 production releases. Only 6 bugs are open today. When something breaks, it gets fixed fast, and the data is there to prove it.

    @@ -297,7 +297,7 @@ are logged as warnings so existing applications are not broken. AI coding assistants are remarkably good at Apache Camel — and it is not an accident. [Nineteen years of stable APIs](/blog/2026/06/camel-ai-trained/) mean training data does not go stale, 11,700+ Stack Overflow answers provide real-world examples, and a predictable component model -lets LLMs generalize across 350+ connectors. Add a built-in [MCP server](/manual/camel-jbang-mcp.html), +lets LLMs generalize across 390+ connectors. Add a built-in [MCP server](/manual/camel-jbang-mcp.html), machine-readable catalog metadata, a schema-validated YAML DSL, and dedicated [AI integration patterns](/components/next/eips/ai-patterns.html) for building AI-powered routes, and Camel is one of the best-trained integration frameworks for AI-assisted development today. diff --git a/content/what-is-apache-camel/_index.md b/content/what-is-apache-camel/_index.md index 8a3ab0a933f..fbef93e65db 100644 --- a/content/what-is-apache-camel/_index.md +++ b/content/what-is-apache-camel/_index.md @@ -1,6 +1,6 @@ --- title: "What is Apache Camel?" -description: "Apache Camel is an open-source integration framework with 350+ connectors, 65+ enterprise integration patterns, and multiple DSLs including Java, YAML, and XML. It connects applications, services, APIs, and data — whether they live in the cloud, on-premise, or both." +description: "Apache Camel is an open-source integration framework with 390+ connectors, 65+ enterprise integration patterns, and multiple DSLs including Java, YAML, and XML. It connects applications, services, APIs, and data — whether they live in the cloud, on-premise, or both." keywords: - apache camel - integration framework @@ -21,7 +21,7 @@ keywords: It connects your applications, services, APIs, and data — whether they live in the cloud, on-premise, or both. You describe what should happen — read from Kafka, transform the data, write to a database — and Camel -handles the protocols, formats, and error handling. With 350+ ready-made connectors and 65+ proven +handles the protocols, formats, and error handling. With 390+ ready-made connectors and 65+ proven integration patterns, you write the logic once and run it on Spring Boot, Quarkus, or standalone. Routes can be written in Java, YAML, or XML — or designed visually with Kaoto or Karavan. @@ -86,7 +86,7 @@ Camel supports multiple ways to work: Pick the style that fits your team. Mix them in the same project if you want. -### 350+ connectors — included, not extra +### 390+ connectors — included, not extra Kafka, AWS (S3, SQS, Lambda, DynamoDB), Azure, GCP, Salesforce, ServiceNow, Slack, databases (JDBC, MongoDB, Cassandra), messaging (JMS, AMQP, MQTT), file protocols (FTP, SFTP), AI services, and hundreds more. @@ -111,7 +111,7 @@ These aren't theoretical — they're production-tested patterns used by thousand ## The origin story -The very first Camel route ever written was `from("jms:queue:test.queue").to("file://test")` — one line, June 2007. Nearly two decades later, that same idea powers every Camel route: take data from here, send it there. The framework grew from 19 components to 350+, from a handful of contributors to 1,500+ — but the DNA never changed. +The very first Camel route ever written was `from("jms:queue:test.queue").to("file://test")` — one line, June 2007. Nearly two decades later, that same idea powers every Camel route: take data from here, send it there. The framework grew from 19 components to 390+, from a handful of contributors to 1,500+ — but the DNA never changed. **[Read the full origin story — Camel DNA →](/camel-dna/)** @@ -129,16 +129,18 @@ Camel also provides an **MCP server** (Model Context Protocol) that connects AI ## The numbers +{{< table >}} | Metric | Value | |---|---| -| **Connectors** | 350+ | +| **Connectors** | 390+ | | **Integration patterns** | 65+ | | **Contributors** | 1,500+ | | **Commits** | 100,000+ | | **Years in production** | Nearly two decades | | **Median bug fix time** | 1–2 days | -| **Open bugs** | Typically 10 or fewer (across 350+ connectors) | +| **Open bugs** | Typically 10 or fewer (across 390+ connectors) | | **License** | Apache License 2.0 — free, no cost, forever | +{{< /table >}} ## Try it in 60 seconds @@ -183,7 +185,7 @@ Or design visually: [Kaoto](https://kaoto.io) | [Karavan](https://github.com/apa - [When to use Apache Camel](/when-to-use/) — common use cases and when Camel is the right fit - [Getting Started Guide](/manual/getting-started.html) — build your first integration -- [Component Catalog](/components/next/) — browse 350+ connectors +- [Component Catalog](/components/next/) — browse 390+ connectors - [Enterprise Integration Patterns](/components/next/eips/enterprise-integration-patterns.html) — the pattern library - [Camel on Spring Boot](/camel-spring-boot/latest/) — the most popular runtime - [Camel on Quarkus](/camel-quarkus/latest/) — cloud-native, fast startup diff --git a/content/when-to-use/_index.md b/content/when-to-use/_index.md index b3ed1606d8e..c8466078f1a 100644 --- a/content/when-to-use/_index.md +++ b/content/when-to-use/_index.md @@ -74,7 +74,7 @@ Poll a directory, FTP server, or cloud storage bucket. Pick up new files, transf ### API mediation -Sit between API consumers and providers. Transform request/response formats, handle authentication, throttle traffic, and route to different backends based on content. Camel provides REST DSL for exposing APIs and 350+ components for calling backends. +Sit between API consumers and providers. Transform request/response formats, handle authentication, throttle traffic, and route to different backends based on content. Camel provides REST DSL for exposing APIs and 390+ components for calling backends. ### Data pipelines and ETL @@ -172,11 +172,11 @@ Camel isn't the right tool for everything. ### vs custom integration code -Custom code gives you full control but no reuse. Every new integration — Kafka, FTP, database, cloud service — means writing and maintaining protocol-specific code, error handling, retry logic, and connection management from scratch. Camel provides this out of the box for 350+ systems with significantly less code, and the error handling is more robust. Camel also includes a built-in test framework — mock endpoints, adviceWith, and auto-wired test support — so you can unit test routes without deploying them. +Custom code gives you full control but no reuse. Every new integration — Kafka, FTP, database, cloud service — means writing and maintaining protocol-specific code, error handling, retry logic, and connection management from scratch. Camel provides this out of the box for 390+ systems with significantly less code, and the error handling is more robust. Camel also includes a built-in test framework — mock endpoints, adviceWith, and auto-wired test support — so you can unit test routes without deploying them. ### vs Spring Integration -Spring Integration is a good choice when integration is a small part of a larger Spring application — polling an SFTP folder, processing a JMS queue. Camel is the better choice when integration is your core problem: many systems, complex routing, diverse protocols. Camel has 350+ connectors vs Spring Integration's ~40 adapters, richer EIP support (saga, circuit breaker, dynamic routing), and the YAML DSL for non-Java use. Both run on Spring Boot — they're not mutually exclusive. +Spring Integration is a good choice when integration is a small part of a larger Spring application — polling an SFTP folder, processing a JMS queue. Camel is the better choice when integration is your core problem: many systems, complex routing, diverse protocols. Camel has 390+ connectors vs Spring Integration's ~40 adapters, richer EIP support (saga, circuit breaker, dynamic routing), and the YAML DSL for non-Java use. Both run on Spring Boot — they're not mutually exclusive. ### vs managed iPaaS platforms @@ -186,7 +186,7 @@ Managed platforms (MuleSoft, Dell Boomi, Informatica) provide a cloud-hosted env - [What is Apache Camel?](/what-is-apache-camel/) — introduction, architecture, and getting started - [Getting Started Guide](/manual/getting-started.html) — build your first integration -- [Component Catalog](/components/next/) — browse 350+ connectors +- [Component Catalog](/components/next/) — browse 390+ connectors - [Enterprise Integration Patterns](/components/next/eips/enterprise-integration-patterns.html) — the pattern library - [User Stories](/community/user-stories/) — companies using Camel in production - [Camel CLI](/manual/camel-jbang.html) — prototype integrations from the command line From e956477bf686b1dbacc9f6267da849b0a7c8a3d3 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:41:31 -0400 Subject: [PATCH 119/209] fix(misc,docs): scope the misc flex rule and finish the connector count .misc p { display: flex } was written for an image-and-caption paragraph, but applied to every

    it made the text node and each inline link separate flex items, rendering /misc/'s prose links as narrow vertical letter-stacks. Scope it to paragraphs that actually contain an image, matching the :has() usage already in main.css. data/docs-projects.yaml was the last place still advertising 300+ components while the rest of the site says 390+. Co-Authored-By: Claude Opus 5 (1M context) --- antora-ui-camel/src/css/misc.css | 5 ++++- data/docs-projects.yaml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/antora-ui-camel/src/css/misc.css b/antora-ui-camel/src/css/misc.css index dac797706f4..150c35d1b0d 100644 --- a/antora-ui-camel/src/css/misc.css +++ b/antora-ui-camel/src/css/misc.css @@ -1,4 +1,7 @@ -.misc p { +/* Only the image-and-caption paragraph shape wants flex. Applied to every

    , + it turns the text node and each inline link into separate flex items, which + renders prose links as narrow vertical letter-stacks. */ +.misc p:has(img) { display: flex; align-items: center; } diff --git a/data/docs-projects.yaml b/data/docs-projects.yaml index e34fd20822a..e4c8c43a71c 100644 --- a/data/docs-projects.yaml +++ b/data/docs-projects.yaml @@ -20,7 +20,7 @@ manual: url: /manual/camel-4x-upgrade-guide.html components: - eyebrow: 300+ components + eyebrow: 390+ components title: Component Reference desc: >- Functionality and configuration for every component, data format, From b6a14d769f8c685069f76220fa4378b46bec725b Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:41:35 -0400 Subject: [PATCH 120/209] chore(antora-ui): regenerate the bundle for the static-page pass Co-Authored-By: Claude Opus 5 (1M context) --- .../public/_/css/{site-ed40aafe81.css => site-36b14b70a3.css} | 4 ++-- antora-ui-camel/public/_/data/rev-manifest.json | 2 +- antora-ui-camel/public/_/helpers/asset.js | 2 +- antora-ui-camel/public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename antora-ui-camel/public/_/css/{site-ed40aafe81.css => site-36b14b70a3.css} (70%) diff --git a/antora-ui-camel/public/_/css/site-ed40aafe81.css b/antora-ui-camel/public/_/css/site-36b14b70a3.css similarity index 70% rename from antora-ui-camel/public/_/css/site-ed40aafe81.css rename to antora-ui-camel/public/_/css/site-36b14b70a3.css index d6e945a1693..62838aa98f3 100644 --- a/antora-ui-camel/public/_/css/site-ed40aafe81.css +++ b/antora-ui-camel/public/_/css/site-36b14b70a3.css @@ -1,4 +1,4 @@ -@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:300;src:local("Open Sans Light"),local("OpenSans-Light"),url(../font/open-sans-latin-ext-300.woff2) format("woff2"),url(../font/open-sans-latin-ext-300.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:300;src:local("Open Sans Light Italic"),local("OpenSans-LightItalic"),url(../font/open-sans-latin-ext-300-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-300-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:700;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(../font/open-sans-latin-ext-700.woff2) format("woff2"),url(../font/open-sans-latin-ext-700.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:700;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(../font/open-sans-latin-ext-700-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-700-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold"),local("OpenSans-ExtraBold"),url(../font/open-sans-latin-ext-800.woff2) format("woff2"),url(../font/open-sans-latin-ext-800.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold Italic"),local("OpenSans-ExtraBoldItalic"),url(../font/open-sans-latin-ext-800-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-800-italic.woff) format("woff")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:500;src:local("Archivo Medium"),local("Archivo-Medium"),url(../font/archivo-latin-500-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:600;src:local("Archivo SemiBold"),local("Archivo-SemiBold"),url(../font/archivo-latin-600-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:700;src:local("Archivo Bold"),local("Archivo-Bold"),url(../font/archivo-latin-700-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:800;src:local("Archivo ExtraBold"),local("Archivo-ExtraBold"),url(../font/archivo-latin-800-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:local("JetBrains Mono Regular"),local("JetBrainsMono-Regular"),url(../font/jetbrains-mono-latin-400-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:local("JetBrains Mono Medium"),local("JetBrainsMono-Medium"),url(../font/jetbrains-mono-latin-500-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:local("JetBrains Mono SemiBold"),local("JetBrainsMono-SemiBold"),url(../font/jetbrains-mono-latin-600-normal.woff2) format("woff2")}.fa{display:inline-block}.fa-lock::before{content:"🔒"}body,html{height:100%}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}::-moz-selection{background:#cf7428;color:#fff}::selection{background:#cf7428;color:#fff}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;-webkit-text-size-adjust:100%}@media screen and (width >= 1025px){html{font-size:1.125em}}body{background:#faf7f1;color:#3a332b;font-family:Open Sans,system-ui,sans-serif;line-height:1.15;margin:0}h1,h2,h3,h4,h5,h6{font-family:Archivo,sans-serif}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{color:#211c17;font-family:JetBrains Mono,ui-monospace,monospace;overflow-wrap:break-word}b,dt,strong,th{font-weight:700}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}mark{color:#e97826;font-weight:700;background:#fff}.text-center{text-align:center}.body{min-height:calc(100vh - 42.66667rem);word-wrap:break-word}@media screen and (width >= 1025px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:3.66667rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (width >= 769px){.nav-container{width:15.55556rem}}@media screen and (width >= 1025px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible;padding:0}@media screen and (width <= 1024px){.nav-category{margin-left:1rem}}.nav{background:#f4eee3;border-right:1px solid #e7e0d5;height:calc(100vh - 6.22222rem);position:relative;top:2.55556rem}@media screen and (width >= 769px){.nav{-webkit-box-shadow:none;box-shadow:none}}@media screen and (width >= 1025px){.nav{top:3.66667rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.66667rem)}}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}.nav-search{-webkit-box-flex:0;-ms-flex:none;flex:none;padding:.77778rem .88889rem;border-bottom:1px solid #e7e0d5;position:relative}.nav-search .navbar-search{padding:0}.nav-search input.search{width:100%;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;padding:.44444rem 1.88889rem .44444rem 1.77778rem;background:#fff no-repeat .61111rem/.72222rem url(../img/search-a73cfec790.svg);color:#211c17;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;outline:0}.nav-search input.search::-webkit-input-placeholder{color:#5c554c}.nav-search input.search::-moz-placeholder{color:#5c554c}.nav-search input.search:-ms-input-placeholder{color:#5c554c}.nav-search input.search::-ms-input-placeholder{color:#5c554c}.nav-search input.search::placeholder{color:#5c554c}.nav-search input.search:focus{border-color:#d9ccb8}.nav-search-hint{position:absolute;top:50%;right:1.5rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);padding:.05556rem .33333rem;border-radius:.22222rem;background:#f4eee3;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;pointer-events:none}.nav-search:focus-within .nav-search-hint{display:none}.nav-search #search-cancel{position:absolute;inset:50% 1.5rem auto auto;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none;height:.88889rem;cursor:pointer}.nav-search #search_results{position:absolute;top:100%;left:.88889rem;width:min(600px,90vw);max-width:none;min-width:0;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;background:#fff;z-index:5;max-height:80vh;overflow-y:auto;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);scrollbar-width:thin}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;padding-bottom:2.55556rem;position:relative}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;inset:0}.nav-item[data-depth="2"]>.nav-item-toggle{margin-left:-.675em}.nav-item .nav-list{margin-left:1rem}.nav-menu{min-height:0;width:100%;padding:.77778rem .88889rem 1.11111rem;line-height:1.35;position:relative;word-break:break-word;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.nav-menu::-webkit-scrollbar{width:.425em}.nav-menu::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb:active,.nav-menu::-webkit-scrollbar-thumb:hover{background:grey}@media screen and (width <= 1024px){.nav-menu::-webkit-scrollbar{width:0;background:transparent}}.nav-menu h3.title{color:#211c17;font-family:Archivo,sans-serif;font-size:.77778rem;font-weight:700;margin:0 0 .44444rem;padding:0}.nav-menu a{color:inherit}.nav-list{margin:0;padding:0}.nav-menu>.nav-list{margin-bottom:.5rem}.nav-item{list-style:none;margin-top:0}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.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-8823676a4b.svg) no-repeat 50%/.5rem;border:none;outline:none;line-height:inherit;position:absolute;height:1.33333rem;width:.88889rem;margin-left:-.88889rem}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.nav-menu .nav-text,.nav-menu a.nav-link{display:block;padding:.27778rem .44444rem;border-radius:.33333rem;color:#3a332b;font-size:.75rem;font-weight:400;line-height:1.4}.nav-menu .nav-text:hover,.nav-menu a.nav-link:hover{background:#e7e0d5;color:#211c17;text-decoration:none}.is-current-page>.nav-text,.is-current-page>a.nav-link{background:#fbead8;color:#a84e0d;font-weight:700}.nav-menu .is-current-page>.nav-text:hover,.nav-menu .is-current-page>a.nav-link:hover{background:#fbead8;color:#853c09}.breadcrumbs li .image>img,.nav-link .image>img{width:1em}.nav-panel-explore{background:#f4eee3;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;right:0;bottom:0;left:0;max-height:calc(50% + 2.55556rem)}.nav-panel-explore,.nav-panel-explore .context{display:-webkit-box;display:-ms-flexbox;display:flex}.nav-panel-explore .context{-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:2.55556rem;padding:0 .88889rem;border-top:1px solid #e7e0d5;-webkit-box-shadow:none;box-shadow:none;color:#5c554c;cursor:pointer;font-size:.72222rem;line-height:1}.nav-panel-explore .context .title{font-weight:600}.nav-panel-explore .context .noversion,.nav-panel-explore .context .version{display:block;padding:.16667rem 1.22222rem .16667rem .5rem;border:1px solid #e7e0d5;border-radius:.33333rem;background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.nav-panel-explore .components{line-height:1.6;-webkit-box-shadow:inset 0 1px 5px #f5f5f5;box-shadow:inset 0 1px 5px #f5f5f5;background:#f0f0f0;padding:.5rem .75rem 0;margin:0;overflow-y:auto;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:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:700}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;margin-top:-.25rem;line-height:1}.nav-panel-explore .component .version{display:block;margin:.375rem .375rem 0 0}.nav-panel-explore .component .title a{color:inherit;display:inherit}.nav-panel-explore .component .version a{border:1px solid #e7e0d5;border-radius:.25rem;color:inherit;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentcolor;opacity:.9;font-weight:700}@media screen and (width <= 1024px){aside.toc.sidebar{display:none}}@media screen and (width >= 1025px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}main.article>.content{display:grid;grid-template-columns:minmax(0,1fr);gap:3.11111rem;max-width:65.55556rem;padding:2.44444rem 2.22222rem 4.44444rem}main.article>.content:has(>aside.toc.sidebar){grid-template-columns:minmax(0,1fr) 12.22222rem}main.article>.content>.doc{margin:0;max-width:none;padding:0}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 12.22222rem;flex:0 0 12.22222rem;min-width:0}.toc.sidebar .toc-menu ul{scrollbar-width:thin}.toc.sidebar .toc-menu ul::-webkit-scrollbar{width:.425em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:active,.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:hover{background:grey}}@media screen and (width >= 1216px){aside.toc.sidebar{-ms-flex-preferred-size:12.22222rem;flex-basis:12.22222rem}}.toolbar{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:rgba(250,247,241,.92);backdrop-filter:blur(8px);border-bottom:1px solid #e7e0d5;color:#5c554c;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.75rem;gap:1rem;height:2.55556rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:0 2.22222rem;position:sticky;top:3.66667rem;z-index:2}.static.toolbar,.toolbar{-webkit-box-shadow:none;box-shadow:none}.static.toolbar{border-bottom:0;margin:0;max-width:100vw}@media screen and (width <= 1024px){.toolbar{top:3.66667rem;padding:0 .88889rem}}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu-8775cec4be.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;height:2.5rem;padding:0;width:2.5rem;margin-right:-.25rem}@media screen and (width >= 1025px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back-e8d811f74c.svg);background-size:41.5%}.edit-this-page{display:none;padding:0}@media screen and (width >= 1025px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#5c554c;font-weight:600}.toolbar .edit-this-page a:hover{color:#a84e0d}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;min-width:0;padding:0;line-height:1.35}@media screen and (width >= 1025px){.breadcrumbs{display:block}}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .44444rem}.breadcrumbs li:last-of-type::after{content:none}.toolbar .breadcrumbs a{color:#5c554c}.toolbar .breadcrumbs a:hover{color:#a84e0d}.toolbar .breadcrumbs li:last-of-type a{color:#211c17;font-weight:600;text-decoration:none}.page-versions{display:none;margin:0;position:relative;line-height:1}@media screen and (width >= 1025px){.page-versions{display:block}}.page-versions .version-menu-toggle{background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;color:#5c554c;cursor:pointer;outline:none;padding:.16667rem 1.22222rem .16667rem .5rem;position:relative;z-index:3}.page-versions .version-menu,.page-versions .version-menu-toggle{border:1px solid #e7e0d5;border-radius:.33333rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.page-versions .version-menu{background-color:#fff;padding:1.66667rem .5rem .44444rem;position:absolute;top:0;left:0;min-width:100%}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#333}.toc.sidebar .toc-menu{margin-right:0;position:sticky;top:7.22222rem}.toc .toc-menu h3{color:#8a8074;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;line-height:1.3;margin:0;padding-bottom:.55556rem;text-transform:uppercase}.toc.sidebar .toc-menu h3{display:block;height:auto}.toc .toc-menu ul{font-size:.75rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 9.72222rem);overflow-y:auto}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.33333rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}@media screen and (width <= 1024px){.toc .toc-menu ul li ul li ul li a{padding-left:1.33333rem}}.toc .toc-menu a{border-left:2px solid #e7e0d5;color:#5c554c;display:block;padding:.33333rem 0 .33333rem .66667rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:not(.is-active):hover{border-left-color:#d9ccb8;color:#211c17}.toc .toc-menu a.is-active{border-left-color:#e97826;color:#211c17;font-weight:600}.sidebar.toc .toc-menu a:focus{background:#f4eee3}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#3a332b;font-size:inherit;-ms-hyphens:auto;hyphens:auto;line-height:1.7;margin:0 auto;padding:0 1rem 4rem}@media screen and (width >= 1025px){.doc{font-size:.88889rem;margin:0 2rem;max-width:75.88889rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#211c17;font-weight:700;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page,.static>h1:first-child{font-size:2.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0}.doc>h1.page img{width:2rem}.doc .doc-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.doc>#preamble>.sectionbody>.paragraph:first-child>p,.doc>h1.page+.paragraph>p{font-size:.91667rem;line-height:1.7;margin:1.11111rem 0 0}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f4eee3;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){font-size:1.44444rem;letter-spacing:-.02em;margin:2.44444rem 0 0;overflow-wrap:break-word;padding:.44444rem 0 0}.doc h3:not(.discrete){font-weight:700;overflow-wrap:break-word}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor,.doc td .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em;background-image:none}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before,.doc td .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,.doc td:hover .anchor{visibility:visible}.doc p{margin:0}.doc .table-wrapper{background:#fff;border:1px solid #e7e0d5;border-radius:.55556rem;margin:.88889rem 0 0;overflow-x:auto}.doc .table-wrapper::-webkit-scrollbar{height:.425em}.doc .table-wrapper::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb:active,.doc .table-wrapper::-webkit-scrollbar-thumb:hover{background:grey}.doc .table-wrapper table{width:100%}.doc .tableblock p{font-size:inherit}.doc .tableblock td:not(:first-child)>p,.doc .tableblock thead,.doc :not(td)>.content,.doc :not(td)>p{-ms-hyphens:auto;hyphens:auto}.doc a{color:#a84e0d;word-break:break-word;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}.doc .camel-project .links a,.doc .sect2 h3 a,.doc .section .links a,.doc li a,.doc table a{background:none}.doc table.tableblock td a{word-break:normal}.doc table.tableblock tbody tr td:first-child{width:25%;overflow-wrap:anywhere;font-weight:700}.doc a:hover{color:#853c09}.doc a.unresolved{color:#d32f2f}.doc i.fa{font-style:normal}.doc p code,.doc thead code{background:#f4eee3;border-radius:.22222rem;color:#211c17;font-size:.80556rem;overflow-wrap:break-word;padding:.11111rem .33333rem}.doc pre{font-size:.75rem;line-height:1.7;margin:0}.doc blockquote{margin:0}.doc .right{float:right}.doc .left{float:left}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock{margin:1rem 0 0;word-break:break-word}.doc table.tableblock{border-collapse:collapse;font-size:.83333rem;margin:0}.doc table.stretch{width:100%}.doc table.tableblock thead th{background:#f4eee3;border-bottom:1px solid #e7e0d5;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;letter-spacing:.06em;padding:.61111rem .88889rem;text-align:left;text-transform:uppercase}.doc table.tableblock>:not(thead) th,.doc table.tableblock td{border-top:1px solid #f0e9dd;border-bottom:0;padding:.66667rem .88889rem}.doc table.tableblock tbody tr:first-child>td,.doc table.tableblock tbody tr:first-child>th{border-top:0}.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{background:#fff;border:1px solid #e7e0d5;border-left:.16667rem solid #e97826;border-radius:0 .66667rem .66667rem 0;-webkit-box-shadow:none;box-shadow:none;margin:1.55556rem 0 0;padding:.88889rem 1.11111rem}.doc .admonitionblock .table-wrapper,.doc .colist .table-wrapper{background:none;border:0;border-radius:0;margin:0;overflow:visible}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.80556rem;line-height:1.6}.doc .admonitionblock td.content>:first-child{margin:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock table{border-collapse:collapse;position:relative;table-layout:auto;width:100%}.doc .admonitionblock td.content{background:none;color:#5c554c;padding:0;width:auto}.doc .admonitionblock td.icon{padding:0 .77778rem 0 0;vertical-align:top;white-space:nowrap;width:1px}.doc .admonitionblock .icon i{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-style:normal;font-weight:600;height:auto;letter-spacing:.04em;line-height:1.4;padding:.16667rem .44444rem;text-transform:uppercase;vertical-align:top}.doc .admonitionblock .icon i::after{content:attr(title);-ms-hyphens:none;hyphens:none;-webkit-writing-mode:horizontal-tb;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.doc .admonitionblock.caution{border-left-color:#a0439c}.doc .admonitionblock.caution .icon i{background:#f7e9f6;color:#8e3b8a}.doc .admonitionblock.important{border-left-color:#d32f2f}.doc .admonitionblock.important .icon i{background:#fce9e9;color:#b02525}.doc .admonitionblock.warning{border-left-color:#e18114}.doc .admonitionblock.warning .icon i{background:#fdf0dc;color:#8a5209}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock img{display:block}.doc .image>img,.doc .imageblock img{height:auto;max-width:100%}.doc table.tableblock td .imageblock img{max-width:50px}#preamble .abstract blockquote{background:#f4eee3;border-left:5px solid #e7e0d5;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock{background:#f4eee3;border-left:5px solid #5d5d5d;color:#5d5d5d;padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#5c554c;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc table.tableblock .paragraph{margin:0;padding:0}.doc .olist .admonitionblock,.doc .ulist .admonitionblock,.doc table.tableblock .admonitionblock{padding:.88889rem 1.11111rem}.doc ol,.doc ul{margin:0;padding:0 0 0 1.22222rem}.doc .olist>ol,.doc .ulist>ul{line-height:1.8}.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:.5rem;list-style:none}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem}.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:.5rem}.doc .olist li,.doc .ulist li{margin-bottom:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{color:#5d5d5d;font-size:.88889rem;font-weight:700;font-style:italic;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc .admonitionblock .title+.paragraph{margin-top:0}.doc .exampleblock>.content{background:#faf7f1;border:.25rem solid #e7e0d5;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#f4eee3;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:700;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight code,.doc pre:not(.highlight){background:#211c17;border-radius:.55556rem;-webkit-box-shadow:none;box-shadow:none;color:#f0e9df;display:block;overflow-x:auto;padding:1rem 1.11111rem}.doc .listingblock{margin-top:.77778rem}.doc pre code{color:inherit}.doc pre.highlight code::-webkit-scrollbar{height:.425em}.doc pre.highlight code::-webkit-scrollbar-track{background:#2b2620;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb{background:#34302a;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb:active,.doc pre.highlight code::-webkit-scrollbar-thumb:hover{background:#8f867a}.doc pre.highlight{position:relative}.doc .listingblock code[data-lang]::before{content:attr(data-lang);display:none;color:#8f867a;font-size:.75rem;letter-spacing:.05em;line-height:1;text-transform:uppercase;position:absolute;top:.25rem;right:.25rem}.doc .listingblock:hover code[data-lang]::before{display:none}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:#8f867a;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:500;line-height:1.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1.25em;height:1.25em;cursor:pointer;position:relative}.doc .source-toolbox .copy-button::before{content:"";display:block;width:1.25em;height:1.25em;background-image:url(../img/copy-d7c1e3194d.svg);background-size:contain;background-repeat:no-repeat;background-position:50%;-ms-flex-negative:0;flex-shrink:0}.doc .source-toolbox .copy-button.clicked::before{background-image:url(../img/copy-checkmark-9a4caf1664.svg)}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#3a332b;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#3a332b;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .3rem 1.5rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;font-style:normal;height:1.25em;line-height:1.2;text-align:center;width:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#f4eee3;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #faf7f1 inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #faf7f1;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:700;line-height:.90909}.doc .icon i::after,.doc .menuseq,.doc .path,.doc a.bare,.doc b.button,.doc code,.doc kbd{-ms-hyphens:none;hyphens:none}@media screen and (width <= 626px){#preamble+.sect1,.doc .sect1+.sect1{overflow-wrap:break-word}}div.badges p{text-align:left}div.badges span{color:#fff;padding:.15rem .3rem;font-weight:400;font-style:normal;font-size:.8rem}div.badges span.badge-key{background-color:#555;border-radius:.2rem 0 0 .2rem}div.badges span.badge-version{background-color:#217ee7;border-radius:0 .2rem .2rem 0}div.badges span.badge-supported{background-color:#4d4fb7;border-radius:0 .2rem .2rem 0}div.badges span.badge-unsupported{background-color:#d32f2f;border-radius:0 .2rem .2rem 0}.static{margin:0 auto}.static dl,.static ol,.static p,.static pre,.static ul{margin:1rem 0 0}.static a.icon{margin:2rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;text-align:center;background:none}.static .box,.static a.icon{display:-webkit-box;display:-ms-flexbox;display:flex}.static .box{margin:1rem 0}.static .box img{margin-top:1rem;height:6rem;margin-right:.5rem}.static .icon a{background-image:none}@media screen and (width >= 1025px){.static{max-width:66.66667rem}}@media screen and (width <= 1024px){.static .box,.static .content,.static .icon{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0;text-align:center;width:100%}.static .box .content{width:100%}.static .box img{height:6rem;max-width:25vw;margin-left:auto}.static .box img:only-child{margin-left:auto;margin-right:auto}.static .box img+img{margin-left:1rem;margin-right:auto}.static .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.static a.icon{margin:0;width:100%}}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.66667rem}.navbar{background:rgba(250,247,241,.9);backdrop-filter:blur(10px);border-bottom:1px solid #e7e0d5;color:#5c554c;font-size:.80556rem;height:3.66667rem;position:fixed;top:0;width:100%;z-index:4}.navbar-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.55556rem;height:100%;width:100%;max-width:66.66667rem;margin-inline:auto;padding-inline:1.77778rem}.navbar a{text-decoration:none}.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.22222rem}.navbar-item{font-weight:600;font-size:.80556rem;color:#5c554c;white-space:nowrap}.navbar-item:hover{color:#211c17}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.61111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;height:auto}.navbar-logo{width:2rem;height:2rem}.navbar-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1.05556rem;letter-spacing:-.02em;color:#211c17;white-space:nowrap}.navbar-burger{color:#5c554c;background:none;border:none;outline:none;line-height:1;height:3rem;position:relative;width:2rem;-ms-flex-negative:0;flex-shrink:0;top:-2.1px;padding:0}.navbar-burger:focus{outline:none}.navbar-burger span{background:#5c554c;display:block;height:1px;left:50%;margin-left:-7px;position:absolute;top:60%;width:25px}.navbar-burger span:first-child{margin-top:-10px}.navbar-burger span:nth-child(2){margin-top:-3px}.navbar-burger span:nth-child(3){margin-top:4px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:left top;transform-origin:left top;margin-top:-.75rem}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:left bottom;transform-origin:left bottom}@media screen and (width <= 1024px){.navbar-menu{display:none}.navbar-menu.is-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:0;position:absolute;top:3.66667rem;left:0;right:0;max-height:calc(100vh - 3.66667rem);overflow-y:auto;background:#faf7f1;border-bottom:1px solid #e7e0d5;padding:.44444rem 1.77778rem}.navbar-menu.is-active .navbar-item{padding:.66667rem 0;border-bottom:1px solid #f0e9dd}.navbar-burger{display:block}}@media screen and (width >= 1025px){.navbar-burger{display:none}}.navbar-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.77778rem;margin-left:auto}.navbar-github .brand-icon{height:1.11111rem;width:1.11111rem;fill:#5c554c;display:block}.navbar-github:hover .brand-icon{fill:#211c17}a.button.navbar-cta{margin:0;padding:.5rem 1rem;border-radius:.38889rem;font-size:.80556rem}.header .navbar-search{padding:0}.header .navbar-search input{border:1px solid #e7e0d5;border-radius:.38889rem;width:11.11111rem;margin:0;padding:.33333rem .55556rem .33333rem 1.66667rem;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;background:no-repeat .5rem/.9rem url(../img/search-a73cfec790.svg);background-color:#fff;color:#211c17;outline:0}.header .navbar-search input:focus-within{background-color:#fff;border-color:#d9ccb8}.header #search-cancel{position:relative;bottom:calc(50% + .1rem);left:calc(100% - 1.25rem);height:1rem;display:none;cursor:pointer}.header #search_results{top:3.66667rem;background:rgba(250,247,241,.9);text-align:left;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);position:absolute;margin-right:10px;overflow-y:auto;max-height:80vh;max-width:min(600px,90vw);min-width:300px;scrollbar-width:thin}#search_results::-webkit-scrollbar{width:.425em}#search_results::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb:active,#search_results::-webkit-scrollbar-thumb:hover{background:grey}.result_header{font-weight:600;color:#211c17;padding-right:.5rem}#search_results div.result{padding:.25rem;pointer-events:none}#search_results div.result:hover{background:#f5f5f5}#search_results div.heading{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#search_results dt{padding:.5rem 0 .5rem .5rem;color:#e97826;text-transform:uppercase;font-weight:700;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#search_results dt.version{height:1.75rem;padding:.3rem;border:2px solid #e97826;border-radius:25px;text-align:center;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}#search_results dd{margin-right:2rem;word-break:break-word}#search_results a{pointer-events:auto;padding:.5rem}#search_results a:hover{text-decoration:underline;-webkit-text-decoration-color:#c1c1c1;text-decoration-color:#c1c1c1}.result_summary{color:#333;padding-top:.3rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}#search_results div.footer-search{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;padding:.75rem}div.footer-search h4{color:#211c17;width:5rem}.no_search_results{padding:1rem;font-weight:700;color:#211c17;border-bottom:2px solid #f5f5f5}.algolia-docsearch-suggestion--highlight{font-weight:700;color:#333}.results-hidden #search_results{display:none}@media (width <= 1024px){.header .navbar-search{min-width:0}.header .navbar-search input{width:100%}.header #search-cancel{margin-top:.75rem}.header #search_results{left:0;width:100vw;top:3.66667rem}}@media (width <= 500px){.header .navbar-search,.navbar-github{display:none}}@media (width <= 430px){.navbar-wordmark{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}}footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#211c17;color:#c4bbac;font-size:.83333rem;line-height:1.6;padding:0;-ms-flex-negative:0;flex-shrink:0}footer .footer{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:2.22222rem;width:100%;max-width:66.66667rem;margin-inline:auto;padding-block:3.11111rem 2.22222rem;padding-inline:1.77778rem}.footer-brand{display:grid;grid-template-columns:auto 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:.61111rem;-moz-column-gap:.61111rem;column-gap:.61111rem}.footer-logo{width:1.88889rem;height:1.88889rem}.footer-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1rem;color:#faf7f1}.footer-blurb{grid-column:1/-1;font-size:.75rem;line-height:1.6;color:#8f867a;margin:.88889rem 0 0;max-width:15.55556rem}footer .footer p.remark{grid-column:1/-1;border-top:1px solid #34302a;margin:0;padding:1.22222rem 0 0;font-size:.69444rem;color:#8f867a}footer .footer a{color:#c4bbac}footer .footer .context{display:inline-block;margin:0 0 1rem}footer .footer .context a{font-size:.83333rem;text-transform:uppercase}footer .footer .context a::after{content:" ";display:inline-block;border-radius:50%;width:8px;height:8px;margin:0 1rem;background:#34302a}footer .footer .context:last-child a::after{display:none}footer .footer .footer-column{margin:0}footer .footer .footer-column dt{font-family:Archivo,sans-serif;font-weight:700;font-size:.72222rem;letter-spacing:.06em;text-transform:uppercase;color:#faf7f1;margin-bottom:.77778rem}footer .footer .footer-column dt label:first-of-type::after{content:"";display:block;position:relative;bottom:0;left:0;height:2px;width:3rem;background:#c4bbac}footer .footer .footer-column dd{margin:0 0 .55556rem}footer .footer .footer-column dd a{font-size:.77778rem;color:#c4bbac}footer .footer .footer-column dd a:hover{color:#faf7f1}.footer-tools{position:relative;top:-2rem;height:0;text-align:right;color:#8a8074;font-size:.72222rem}.footer-tools a{display:inline-block;padding:.4rem;border-radius:.4rem .4rem 0 0;height:2rem;color:#5c554c}.footer-tools a:hover{color:#211c17}footer .resources{grid-column:1/-1;text-align:center}footer .footer .footer-icons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;grid-column:1/-1;line-height:1.6;padding:.5rem;font-weight:700}footer .footer .footer-icons .brand-icon{height:2em;width:1.75em;margin:.35rem;fill:#c4bbac}footer .footer .footer-icons a:hover .brand-icon{fill:#faf7f1}footer .footer dl dt label:nth-child(2),footer .footer input[type=checkbox]{display:none}@media screen and (width <= 1024px){footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}footer .footer{grid-template-columns:1fr}footer .footer .footer-column dt{margin-bottom:1rem;display:-webkit-box;display:-ms-flexbox;display:flex}footer .footer dl dt label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}footer .footer dl dt label:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}footer .footer dl dt label:nth-child(2){display:block;height:1.75rem;width:1.75rem;line-height:1.75rem;font-size:1.75rem;-webkit-transition:.2s;transition:.2s}footer .footer input[type=checkbox]:checked+dl dt label:nth-child(2){-webkit-transform:rotate(45deg);transform:rotate(45deg)}footer .footer dl dd:first-of-type{margin-top:1rem}footer .footer .footer-icons .brand-icon{height:1.5rem}footer input[type=checkbox]:checked+dl dd{display:block}footer input[type=checkbox]+dl dd{display:none}} +@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:300;src:local("Open Sans Light"),local("OpenSans-Light"),url(../font/open-sans-latin-ext-300.woff2) format("woff2"),url(../font/open-sans-latin-ext-300.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:300;src:local("Open Sans Light Italic"),local("OpenSans-LightItalic"),url(../font/open-sans-latin-ext-300-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-300-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:700;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(../font/open-sans-latin-ext-700.woff2) format("woff2"),url(../font/open-sans-latin-ext-700.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:700;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(../font/open-sans-latin-ext-700-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-700-italic.woff) format("woff")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold"),local("OpenSans-ExtraBold"),url(../font/open-sans-latin-ext-800.woff2) format("woff2"),url(../font/open-sans-latin-ext-800.woff) format("woff")}@font-face{font-family:Open Sans;font-style:italic;font-display:swap;font-weight:800;src:local("Open Sans ExtraBold Italic"),local("OpenSans-ExtraBoldItalic"),url(../font/open-sans-latin-ext-800-italic.woff2) format("woff2"),url(../font/open-sans-latin-ext-800-italic.woff) format("woff")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:500;src:local("Archivo Medium"),local("Archivo-Medium"),url(../font/archivo-latin-500-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:600;src:local("Archivo SemiBold"),local("Archivo-SemiBold"),url(../font/archivo-latin-600-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:700;src:local("Archivo Bold"),local("Archivo-Bold"),url(../font/archivo-latin-700-normal.woff2) format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:800;src:local("Archivo ExtraBold"),local("Archivo-ExtraBold"),url(../font/archivo-latin-800-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:local("JetBrains Mono Regular"),local("JetBrainsMono-Regular"),url(../font/jetbrains-mono-latin-400-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:local("JetBrains Mono Medium"),local("JetBrainsMono-Medium"),url(../font/jetbrains-mono-latin-500-normal.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:local("JetBrains Mono SemiBold"),local("JetBrainsMono-SemiBold"),url(../font/jetbrains-mono-latin-600-normal.woff2) format("woff2")}.fa{display:inline-block}.fa-lock::before{content:"🔒"}body,html{height:100%}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}::-moz-selection{background:#cf7428;color:#fff}::selection{background:#cf7428;color:#fff}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;-webkit-text-size-adjust:100%}@media screen and (width >= 1025px){html{font-size:1.125em}}body{background:#faf7f1;color:#3a332b;font-family:Open Sans,system-ui,sans-serif;line-height:1.15;margin:0}h1,h2,h3,h4,h5,h6{font-family:Archivo,sans-serif}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{color:#211c17;font-family:JetBrains Mono,ui-monospace,monospace;overflow-wrap:break-word}b,dt,strong,th{font-weight:700}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}mark{color:#e97826;font-weight:700;background:#fff}.text-center{text-align:center}.body{min-height:calc(100vh - 42.66667rem);word-wrap:break-word}@media screen and (width >= 1025px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:3.66667rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (width >= 769px){.nav-container{width:15.55556rem}}@media screen and (width >= 1025px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible;padding:0}@media screen and (width <= 1024px){.nav-category{margin-left:1rem}}.nav{background:#f4eee3;border-right:1px solid #e7e0d5;height:calc(100vh - 6.22222rem);position:relative;top:2.55556rem}@media screen and (width >= 769px){.nav{-webkit-box-shadow:none;box-shadow:none}}@media screen and (width >= 1025px){.nav{top:3.66667rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.66667rem)}}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}.nav-search{-webkit-box-flex:0;-ms-flex:none;flex:none;padding:.77778rem .88889rem;border-bottom:1px solid #e7e0d5;position:relative}.nav-search .navbar-search{padding:0}.nav-search input.search{width:100%;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;padding:.44444rem 1.88889rem .44444rem 1.77778rem;background:#fff no-repeat .61111rem/.72222rem url(../img/search-a73cfec790.svg);color:#211c17;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;outline:0}.nav-search input.search::-webkit-input-placeholder{color:#5c554c}.nav-search input.search::-moz-placeholder{color:#5c554c}.nav-search input.search:-ms-input-placeholder{color:#5c554c}.nav-search input.search::-ms-input-placeholder{color:#5c554c}.nav-search input.search::placeholder{color:#5c554c}.nav-search input.search:focus{border-color:#d9ccb8}.nav-search-hint{position:absolute;top:50%;right:1.5rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);padding:.05556rem .33333rem;border-radius:.22222rem;background:#f4eee3;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;pointer-events:none}.nav-search:focus-within .nav-search-hint{display:none}.nav-search #search-cancel{position:absolute;inset:50% 1.5rem auto auto;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none;height:.88889rem;cursor:pointer}.nav-search #search_results{position:absolute;top:100%;left:.88889rem;width:min(600px,90vw);max-width:none;min-width:0;margin:0;border:1px solid #e7e0d5;border-radius:.38889rem;background:#fff;z-index:5;max-height:80vh;overflow-y:auto;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);scrollbar-width:thin}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;padding-bottom:2.55556rem;position:relative}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;inset:0}.nav-item[data-depth="2"]>.nav-item-toggle{margin-left:-.675em}.nav-item .nav-list{margin-left:1rem}.nav-menu{min-height:0;width:100%;padding:.77778rem .88889rem 1.11111rem;line-height:1.35;position:relative;word-break:break-word;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.nav-menu::-webkit-scrollbar{width:.425em}.nav-menu::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.nav-menu::-webkit-scrollbar-thumb:active,.nav-menu::-webkit-scrollbar-thumb:hover{background:grey}@media screen and (width <= 1024px){.nav-menu::-webkit-scrollbar{width:0;background:transparent}}.nav-menu h3.title{color:#211c17;font-family:Archivo,sans-serif;font-size:.77778rem;font-weight:700;margin:0 0 .44444rem;padding:0}.nav-menu a{color:inherit}.nav-list{margin:0;padding:0}.nav-menu>.nav-list{margin-bottom:.5rem}.nav-item{list-style:none;margin-top:0}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.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-8823676a4b.svg) no-repeat 50%/.5rem;border:none;outline:none;line-height:inherit;position:absolute;height:1.33333rem;width:.88889rem;margin-left:-.88889rem}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.nav-menu .nav-text,.nav-menu a.nav-link{display:block;padding:.27778rem .44444rem;border-radius:.33333rem;color:#3a332b;font-size:.75rem;font-weight:400;line-height:1.4}.nav-menu .nav-text:hover,.nav-menu a.nav-link:hover{background:#e7e0d5;color:#211c17;text-decoration:none}.is-current-page>.nav-text,.is-current-page>a.nav-link{background:#fbead8;color:#a84e0d;font-weight:700}.nav-menu .is-current-page>.nav-text:hover,.nav-menu .is-current-page>a.nav-link:hover{background:#fbead8;color:#853c09}.breadcrumbs li .image>img,.nav-link .image>img{width:1em}.nav-panel-explore{background:#f4eee3;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;right:0;bottom:0;left:0;max-height:calc(50% + 2.55556rem)}.nav-panel-explore,.nav-panel-explore .context{display:-webkit-box;display:-ms-flexbox;display:flex}.nav-panel-explore .context{-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:2.55556rem;padding:0 .88889rem;border-top:1px solid #e7e0d5;-webkit-box-shadow:none;box-shadow:none;color:#5c554c;cursor:pointer;font-size:.72222rem;line-height:1}.nav-panel-explore .context .title{font-weight:600}.nav-panel-explore .context .noversion,.nav-panel-explore .context .version{display:block;padding:.16667rem 1.22222rem .16667rem .5rem;border:1px solid #e7e0d5;border-radius:.33333rem;background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.nav-panel-explore .components{line-height:1.6;-webkit-box-shadow:inset 0 1px 5px #f5f5f5;box-shadow:inset 0 1px 5px #f5f5f5;background:#f0f0f0;padding:.5rem .75rem 0;margin:0;overflow-y:auto;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:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:700}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;margin-top:-.25rem;line-height:1}.nav-panel-explore .component .version{display:block;margin:.375rem .375rem 0 0}.nav-panel-explore .component .title a{color:inherit;display:inherit}.nav-panel-explore .component .version a{border:1px solid #e7e0d5;border-radius:.25rem;color:inherit;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentcolor;opacity:.9;font-weight:700}@media screen and (width <= 1024px){aside.toc.sidebar{display:none}}@media screen and (width >= 1025px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}main.article>.content{display:grid;grid-template-columns:minmax(0,1fr);gap:3.11111rem;max-width:65.55556rem;padding:2.44444rem 2.22222rem 4.44444rem}main.article>.content:has(>aside.toc.sidebar){grid-template-columns:minmax(0,1fr) 12.22222rem}main.article>.content>.doc{margin:0;max-width:none;padding:0}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 12.22222rem;flex:0 0 12.22222rem;min-width:0}.toc.sidebar .toc-menu ul{scrollbar-width:thin}.toc.sidebar .toc-menu ul::-webkit-scrollbar{width:.425em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:active,.toc.sidebar .toc-menu ul::-webkit-scrollbar-thumb:hover{background:grey}}@media screen and (width >= 1216px){aside.toc.sidebar{-ms-flex-preferred-size:12.22222rem;flex-basis:12.22222rem}}.toolbar{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:rgba(250,247,241,.92);backdrop-filter:blur(8px);border-bottom:1px solid #e7e0d5;color:#5c554c;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.75rem;gap:1rem;height:2.55556rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:0 2.22222rem;position:sticky;top:3.66667rem;z-index:2}.static.toolbar,.toolbar{-webkit-box-shadow:none;box-shadow:none}.static.toolbar{border-bottom:0;margin:0;max-width:100vw}@media screen and (width <= 1024px){.toolbar{top:3.66667rem;padding:0 .88889rem}}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu-8775cec4be.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;height:2.5rem;padding:0;width:2.5rem;margin-right:-.25rem}@media screen and (width >= 1025px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back-e8d811f74c.svg);background-size:41.5%}.edit-this-page{display:none;padding:0}@media screen and (width >= 1025px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#5c554c;font-weight:600}.toolbar .edit-this-page a:hover{color:#a84e0d}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;min-width:0;padding:0;line-height:1.35}@media screen and (width >= 1025px){.breadcrumbs{display:block}}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .44444rem}.breadcrumbs li:last-of-type::after{content:none}.toolbar .breadcrumbs a{color:#5c554c}.toolbar .breadcrumbs a:hover{color:#a84e0d}.toolbar .breadcrumbs li:last-of-type a{color:#211c17;font-weight:600;text-decoration:none}.page-versions{display:none;margin:0;position:relative;line-height:1}@media screen and (width >= 1025px){.page-versions{display:block}}.page-versions .version-menu-toggle{background:#fff url(../img/chevron-63cb534773.svg) no-repeat right .44444rem top 50%/auto .38889rem;color:#5c554c;cursor:pointer;outline:none;padding:.16667rem 1.22222rem .16667rem .5rem;position:relative;z-index:3}.page-versions .version-menu,.page-versions .version-menu-toggle{border:1px solid #e7e0d5;border-radius:.33333rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem}.page-versions .version-menu{background-color:#fff;padding:1.66667rem .5rem .44444rem;position:absolute;top:0;left:0;min-width:100%}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#333}.toc.sidebar .toc-menu{margin-right:0;position:sticky;top:7.22222rem}.toc .toc-menu h3{color:#8a8074;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;line-height:1.3;margin:0;padding-bottom:.55556rem;text-transform:uppercase}.toc.sidebar .toc-menu h3{display:block;height:auto}.toc .toc-menu ul{font-size:.75rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 9.72222rem);overflow-y:auto}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.33333rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}@media screen and (width <= 1024px){.toc .toc-menu ul li ul li ul li a{padding-left:1.33333rem}}.toc .toc-menu a{border-left:2px solid #e7e0d5;color:#5c554c;display:block;padding:.33333rem 0 .33333rem .66667rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:not(.is-active):hover{border-left-color:#d9ccb8;color:#211c17}.toc .toc-menu a.is-active{border-left-color:#e97826;color:#211c17;font-weight:600}.sidebar.toc .toc-menu a:focus{background:#f4eee3}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#3a332b;font-size:inherit;-ms-hyphens:auto;hyphens:auto;line-height:1.7;margin:0 auto;padding:0 1rem 4rem}@media screen and (width >= 1025px){.doc{font-size:.88889rem;margin:0 2rem;max-width:75.88889rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#211c17;font-weight:700;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page,.static>h1:first-child{font-size:2.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0}.doc>h1.page img{width:2rem}.doc .doc-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.doc>#preamble>.sectionbody>.paragraph:first-child>p,.doc>h1.page+.paragraph>p{font-size:.91667rem;line-height:1.7;margin:1.11111rem 0 0}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f4eee3;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){font-size:1.44444rem;letter-spacing:-.02em;margin:2.44444rem 0 0;overflow-wrap:break-word;padding:.44444rem 0 0}.doc h3:not(.discrete){font-weight:700;overflow-wrap:break-word}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor,.doc td .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em;background-image:none}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before,.doc td .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,.doc td:hover .anchor{visibility:visible}.doc p{margin:0}.doc .table-wrapper{background:#fff;border:1px solid #e7e0d5;border-radius:.55556rem;margin:.88889rem 0 0;overflow-x:auto}.doc .table-wrapper::-webkit-scrollbar{height:.425em}.doc .table-wrapper::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}.doc .table-wrapper::-webkit-scrollbar-thumb:active,.doc .table-wrapper::-webkit-scrollbar-thumb:hover{background:grey}.doc .table-wrapper table{width:100%}.doc .tableblock p{font-size:inherit}.doc .tableblock td:not(:first-child)>p,.doc .tableblock thead,.doc :not(td)>.content,.doc :not(td)>p{-ms-hyphens:auto;hyphens:auto}.doc a{color:#a84e0d;word-break:break-word;text-decoration:none;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,#a84e0d),color-stop(50%,transparent));background-image:linear-gradient(90deg,#a84e0d 50%,transparent 0);background-position:0 1.1em;background-repeat:repeat-x;background-size:7px 1px}.doc .camel-project .links a,.doc .sect2 h3 a,.doc .section .links a,.doc li a,.doc table a{background:none}.doc table.tableblock td a{word-break:normal}.doc table.tableblock tbody tr td:first-child{width:25%;overflow-wrap:anywhere;font-weight:700}.doc a:hover{color:#853c09}.doc a.unresolved{color:#d32f2f}.doc i.fa{font-style:normal}.doc p code,.doc thead code{background:#f4eee3;border-radius:.22222rem;color:#211c17;font-size:.80556rem;overflow-wrap:break-word;padding:.11111rem .33333rem}.doc pre{font-size:.75rem;line-height:1.7;margin:0}.doc blockquote{margin:0}.doc .right{float:right}.doc .left{float:left}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock{margin:1rem 0 0;word-break:break-word}.doc table.tableblock{border-collapse:collapse;font-size:.83333rem;margin:0}.doc table.stretch{width:100%}.doc table.tableblock thead th{background:#f4eee3;border-bottom:1px solid #e7e0d5;color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;letter-spacing:.06em;padding:.61111rem .88889rem;text-align:left;text-transform:uppercase}.doc table.tableblock>:not(thead) th,.doc table.tableblock td{border-top:1px solid #f0e9dd;border-bottom:0;padding:.66667rem .88889rem}.doc table.tableblock tbody tr:first-child>td,.doc table.tableblock tbody tr:first-child>th{border-top:0}.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{background:#fff;border:1px solid #e7e0d5;border-left:.16667rem solid #e97826;border-radius:0 .66667rem .66667rem 0;-webkit-box-shadow:none;box-shadow:none;margin:1.55556rem 0 0;padding:.88889rem 1.11111rem}.doc .admonitionblock .table-wrapper,.doc .colist .table-wrapper{background:none;border:0;border-radius:0;margin:0;overflow:visible}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.80556rem;line-height:1.6}.doc .admonitionblock td.content>:first-child{margin:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock table{border-collapse:collapse;position:relative;table-layout:auto;width:100%}.doc .admonitionblock td.content{background:none;color:#5c554c;padding:0;width:auto}.doc .admonitionblock td.icon{padding:0 .77778rem 0 0;vertical-align:top;white-space:nowrap;width:1px}.doc .admonitionblock .icon i{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-style:normal;font-weight:600;height:auto;letter-spacing:.04em;line-height:1.4;padding:.16667rem .44444rem;text-transform:uppercase;vertical-align:top}.doc .admonitionblock .icon i::after{content:attr(title);-ms-hyphens:none;hyphens:none;-webkit-writing-mode:horizontal-tb;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.doc .admonitionblock.caution{border-left-color:#a0439c}.doc .admonitionblock.caution .icon i{background:#f7e9f6;color:#8e3b8a}.doc .admonitionblock.important{border-left-color:#d32f2f}.doc .admonitionblock.important .icon i{background:#fce9e9;color:#b02525}.doc .admonitionblock.warning{border-left-color:#e18114}.doc .admonitionblock.warning .icon i{background:#fdf0dc;color:#8a5209}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock img{display:block}.doc .image>img,.doc .imageblock img{height:auto;max-width:100%}.doc table.tableblock td .imageblock img{max-width:50px}#preamble .abstract blockquote{background:#f4eee3;border-left:5px solid #e7e0d5;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock{background:#f4eee3;border-left:5px solid #5d5d5d;color:#5d5d5d;padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#5c554c;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc table.tableblock .paragraph{margin:0;padding:0}.doc .olist .admonitionblock,.doc .ulist .admonitionblock,.doc table.tableblock .admonitionblock{padding:.88889rem 1.11111rem}.doc ol,.doc ul{margin:0;padding:0 0 0 1.22222rem}.doc .olist>ol,.doc .ulist>ul{line-height:1.8}.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:.5rem;list-style:none}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem}.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:.5rem}.doc .olist li,.doc .ulist li{margin-bottom:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{color:#5d5d5d;font-size:.88889rem;font-weight:700;font-style:italic;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc .admonitionblock .title+.paragraph{margin-top:0}.doc .exampleblock>.content{background:#faf7f1;border:.25rem solid #e7e0d5;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#f4eee3;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:700;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight code,.doc pre:not(.highlight){background:#211c17;border-radius:.55556rem;-webkit-box-shadow:none;box-shadow:none;color:#f0e9df;display:block;overflow-x:auto;padding:1rem 1.11111rem}.doc .listingblock{margin-top:.77778rem}.doc pre code{color:inherit}.doc pre.highlight code::-webkit-scrollbar{height:.425em}.doc pre.highlight code::-webkit-scrollbar-track{background:#2b2620;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb{background:#34302a;border-radius:3.125em}.doc pre.highlight code::-webkit-scrollbar-thumb:active,.doc pre.highlight code::-webkit-scrollbar-thumb:hover{background:#8f867a}.doc pre.highlight{position:relative}.doc .listingblock code[data-lang]::before{content:attr(data-lang);display:none;color:#8f867a;font-size:.75rem;letter-spacing:.05em;line-height:1;text-transform:uppercase;position:absolute;top:.25rem;right:.25rem}.doc .listingblock:hover code[data-lang]::before{display:none}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:#8f867a;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:500;line-height:1.2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1.25em;height:1.25em;cursor:pointer;position:relative}.doc .source-toolbox .copy-button::before{content:"";display:block;width:1.25em;height:1.25em;background-image:url(../img/copy-d7c1e3194d.svg);background-size:contain;background-repeat:no-repeat;background-position:50%;-ms-flex-negative:0;flex-shrink:0}.doc .source-toolbox .copy-button.clicked::before{background-image:url(../img/copy-checkmark-9a4caf1664.svg)}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#3a332b;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#3a332b;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .3rem 1.5rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;font-style:normal;height:1.25em;line-height:1.2;text-align:center;width:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#f4eee3;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #faf7f1 inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #faf7f1;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:700;line-height:.90909}.doc .icon i::after,.doc .menuseq,.doc .path,.doc a.bare,.doc b.button,.doc code,.doc kbd{-ms-hyphens:none;hyphens:none}@media screen and (width <= 626px){#preamble+.sect1,.doc .sect1+.sect1{overflow-wrap:break-word}}div.badges p{text-align:left}div.badges span{color:#fff;padding:.15rem .3rem;font-weight:400;font-style:normal;font-size:.8rem}div.badges span.badge-key{background-color:#555;border-radius:.2rem 0 0 .2rem}div.badges span.badge-version{background-color:#217ee7;border-radius:0 .2rem .2rem 0}div.badges span.badge-supported{background-color:#4d4fb7;border-radius:0 .2rem .2rem 0}div.badges span.badge-unsupported{background-color:#d32f2f;border-radius:0 .2rem .2rem 0}.static{margin:0 auto}.static dl,.static ol,.static p,.static pre,.static ul{margin:1rem 0 0}.static a.icon{margin:2rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;text-align:center;background:none}.static .box,.static a.icon{display:-webkit-box;display:-ms-flexbox;display:flex}.static .box{margin:1rem 0}.static .box img{margin-top:1rem;height:6rem;margin-right:.5rem}.static .icon a{background-image:none}@media screen and (width >= 1025px){.static{max-width:66.66667rem}}@media screen and (width <= 1024px){.static .box,.static .content,.static .icon{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding:0;text-align:center;width:100%}.static .box .content{width:100%}.static .box img{height:6rem;max-width:25vw;margin-left:auto}.static .box img:only-child{margin-left:auto;margin-right:auto}.static .box img+img{margin-left:1rem;margin-right:auto}.static .box.right{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.static a.icon{margin:0;width:100%}}.static.doc:not(.tooling){padding:3.11111rem 1.77778rem 2.22222rem}@media screen and (width <= 1024px){.static.doc:not(.tooling){padding:1.77778rem 1.11111rem 2.66667rem}}.static.doc:not(.tooling)>.table-wrapper,.static.doc:not(.tooling)>h2,.static.doc:not(.tooling)>h3,.static.doc:not(.tooling)>p,.static.doc:not(.tooling)>pre,.static.doc:not(.tooling)>ul{max-width:42.22222rem}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.66667rem}.navbar{background:rgba(250,247,241,.9);backdrop-filter:blur(10px);border-bottom:1px solid #e7e0d5;color:#5c554c;font-size:.80556rem;height:3.66667rem;position:fixed;top:0;width:100%;z-index:4}.navbar-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.55556rem;height:100%;width:100%;max-width:66.66667rem;margin-inline:auto;padding-inline:1.77778rem}.navbar a{text-decoration:none}.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.22222rem}.navbar-item{font-weight:600;font-size:.80556rem;color:#5c554c;white-space:nowrap}.navbar-item:hover{color:#211c17}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.61111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;height:auto}.navbar-logo{width:2rem;height:2rem}.navbar-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1.05556rem;letter-spacing:-.02em;color:#211c17;white-space:nowrap}.navbar-burger{color:#5c554c;background:none;border:none;outline:none;line-height:1;height:3rem;position:relative;width:2rem;-ms-flex-negative:0;flex-shrink:0;top:-2.1px;padding:0}.navbar-burger:focus{outline:none}.navbar-burger span{background:#5c554c;display:block;height:1px;left:50%;margin-left:-7px;position:absolute;top:60%;width:25px}.navbar-burger span:first-child{margin-top:-10px}.navbar-burger span:nth-child(2){margin-top:-3px}.navbar-burger span:nth-child(3){margin-top:4px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:left top;transform-origin:left top;margin-top:-.75rem}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:left bottom;transform-origin:left bottom}@media screen and (width <= 1024px){.navbar-menu{display:none}.navbar-menu.is-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:0;position:absolute;top:3.66667rem;left:0;right:0;max-height:calc(100vh - 3.66667rem);overflow-y:auto;background:#faf7f1;border-bottom:1px solid #e7e0d5;padding:.44444rem 1.77778rem}.navbar-menu.is-active .navbar-item{padding:.66667rem 0;border-bottom:1px solid #f0e9dd}.navbar-burger{display:block}}@media screen and (width >= 1025px){.navbar-burger{display:none}}.navbar-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.77778rem;margin-left:auto}.navbar-github .brand-icon{height:1.11111rem;width:1.11111rem;fill:#5c554c;display:block}.navbar-github:hover .brand-icon{fill:#211c17}a.button.navbar-cta{margin:0;padding:.5rem 1rem;border-radius:.38889rem;font-size:.80556rem}.header .navbar-search{padding:0}.header .navbar-search input{border:1px solid #e7e0d5;border-radius:.38889rem;width:11.11111rem;margin:0;padding:.33333rem .55556rem .33333rem 1.66667rem;font-family:Open Sans,system-ui,sans-serif;font-size:.75rem;caret-color:#e97826;background:no-repeat .5rem/.9rem url(../img/search-a73cfec790.svg);background-color:#fff;color:#211c17;outline:0}.header .navbar-search input:focus-within{background-color:#fff;border-color:#d9ccb8}.header #search-cancel{position:relative;bottom:calc(50% + .1rem);left:calc(100% - 1.25rem);height:1rem;display:none;cursor:pointer}.header #search_results{top:3.66667rem;background:rgba(250,247,241,.9);text-align:left;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,.05);box-shadow:0 4px 12px 0 rgba(0,0,0,.05);position:absolute;margin-right:10px;overflow-y:auto;max-height:80vh;max-width:min(600px,90vw);min-width:300px;scrollbar-width:thin}#search_results::-webkit-scrollbar{width:.425em}#search_results::-webkit-scrollbar-track{background:#c1c1c1;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb{background:#8e8e8e;border-radius:3.125em}#search_results::-webkit-scrollbar-thumb:active,#search_results::-webkit-scrollbar-thumb:hover{background:grey}.result_header{font-weight:600;color:#211c17;padding-right:.5rem}#search_results div.result{padding:.25rem;pointer-events:none}#search_results div.result:hover{background:#f5f5f5}#search_results div.heading{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#search_results dt{padding:.5rem 0 .5rem .5rem;color:#e97826;text-transform:uppercase;font-weight:700;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#search_results dt.version{height:1.75rem;padding:.3rem;border:2px solid #e97826;border-radius:25px;text-align:center;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}#search_results dd{margin-right:2rem;word-break:break-word}#search_results a{pointer-events:auto;padding:.5rem}#search_results a:hover{text-decoration:underline;-webkit-text-decoration-color:#c1c1c1;text-decoration-color:#c1c1c1}.result_summary{color:#333;padding-top:.3rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}#search_results div.footer-search{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;padding:.75rem}div.footer-search h4{color:#211c17;width:5rem}.no_search_results{padding:1rem;font-weight:700;color:#211c17;border-bottom:2px solid #f5f5f5}.algolia-docsearch-suggestion--highlight{font-weight:700;color:#333}.results-hidden #search_results{display:none}@media (width <= 1024px){.header .navbar-search{min-width:0}.header .navbar-search input{width:100%}.header #search-cancel{margin-top:.75rem}.header #search_results{left:0;width:100vw;top:3.66667rem}}@media (width <= 500px){.header .navbar-search,.navbar-github{display:none}}@media (width <= 430px){.navbar-wordmark{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}}footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#211c17;color:#c4bbac;font-size:.83333rem;line-height:1.6;padding:0;-ms-flex-negative:0;flex-shrink:0}footer .footer{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:2.22222rem;width:100%;max-width:66.66667rem;margin-inline:auto;padding-block:3.11111rem 2.22222rem;padding-inline:1.77778rem}.footer-brand{display:grid;grid-template-columns:auto 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:.61111rem;-moz-column-gap:.61111rem;column-gap:.61111rem}.footer-logo{width:1.88889rem;height:1.88889rem}.footer-wordmark{font-family:Archivo,sans-serif;font-weight:800;font-size:1rem;color:#faf7f1}.footer-blurb{grid-column:1/-1;font-size:.75rem;line-height:1.6;color:#8f867a;margin:.88889rem 0 0;max-width:15.55556rem}footer .footer p.remark{grid-column:1/-1;border-top:1px solid #34302a;margin:0;padding:1.22222rem 0 0;font-size:.69444rem;color:#8f867a}footer .footer a{color:#c4bbac}footer .footer .context{display:inline-block;margin:0 0 1rem}footer .footer .context a{font-size:.83333rem;text-transform:uppercase}footer .footer .context a::after{content:" ";display:inline-block;border-radius:50%;width:8px;height:8px;margin:0 1rem;background:#34302a}footer .footer .context:last-child a::after{display:none}footer .footer .footer-column{margin:0}footer .footer .footer-column dt{font-family:Archivo,sans-serif;font-weight:700;font-size:.72222rem;letter-spacing:.06em;text-transform:uppercase;color:#faf7f1;margin-bottom:.77778rem}footer .footer .footer-column dt label:first-of-type::after{content:"";display:block;position:relative;bottom:0;left:0;height:2px;width:3rem;background:#c4bbac}footer .footer .footer-column dd{margin:0 0 .55556rem}footer .footer .footer-column dd a{font-size:.77778rem;color:#c4bbac}footer .footer .footer-column dd a:hover{color:#faf7f1}.footer-tools{position:relative;top:-2rem;height:0;text-align:right;color:#8a8074;font-size:.72222rem}.footer-tools a{display:inline-block;padding:.4rem;border-radius:.4rem .4rem 0 0;height:2rem;color:#5c554c}.footer-tools a:hover{color:#211c17}footer .resources{grid-column:1/-1;text-align:center}footer .footer .footer-icons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;grid-column:1/-1;line-height:1.6;padding:.5rem;font-weight:700}footer .footer .footer-icons .brand-icon{height:2em;width:1.75em;margin:.35rem;fill:#c4bbac}footer .footer .footer-icons a:hover .brand-icon{fill:#faf7f1}footer .footer dl dt label:nth-child(2),footer .footer input[type=checkbox]{display:none}@media screen and (width <= 1024px){footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}footer .footer{grid-template-columns:1fr}footer .footer .footer-column dt{margin-bottom:1rem;display:-webkit-box;display:-ms-flexbox;display:flex}footer .footer dl dt label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}footer .footer dl dt label:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}footer .footer dl dt label:nth-child(2){display:block;height:1.75rem;width:1.75rem;line-height:1.75rem;font-size:1.75rem;-webkit-transition:.2s;transition:.2s}footer .footer input[type=checkbox]:checked+dl dt label:nth-child(2){-webkit-transform:rotate(45deg);transform:rotate(45deg)}footer .footer dl dd:first-of-type{margin-top:1rem}footer .footer .footer-icons .brand-icon{height:1.5rem}footer input[type=checkbox]:checked+dl dd{display:block}footer input[type=checkbox]+dl dd{display:none}} /*! highlight.js theme for the 2026 redesign, per SCOPE.md section 2a. Replaces the GitHub light theme; --pre-background is now --color-ink. Colors live in vars.css as --syntax-*, shared with chroma.css. */.hljs-comment,.hljs-quote{color:#8f867a;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#e97826;font-weight:600}.hljs-attr,.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:#e8c87a}.hljs-doctag,.hljs-string{color:#f2a05a}.hljs-section,.hljs-selector-id,.hljs-title{color:#faf7f1;font-weight:600}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#d9b6f0;font-weight:600}.hljs-attribute,.hljs-name,.hljs-tag{color:#c4bbac;font-weight:400}.hljs-link,.hljs-regexp{color:#9fd3b0}.hljs-bullet,.hljs-symbol{color:#f2a05a}.hljs-built_in,.hljs-builtin-name{color:#8ec5e6}.hljs-meta{color:#8f867a;font-weight:600}.doc code.language-console .hljs-meta,.doc code.language-shell .hljs-meta,.doc code.language-shellsession .hljs-meta{color:#e0805a}.hljs-deletion{background:rgba(224,82,58,.25)}.hljs-addition{background:rgba(159,211,176,.25)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:600} @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}a.button.ink{background-color:#211c17;color:#fff}a.button.ink:hover{background-color:#3a332b}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-hero-art img{width:40%}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}.page-hero-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:0;color:#211c17}.page-hero-lead{font-size:.97222rem;line-height:1.55;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.detail-lead{font-weight:500;font-size:1.16667rem;line-height:1.4;color:#3a332b;margin:.88889rem 0 0;text-wrap:pretty}.detail-lead,.section-label{font-family:Archivo,sans-serif}.section-label{font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:3.11111rem 0 0;padding-bottom:.77778rem;border-bottom:1px solid #e7e0d5}.card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fff;border:1px solid #e7e0d5;border-radius:13px;padding:1.33333rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.card--flat{-webkit-transition:none;transition:none}.card--flat:hover{border-color:#e7e0d5;-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;transform:none}.card--lg{border-radius:16px;padding:1.77778rem}.card--dark{background:#211c17;border-color:#34302a;color:#faf7f1}.card-grid{display:grid;list-style:none;margin:0;padding:0;gap:1rem}.card-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1.2fr 1fr}@media screen and (width <= 1024px){.card-grid--3{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1fr}}@media screen and (width <= 626px){.card-grid--2,.card-grid--3,.card-grid--feature{grid-template-columns:minmax(0,1fr)}.page-hero-title{font-size:2rem}}.lts-chip{font-size:.58333rem;color:#fff;background:#e97826;padding:.11111rem .38889rem}.lts-chip,.severity-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;border-radius:20px}.severity-chip--low{background:#f4eee3;color:#5c554c}.severity-chip--medium{background:#fbead8;color:#a84e0d}.severity-chip--high{background:#fdf0dc;color:#8a5209}.severity-chip--critical{background:#fce9e9;color:#b02525}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog-layout{display:grid;grid-template-columns:13.33333rem 1fr;gap:3.11111rem;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.blog-rail{position:sticky;top:5rem}.blog-rail-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.66667rem;border-bottom:1px solid #e7e0d5}.blog-categories{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.44444rem}.blog-categories,.blog-category{display:-webkit-box;display:-ms-flexbox;display:flex}.blog-category{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.44444rem 0;font-size:.77778rem;font-weight:600;color:#3a332b;border-bottom:1px solid #f0e9dd;text-decoration:none}.blog-category:hover{color:#853c09}.blog-category-count{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#8a8074}.blog-rss{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem;margin-top:1.11111rem;font-size:.75rem;font-weight:700;color:#a84e0d;text-decoration:none}.blog-rss:hover{color:#853c09}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}.blog-main{min-width:0}.blog-back-link{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#8a8074;margin-bottom:.77778rem;text-decoration:none}.blog-back-link:hover{color:#853c09}.blog-posts{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:2rem}.blog-post{display:grid;grid-template-columns:5.33333rem 1fr;gap:1.55556rem;padding:1.66667rem 0;border-top:1px solid #e7e0d5}.blog-post-date{text-align:center}.blog-post-day{display:block;font-family:Archivo,sans-serif;font-weight:800;font-size:2.22222rem;line-height:1;letter-spacing:-.03em;color:#a84e0d}.blog-post-month{display:block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;text-transform:uppercase;letter-spacing:.06em;margin-top:.33333rem}.blog-post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.tag-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-weight:600;color:#a84e0d;background:#fbead8;padding:.16667rem .5rem;border-radius:20px;text-transform:uppercase;letter-spacing:.04em;text-decoration:none}.blog-post-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.33333rem;letter-spacing:-.02em;line-height:1.2;margin:.66667rem 0 0}.blog-post-title a{color:#211c17;text-decoration:none}.blog-post-title a:hover{color:#853c09}.blog-post-summary{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}.blog-post-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.88889rem;margin-top:.77778rem;font-size:.75rem;color:#8a8074}.blog-post-continue{font-weight:700;color:#a84e0d;text-decoration:none}.blog-post-continue:hover{color:#853c09}.blog-list .pagination{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.33333rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:1.55556rem 0 0;padding:1.55556rem 0 0;border-top:1px solid #e7e0d5;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;list-style:none}.blog-list .page-item{display:contents}.blog-list .page-link{display:inline-block;padding:.44444rem .66667rem;border-radius:6px;color:#5c554c;text-decoration:none}.blog-list .page-link:hover{background:#f0e9dd}.blog-list .page-link--next{color:#a84e0d}.blog-list .page-item.active .page-link{background:#211c17;color:#faf7f1}.blog-list .page-item.active .page-link:hover{background:#211c17}.blog-list .page-item.disabled .page-link{padding:.44444rem .33333rem;color:#8a8074;cursor:default}.blog-list .page-item.disabled .page-link:hover{background:none}@media screen and (width <= 1024px){.blog-layout{grid-template-columns:minmax(0,1fr);padding:2.22222rem 1.33333rem 1.77778rem}.blog-rail{position:static}}.post{max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.post-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#8a8074;text-decoration:none}.post-back:hover{color:#853c09}.post-hero{max-width:45.55556rem;margin-top:1rem}.post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:.88889rem 0 0;color:#211c17}.post-layout{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:3.11111rem;margin-top:2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.post-rail{position:sticky;top:4.66667rem;gap:1.22222rem}.post-authors,.post-rail{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.post-authors{gap:.77778rem}.post-author{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.post-avatar{width:44px;height:44px;border-radius:50%;background:#e7e0d5}.post-author-name{font-weight:700;font-size:.80556rem}.post-date{font-size:.72222rem;color:#8a8074}.post-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.55556rem}.post-share-links{gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post-adjacent,.post-share-links{display:-webkit-box;display:-ms-flexbox;display:flex}.post-adjacent{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem;border-top:1px solid #e7e0d5;font-size:.72222rem}.post-adjacent a{color:#5c554c;font-weight:600;text-decoration:none}.post-adjacent a:hover{color:#853c09}.post-content{max-width:42.22222rem}.blog .post-content img.featured{aspect-ratio:16/8;-o-object-fit:cover;object-fit:cover;width:100%;height:auto;border-radius:14px;display:block;margin-bottom:1.88889rem}.blog .post-content h2{font-family:Archivo,sans-serif;font-weight:700;font-size:1.55556rem;letter-spacing:-.02em;margin:2.22222rem 0 0}.blog .post-content p{font-size:.94444rem;line-height:1.75;color:#3a332b}.blog .post-content p+p{margin-top:.66667rem}.blog .post-content blockquote{margin:1.33333rem 0 0;padding:1rem 1.22222rem;border-left:3px solid #e97826;background:#fff;border-radius:0 12px 12px 0;font-family:Archivo,sans-serif;font-weight:500;font-size:1.05556rem;line-height:1.45;color:#3a332b}.blog .post-content img:not(.featured){width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block;cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img:not(.featured){max-width:100%;max-height:none}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post-content td{padding:.5rem}.blog .post-content th{padding:.7rem;background:#e1e1e1}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.post-related{margin-top:3.11111rem;padding-top:1.55556rem;border-top:1px solid #e7e0d5}.post-related-heading{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:0 0 1rem}.post-related-grid{gap:.77778rem}.post-related-card{border-radius:12px;padding:1rem 1.11111rem;color:#211c17;text-decoration:none}.post-related-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#8a8074}.post-related-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.91667rem;margin-top:.33333rem;line-height:1.3}@media screen and (width <= 1024px){.post{padding:2.22222rem 1.33333rem 1.77778rem}.post-layout{grid-template-columns:minmax(0,1fr)}.post-rail{position:static}}.blog-category.is-current{color:#a84e0d;font-weight:700}.releases{display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;padding:3.11111rem 1.77778rem 2.22222rem}.releases-intro{max-width:40rem}.releases-lead a{color:#a84e0d}.releases-lead a:hover{color:#853c09;text-decoration:none}.releases-group{margin-top:2.66667rem}.releases-content>.releases-group:first-child{margin-top:2.22222rem}.releases-group-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:0 0 .77778rem;color:#211c17}.releases-table{width:100%;font-size:.80556rem;background:#fff;border:1px solid #e7e0d5;border-radius:12px;border-collapse:collapse;overflow:hidden}.releases-table thead tr{background:#f4eee3}.releases-table th{text-align:left;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#8a8074;padding:.61111rem .88889rem}.releases-col-version{width:7.77778rem}.releases-col-date{width:8.33333rem}.releases-table tbody tr{border-top:1px solid #f0e9dd}.releases-table tbody tr:first-child{border-top:0}.releases-table td{padding:.66667rem .88889rem}.releases-version{font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;font-size:.77778rem;color:#a84e0d}.releases-version:hover{color:#853c09;text-decoration:none}.releases-table .lts-chip{margin-left:.44444rem}.releases-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#5c554c}.releases-desc{color:#5c554c;line-height:1.5}.releases-rail{position:sticky;top:5rem}.releases-rail-heading{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.66667rem;border-bottom:1px solid #e7e0d5}.releases-rail-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.55556rem}.releases-rail-link{display:block;padding:.33333rem 0 .33333rem .66667rem;font-size:.75rem;color:#5c554c;border-left:2px solid #e7e0d5;text-decoration:none}.releases-rail-link:focus-visible,.releases-rail-link:hover{border-left-color:#d9ccb8;color:#211c17}.advisory{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.advisory-back{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c;text-decoration:none}.advisory-back:hover{color:#853c09}.advisory-layout{display:grid;grid-template-columns:minmax(0,1fr) 17.77778rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;margin-top:1rem}.advisory-article{max-width:42.22222rem}.advisory-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase}.advisory-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.33333rem;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0;color:#211c17}.advisory-section{margin-top:2rem}.advisory-section-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:0 0 .55556rem}.advisory-section-body{font-size:.91667rem;line-height:1.7;color:#3a332b;margin:0;text-wrap:pretty}.advisory-section-body a{color:#a84e0d}.advisory-section-body a:hover{color:#853c09}.advisory-section-body pre{background:#211c17;border-radius:.55556rem;color:#f0e9df;display:block;font-size:.75rem;line-height:1.7;overflow-x:auto;padding:1rem 1.11111rem}.advisory-section-body pre code{color:inherit}.advisory-references{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.44444rem;font-size:.83333rem}.advisory-reference{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;color:#a84e0d;text-decoration:none}.advisory-reference:hover{color:#853c09;text-decoration:none}.advisory-facts{position:sticky;top:5rem;background:#fff;border:1px solid #e7e0d5;border-radius:14px;padding:1.33333rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:1rem}.advisory-facts-label{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#8a8074;letter-spacing:.06em;text-transform:uppercase}.advisory-severity-chip{margin-top:.44444rem;font-size:.66667rem;padding:.22222rem .55556rem}.advisory-facts-value{margin-top:.33333rem;font-size:.80556rem;line-height:1.6;color:#3a332b}.advisory-facts-value--mono{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.77778rem;line-height:1.7;color:#211c17;font-weight:600}a.advisory-facts-cta{display:block;margin:.22222rem 0 0;padding:.61111rem 1rem;font-size:.77778rem;text-align:center}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 1024px){.releases{grid-template-columns:minmax(0,1fr)}.releases-rail{position:static;margin-top:2.66667rem}.advisory-layout{grid-template-columns:minmax(0,1fr)}.advisory-facts{position:static}}@media screen and (width <= 626px){.releases-table{font-size:.72222rem}.release aside{width:100%;margin:0 auto}}.misc p{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.community-hero,.docs-hero{max-width:42.22222rem}.docs-features{margin-top:2.22222rem}.docs-feature-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.docs-feature--dark .docs-feature-eyebrow{color:#e0805a}.docs-feature--light .docs-feature-eyebrow{color:#a84e0d}.docs-feature-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.66667rem;letter-spacing:-.02em;margin:.66667rem 0 0}.docs-feature--light .docs-feature-title{color:#211c17}.docs-feature-desc{font-size:.86111rem;line-height:1.6;margin:.66667rem 0 1.44444rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-feature--dark .docs-feature-desc{color:#c4bbac}.docs-feature--light .docs-feature-desc{color:#5c554c}.docs-feature-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.docs-feature-actions .button{margin:0;padding:.61111rem 1.11111rem;font-size:.80556rem}.docs-projects{margin-top:1.11111rem}.docs-project-card-head{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.docs-project-card-icon{width:1.66667rem;height:1.66667rem;display:block;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.docs-project-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0;color:#211c17}.docs-project-card-desc{font-size:.77778rem;line-height:1.55;color:#5c554c;margin:.66667rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-project-card-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.77778rem;font-size:.75rem;font-weight:700}.docs-project-card-link{color:#a84e0d}.docs-project-card-link:hover{color:#853c09;text-decoration:none}.docs-project-card-link--muted{color:#8a8074}.community-grid{margin-top:2.22222rem}.community-card-tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:2.11111rem;height:2.11111rem;border-radius:9px;background:#fbead8;font-family:Archivo,sans-serif;font-weight:800;font-size:.83333rem;color:#a84e0d}.community-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.05556rem;margin:.88889rem 0 0;color:#211c17}.community-card-body{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:.5rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.community-card-link{color:#a84e0d;font-weight:700;font-size:.75rem}.community-card-link:hover{color:#853c09;text-decoration:none}.community-cta{grid-column:span 2}.community-cta-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#e0805a}.community-cta-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:.66667rem 0 0}.community-cta-body{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 1.11111rem;-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:31.11111rem}.community-cta-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.community-cta-actions .button{margin:0;padding:.55556rem 1rem;font-size:.77778rem}@media screen and (width <= 1024px){.community,.docs{padding:1.77778rem 1.11111rem 2.66667rem}}@media screen and (width <= 626px){.community-cta{grid-column:span 1}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.tooling{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.tooling h1{font-weight:800;line-height:1.05;margin:0}.tooling .tooling-lead{max-width:42.22222rem;margin:.77778rem 0 0}.tooling-section{margin-top:2.66667rem}.tooling-cli-section{margin-top:2.88889rem}.tooling .tooling-section h2{font-weight:800;font-size:1.55556rem;letter-spacing:-.02em;margin:0;padding:0}.tooling .tooling-section-intro{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;max-width:42.22222rem;text-wrap:pretty}.tooling-cli-section .tooling-section-intro{margin-bottom:1.11111rem}.tooling code{font-size:.77778rem;padding:.11111rem .33333rem;border-radius:4px}.tooling-cli{background:#211c17;border:1px solid #34302a;border-radius:12px;overflow:hidden}.tooling-cli-row{display:grid;grid-template-columns:9.44444rem minmax(0,1fr);gap:1.11111rem;padding:.72222rem 1.11111rem;border-top:1px solid #34302a;font-size:.77778rem}.tooling-cli-cmd{color:#f2a05a;font-weight:600}.tooling-cli-desc{color:#c4bbac;line-height:1.5}.tooling-split{display:grid;grid-template-columns:1fr 1fr;gap:1.55556rem}.tooling-media{aspect-ratio:16/10;border-radius:12px;background:#211c17;border:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}.tooling-media img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.tooling .tooling-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase;margin:0}.tooling-mcp .tooling-eyebrow+h2{margin-top:.55556rem}.tooling-ai-grid{display:grid;grid-template-columns:1fr 1fr;gap:.77778rem;margin-top:1.22222rem}.tooling-ai-card{border:1px solid #e7e0d5;border-radius:10px;padding:.88889rem 1rem}.tooling .tooling-ai-name{font-family:Archivo,sans-serif;font-weight:700;font-size:.88889rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-ai-name:hover{color:#853c09;text-decoration:underline}.tooling .tooling-ai-desc{font-size:.75rem;line-height:1.5;color:#5c554c;margin:.33333rem 0 0}.tooling-rows{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:1rem;border-top:1px solid #e7e0d5}.tooling-row{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:1.33333rem;padding:.88889rem 0;border-bottom:1px solid #f0e9dd}.tooling .tooling-row-name{font-weight:700;font-size:.83333rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-row-name:hover{color:#853c09;text-decoration:underline}.tooling-row-name--mono{font-family:JetBrains Mono,ui-monospace,monospace}.tooling .tooling-row-desc{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:0;text-wrap:pretty}.tooling .tooling-footnote{font-size:.80556rem;line-height:1.6;color:#8a8074;margin:2.66667rem 0 0;padding-top:1.33333rem;border-top:1px solid #e7e0d5}.tooling .toc.sidebar .toc-menu{top:5rem}@media screen and (width <= 1024px){.tooling{padding:1.77778rem 1.11111rem 2.66667rem}.tooling,.tooling-row,.tooling-split{grid-template-columns:minmax(0,1fr)}.tooling-row{gap:.33333rem}}@media screen and (width <= 626px){.tooling-cli-row{gap:.33333rem}.tooling-ai-grid,.tooling-cli-row{grid-template-columns:minmax(0,1fr)}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.download-hero{display:grid;grid-template-columns:1fr 21.11111rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.download-intro p{font-size:.91667rem;line-height:1.6;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.download-intro p:first-of-type{margin-top:.88889rem}.download-intro strong{color:#211c17}.download-card a,.download-intro a{color:#a84e0d}.download-card a:hover,.download-intro a:hover{color:#853c09}.download-cli-card{background:#211c17;border-radius:16px;padding:1.55556rem;color:#faf7f1}.download-cli-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#e0805a;letter-spacing:.08em;text-transform:uppercase}.download-cli-desc{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 .88889rem}.download-cli-bar{display:-webkit-box;display:-ms-flexbox;display:flex;background:#1c1813;border:1px solid #34302a;border-radius:8px;overflow:hidden}.download-cli-command{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;color:#f0e9df;padding:.66667rem .77778rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.download-cli-prompt{color:#e0805a}.download-cli-copy{border:0;border-left:1px solid #34302a;background:#2b2620;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .77778rem;cursor:pointer}.download-cli-copy:hover{background:#3a342c}.download-cli-guide{display:inline-block;margin-top:.77778rem;font-size:.75rem;font-weight:700;color:#f2a05a}.download-cli-guide:hover{color:#faf7f1;text-decoration:none}.download-row{display:grid;grid-template-columns:12.22222rem 7.22222rem minmax(11.11111rem,1fr) minmax(0,auto);gap:1.33333rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1.22222rem 0;border-bottom:1px solid #f0e9dd}.download-row-project{font-family:Archivo,sans-serif;font-weight:700;font-size:.94444rem;color:#211c17}.download-row-date{font-size:.72222rem;color:#8a8074;margin-top:.16667rem}.download-row-version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem}.download-row-version-num{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:600;color:#211c17}.download-row-note{font-size:.77778rem;color:#5c554c}.download-row-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.33333rem .88889rem;font-size:.75rem;font-weight:700}.download-row-artifact,.download-row-links{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.download-row-artifact{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;gap:.33333rem;white-space:nowrap}.download-row-link{color:#8a8074}.download-row-link:hover{color:#e97826;text-decoration:none}.download-row-link--primary{color:#a84e0d}.download-row-link--primary:hover{color:#e97826}.download-row-sub{font-size:.61111rem;font-weight:600;color:#8a8074}.download-row-sub::before{content:"("}.download-row-sub::after{content:")"}.download-row-sublink{color:inherit}.download-row-sublink:hover{color:#e97826;text-decoration:none}.download-row-sublink+.download-row-sublink::before{content:" \00b7 ";color:#8a8074}.download-cards{margin-top:2.66667rem}.download-card{padding:1.44444rem}.download-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.download-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}@media screen and (width <= 1024px){.download-hero{grid-template-columns:1fr}.download{padding:2.22222rem 1.33333rem 2.66667rem}}@media screen and (width <= 626px){.download-row{grid-template-columns:1fr;gap:.44444rem}.download-row-links{margin-top:.22222rem}}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.post-share-link{font-family:inherit;font-size:.72222rem;font-weight:700;color:#5c554c;background:none;border:1px solid #e7e0d5;padding:.33333rem .66667rem;border-radius:6px;text-decoration:none;cursor:pointer}.post-share-link:hover{border-color:#d9ccb8}.security{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.security-hero{max-width:42.22222rem}.security-grid{margin-top:2.22222rem}.security-card--feature{grid-column:1/-1}.security-card--feature h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:.55556rem 0 0}.security-card--feature p{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.66667rem 0 0;max-width:45.55556rem}.security-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase}.security-card{padding:1.44444rem}.security-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.security-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0}.security-band a,.security-card--feature a,.security-card a{color:#a84e0d}.security-band a:hover,.security-card--feature a:hover,.security-card a:hover{color:#853c09}.security-band{grid-column:1/-1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.33333rem;background:#211c17;border-radius:16px;padding:1.77778rem;color:#faf7f1}.security-band-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:16.66667rem}.security-band-copy h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:0}.security-band-copy p{font-size:.83333rem;line-height:1.6;color:#c4bbac;margin:.55556rem 0 0;max-width:35.55556rem}.security-band .button{white-space:nowrap}.security-advisories{width:100%;font-size:.77778rem;border-collapse:collapse}.security-advisories thead tr{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#8a8074;text-transform:uppercase;letter-spacing:.06em;text-align:left}.security-advisories thead th{padding:.77778rem .66667rem .55556rem}.security-advisories thead th:first-child{padding-left:0}.security-advisories thead th:last-child{padding-right:0}.security-advisories tbody th{text-align:left;padding:1.44444rem 0 .44444rem;font-family:Archivo,sans-serif;font-weight:800;font-size:1.22222rem;letter-spacing:-.02em;color:#211c17}.security-advisories .security-row{border-top:1px solid #f0e9dd}.security-advisories td{padding:.66667rem;color:#5c554c}.security-advisories td:first-child{padding-left:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#3a332b}.security-advisories td:first-child a{font-weight:600;color:#a84e0d}.security-advisories td:first-child a:hover{color:#853c09;text-decoration:none}.security-advisories td:last-child{padding-right:0;line-height:1.5}.security-severity{font-size:.63889rem;padding:.16667rem .44444rem}.security .table-wrapper{overflow-x:auto}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}@media screen and (width <= 1024px){.security-grid{grid-template-columns:1fr}}@media screen and (width <= 626px){.security-band{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}a.button.ink{background-color:#211c17;color:#fff}a.button.ink:hover{background-color:#3a332b}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;overflow:hidden;padding:.77778rem .88889rem;text-overflow:ellipsis;white-space:nowrap}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#cabfb0}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-hero-art img{width:40%}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}.page-hero-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:0;color:#211c17}.page-hero-lead{font-size:.97222rem;line-height:1.55;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.detail-lead{font-weight:500;font-size:1.16667rem;line-height:1.4;color:#3a332b;margin:.88889rem 0 0;text-wrap:pretty}.detail-lead,.section-label{font-family:Archivo,sans-serif}.section-label{font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:3.11111rem 0 0;padding-bottom:.77778rem;border-bottom:1px solid #e7e0d5}.card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fff;border:1px solid #e7e0d5;border-radius:13px;padding:1.33333rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.card--flat{-webkit-transition:none;transition:none}.card--flat:hover{border-color:#e7e0d5;-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;transform:none}.card--lg{border-radius:16px;padding:1.77778rem}.card--dark{background:#211c17;border-color:#34302a;color:#faf7f1}.card-grid{display:grid;list-style:none;margin:0;padding:0;gap:1rem}.card-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1.2fr 1fr}@media screen and (width <= 1024px){.card-grid--3{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1fr}}@media screen and (width <= 626px){.card-grid--2,.card-grid--3,.card-grid--feature{grid-template-columns:minmax(0,1fr)}.page-hero-title{font-size:2rem}}.lts-chip{font-size:.58333rem;color:#fff;background:#e97826;padding:.11111rem .38889rem}.lts-chip,.severity-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;border-radius:20px}.severity-chip--low{background:#f4eee3;color:#5c554c}.severity-chip--medium{background:#fbead8;color:#a84e0d}.severity-chip--high{background:#fdf0dc;color:#8a5209}.severity-chip--critical{background:#fce9e9;color:#b02525}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog-layout{display:grid;grid-template-columns:13.33333rem 1fr;gap:3.11111rem;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.blog-rail{position:sticky;top:5rem}.blog-rail-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.66667rem;border-bottom:1px solid #e7e0d5}.blog-categories{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.44444rem}.blog-categories,.blog-category{display:-webkit-box;display:-ms-flexbox;display:flex}.blog-category{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.44444rem 0;font-size:.77778rem;font-weight:600;color:#3a332b;border-bottom:1px solid #f0e9dd;text-decoration:none}.blog-category:hover{color:#853c09}.blog-category-count{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#8a8074}.blog-rss{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem;margin-top:1.11111rem;font-size:.75rem;font-weight:700;color:#a84e0d;text-decoration:none}.blog-rss:hover{color:#853c09}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}.blog-main{min-width:0}.blog-back-link{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#8a8074;margin-bottom:.77778rem;text-decoration:none}.blog-back-link:hover{color:#853c09}.blog-posts{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:2rem}.blog-post{display:grid;grid-template-columns:5.33333rem 1fr;gap:1.55556rem;padding:1.66667rem 0;border-top:1px solid #e7e0d5}.blog-post-date{text-align:center}.blog-post-day{display:block;font-family:Archivo,sans-serif;font-weight:800;font-size:2.22222rem;line-height:1;letter-spacing:-.03em;color:#a84e0d}.blog-post-month{display:block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;text-transform:uppercase;letter-spacing:.06em;margin-top:.33333rem}.blog-post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.tag-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-weight:600;color:#a84e0d;background:#fbead8;padding:.16667rem .5rem;border-radius:20px;text-transform:uppercase;letter-spacing:.04em;text-decoration:none}.blog-post-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.33333rem;letter-spacing:-.02em;line-height:1.2;margin:.66667rem 0 0}.blog-post-title a{color:#211c17;text-decoration:none}.blog-post-title a:hover{color:#853c09}.blog-post-summary{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}.blog-post-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.88889rem;margin-top:.77778rem;font-size:.75rem;color:#8a8074}.blog-post-continue{font-weight:700;color:#a84e0d;text-decoration:none}.blog-post-continue:hover{color:#853c09}.blog-list .pagination{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.33333rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:1.55556rem 0 0;padding:1.55556rem 0 0;border-top:1px solid #e7e0d5;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;list-style:none}.blog-list .page-item{display:contents}.blog-list .page-link{display:inline-block;padding:.44444rem .66667rem;border-radius:6px;color:#5c554c;text-decoration:none}.blog-list .page-link:hover{background:#f0e9dd}.blog-list .page-link--next{color:#a84e0d}.blog-list .page-item.active .page-link{background:#211c17;color:#faf7f1}.blog-list .page-item.active .page-link:hover{background:#211c17}.blog-list .page-item.disabled .page-link{padding:.44444rem .33333rem;color:#8a8074;cursor:default}.blog-list .page-item.disabled .page-link:hover{background:none}@media screen and (width <= 1024px){.blog-layout{grid-template-columns:minmax(0,1fr);padding:2.22222rem 1.33333rem 1.77778rem}.blog-rail{position:static}}.post{max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.post-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#8a8074;text-decoration:none}.post-back:hover{color:#853c09}.post-hero{max-width:45.55556rem;margin-top:1rem}.post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:.88889rem 0 0;color:#211c17}.post-layout{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:3.11111rem;margin-top:2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.post-rail{position:sticky;top:4.66667rem;gap:1.22222rem}.post-authors,.post-rail{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.post-authors{gap:.77778rem}.post-author{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.post-avatar{width:44px;height:44px;border-radius:50%;background:#e7e0d5}.post-author-name{font-weight:700;font-size:.80556rem}.post-date{font-size:.72222rem;color:#8a8074}.post-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.55556rem}.post-share-links{gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post-adjacent,.post-share-links{display:-webkit-box;display:-ms-flexbox;display:flex}.post-adjacent{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem;border-top:1px solid #e7e0d5;font-size:.72222rem}.post-adjacent a{color:#5c554c;font-weight:600;text-decoration:none}.post-adjacent a:hover{color:#853c09}.post-content{max-width:42.22222rem}.blog .post-content img.featured{aspect-ratio:16/8;-o-object-fit:cover;object-fit:cover;width:100%;height:auto;border-radius:14px;display:block;margin-bottom:1.88889rem}.blog .post-content h2{font-family:Archivo,sans-serif;font-weight:700;font-size:1.55556rem;letter-spacing:-.02em;margin:2.22222rem 0 0}.blog .post-content p{font-size:.94444rem;line-height:1.75;color:#3a332b}.blog .post-content p+p{margin-top:.66667rem}.blog .post-content blockquote{margin:1.33333rem 0 0;padding:1rem 1.22222rem;border-left:3px solid #e97826;background:#fff;border-radius:0 12px 12px 0;font-family:Archivo,sans-serif;font-weight:500;font-size:1.05556rem;line-height:1.45;color:#3a332b}.blog .post-content img:not(.featured){width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block;cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img:not(.featured){max-width:100%;max-height:none}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post-content td{padding:.5rem}.blog .post-content th{padding:.7rem;background:#e1e1e1}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.post-related{margin-top:3.11111rem;padding-top:1.55556rem;border-top:1px solid #e7e0d5}.post-related-heading{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:0 0 1rem}.post-related-grid{gap:.77778rem}.post-related-card{border-radius:12px;padding:1rem 1.11111rem;color:#211c17;text-decoration:none}.post-related-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#8a8074}.post-related-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.91667rem;margin-top:.33333rem;line-height:1.3}@media screen and (width <= 1024px){.post{padding:2.22222rem 1.33333rem 1.77778rem}.post-layout{grid-template-columns:minmax(0,1fr)}.post-rail{position:static}}.blog-category.is-current{color:#a84e0d;font-weight:700}.releases{display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;padding:3.11111rem 1.77778rem 2.22222rem}.releases-intro{max-width:40rem}.releases-lead a{color:#a84e0d}.releases-lead a:hover{color:#853c09;text-decoration:none}.releases-group{margin-top:2.66667rem}.releases-content>.releases-group:first-child{margin-top:2.22222rem}.releases-group-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:0 0 .77778rem;color:#211c17}.releases-table{width:100%;font-size:.80556rem;background:#fff;border:1px solid #e7e0d5;border-radius:12px;border-collapse:collapse;overflow:hidden}.releases-table thead tr{background:#f4eee3}.releases-table th{text-align:left;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#8a8074;padding:.61111rem .88889rem}.releases-col-version{width:7.77778rem}.releases-col-date{width:8.33333rem}.releases-table tbody tr{border-top:1px solid #f0e9dd}.releases-table tbody tr:first-child{border-top:0}.releases-table td{padding:.66667rem .88889rem}.releases-version{font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;font-size:.77778rem;color:#a84e0d}.releases-version:hover{color:#853c09;text-decoration:none}.releases-table .lts-chip{margin-left:.44444rem}.releases-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#5c554c}.releases-desc{color:#5c554c;line-height:1.5}.releases-rail{position:sticky;top:5rem}.releases-rail-heading{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#8a8074;letter-spacing:.08em;text-transform:uppercase;padding-bottom:.66667rem;border-bottom:1px solid #e7e0d5}.releases-rail-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.55556rem}.releases-rail-link{display:block;padding:.33333rem 0 .33333rem .66667rem;font-size:.75rem;color:#5c554c;border-left:2px solid #e7e0d5;text-decoration:none}.releases-rail-link:focus-visible,.releases-rail-link:hover{border-left-color:#d9ccb8;color:#211c17}.advisory{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.advisory-back{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c;text-decoration:none}.advisory-back:hover{color:#853c09}.advisory-layout{display:grid;grid-template-columns:minmax(0,1fr) 17.77778rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;margin-top:1rem}.advisory-article{max-width:42.22222rem}.advisory-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase}.advisory-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.33333rem;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0;color:#211c17}.advisory-section{margin-top:2rem}.advisory-section-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#8a8074;margin:0 0 .55556rem}.advisory-section-body{font-size:.91667rem;line-height:1.7;color:#3a332b;margin:0;text-wrap:pretty}.advisory-section-body a{color:#a84e0d}.advisory-section-body a:hover{color:#853c09}.advisory-section-body pre{background:#211c17;border-radius:.55556rem;color:#f0e9df;display:block;font-size:.75rem;line-height:1.7;overflow-x:auto;padding:1rem 1.11111rem}.advisory-section-body pre code{color:inherit}.advisory-references{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.44444rem;font-size:.83333rem}.advisory-reference{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;color:#a84e0d;text-decoration:none}.advisory-reference:hover{color:#853c09;text-decoration:none}.advisory-facts{position:sticky;top:5rem;background:#fff;border:1px solid #e7e0d5;border-radius:14px;padding:1.33333rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:1rem}.advisory-facts-label{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#8a8074;letter-spacing:.06em;text-transform:uppercase}.advisory-severity-chip{margin-top:.44444rem;font-size:.66667rem;padding:.22222rem .55556rem}.advisory-facts-value{margin-top:.33333rem;font-size:.80556rem;line-height:1.6;color:#3a332b}.advisory-facts-value--mono{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.77778rem;line-height:1.7;color:#211c17;font-weight:600}a.advisory-facts-cta{display:block;margin:.22222rem 0 0;padding:.61111rem 1rem;font-size:.77778rem;text-align:center}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 1024px){.releases{grid-template-columns:minmax(0,1fr)}.releases-rail{position:static;margin-top:2.66667rem}.advisory-layout{grid-template-columns:minmax(0,1fr)}.advisory-facts{position:static}}@media screen and (width <= 626px){.releases-table{font-size:.72222rem}.release aside{width:100%;margin:0 auto}}.misc p:has(img){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.community-hero,.docs-hero{max-width:42.22222rem}.docs-features{margin-top:2.22222rem}.docs-feature-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.docs-feature--dark .docs-feature-eyebrow{color:#e0805a}.docs-feature--light .docs-feature-eyebrow{color:#a84e0d}.docs-feature-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.66667rem;letter-spacing:-.02em;margin:.66667rem 0 0}.docs-feature--light .docs-feature-title{color:#211c17}.docs-feature-desc{font-size:.86111rem;line-height:1.6;margin:.66667rem 0 1.44444rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-feature--dark .docs-feature-desc{color:#c4bbac}.docs-feature--light .docs-feature-desc{color:#5c554c}.docs-feature-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.docs-feature-actions .button{margin:0;padding:.61111rem 1.11111rem;font-size:.80556rem}.docs-projects{margin-top:1.11111rem}.docs-project-card-head{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.docs-project-card-icon{width:1.66667rem;height:1.66667rem;display:block;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.docs-project-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0;color:#211c17}.docs-project-card-desc{font-size:.77778rem;line-height:1.55;color:#5c554c;margin:.66667rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-project-card-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.77778rem;font-size:.75rem;font-weight:700}.docs-project-card-link{color:#a84e0d}.docs-project-card-link:hover{color:#853c09;text-decoration:none}.docs-project-card-link--muted{color:#8a8074}.community-grid{margin-top:2.22222rem}.community-card-tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:2.11111rem;height:2.11111rem;border-radius:9px;background:#fbead8;font-family:Archivo,sans-serif;font-weight:800;font-size:.83333rem;color:#a84e0d}.community-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.05556rem;margin:.88889rem 0 0;color:#211c17}.community-card-body{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:.5rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.community-card-link{color:#a84e0d;font-weight:700;font-size:.75rem}.community-card-link:hover{color:#853c09;text-decoration:none}.community-cta{grid-column:span 2}.community-cta-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#e0805a}.community-cta-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:.66667rem 0 0}.community-cta-body{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 1.11111rem;-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:31.11111rem}.community-cta-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.community-cta-actions .button{margin:0;padding:.55556rem 1rem;font-size:.77778rem}@media screen and (width <= 1024px){.community,.docs{padding:1.77778rem 1.11111rem 2.66667rem}}@media screen and (width <= 626px){.community-cta{grid-column:span 1}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.tooling{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.tooling h1{font-weight:800;line-height:1.05;margin:0}.tooling .tooling-lead{max-width:42.22222rem;margin:.77778rem 0 0}.tooling-section{margin-top:2.66667rem}.tooling-cli-section{margin-top:2.88889rem}.tooling .tooling-section h2{font-weight:800;font-size:1.55556rem;letter-spacing:-.02em;margin:0;padding:0}.tooling .tooling-section-intro{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;max-width:42.22222rem;text-wrap:pretty}.tooling-cli-section .tooling-section-intro{margin-bottom:1.11111rem}.tooling code{font-size:.77778rem;padding:.11111rem .33333rem;border-radius:4px}.tooling-cli{background:#211c17;border:1px solid #34302a;border-radius:12px;overflow:hidden}.tooling-cli-row{display:grid;grid-template-columns:9.44444rem minmax(0,1fr);gap:1.11111rem;padding:.72222rem 1.11111rem;border-top:1px solid #34302a;font-size:.77778rem}.tooling-cli-cmd{color:#f2a05a;font-weight:600}.tooling-cli-desc{color:#c4bbac;line-height:1.5}.tooling-split{display:grid;grid-template-columns:1fr 1fr;gap:1.55556rem}.tooling-media{aspect-ratio:16/10;border-radius:12px;background:#211c17;border:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}.tooling-media img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.tooling .tooling-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase;margin:0}.tooling-mcp .tooling-eyebrow+h2{margin-top:.55556rem}.tooling-ai-grid{display:grid;grid-template-columns:1fr 1fr;gap:.77778rem;margin-top:1.22222rem}.tooling-ai-card{border:1px solid #e7e0d5;border-radius:10px;padding:.88889rem 1rem}.tooling .tooling-ai-name{font-family:Archivo,sans-serif;font-weight:700;font-size:.88889rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-ai-name:hover{color:#853c09;text-decoration:underline}.tooling .tooling-ai-desc{font-size:.75rem;line-height:1.5;color:#5c554c;margin:.33333rem 0 0}.tooling-rows{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:1rem;border-top:1px solid #e7e0d5}.tooling-row{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:1.33333rem;padding:.88889rem 0;border-bottom:1px solid #f0e9dd}.tooling .tooling-row-name{font-weight:700;font-size:.83333rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-row-name:hover{color:#853c09;text-decoration:underline}.tooling-row-name--mono{font-family:JetBrains Mono,ui-monospace,monospace}.tooling .tooling-row-desc{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:0;text-wrap:pretty}.tooling .tooling-footnote{font-size:.80556rem;line-height:1.6;color:#8a8074;margin:2.66667rem 0 0;padding-top:1.33333rem;border-top:1px solid #e7e0d5}.tooling .toc.sidebar .toc-menu{top:5rem}@media screen and (width <= 1024px){.tooling{padding:1.77778rem 1.11111rem 2.66667rem}.tooling,.tooling-row,.tooling-split{grid-template-columns:minmax(0,1fr)}.tooling-row{gap:.33333rem}}@media screen and (width <= 626px){.tooling-cli-row{gap:.33333rem}.tooling-ai-grid,.tooling-cli-row{grid-template-columns:minmax(0,1fr)}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.download-hero{display:grid;grid-template-columns:1fr 21.11111rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.download-intro p{font-size:.91667rem;line-height:1.6;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.download-intro p:first-of-type{margin-top:.88889rem}.download-intro strong{color:#211c17}.download-card a,.download-intro a{color:#a84e0d}.download-card a:hover,.download-intro a:hover{color:#853c09}.download-cli-card{background:#211c17;border-radius:16px;padding:1.55556rem;color:#faf7f1}.download-cli-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#e0805a;letter-spacing:.08em;text-transform:uppercase}.download-cli-desc{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 .88889rem}.download-cli-bar{display:-webkit-box;display:-ms-flexbox;display:flex;background:#1c1813;border:1px solid #34302a;border-radius:8px;overflow:hidden}.download-cli-command{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;color:#f0e9df;padding:.66667rem .77778rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.download-cli-prompt{color:#e0805a}.download-cli-copy{border:0;border-left:1px solid #34302a;background:#2b2620;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .77778rem;cursor:pointer}.download-cli-copy:hover{background:#3a342c}.download-cli-guide{display:inline-block;margin-top:.77778rem;font-size:.75rem;font-weight:700;color:#f2a05a}.download-cli-guide:hover{color:#faf7f1;text-decoration:none}.download-row{display:grid;grid-template-columns:12.22222rem 7.22222rem minmax(11.11111rem,1fr) minmax(0,auto);gap:1.33333rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1.22222rem 0;border-bottom:1px solid #f0e9dd}.download-row-project{font-family:Archivo,sans-serif;font-weight:700;font-size:.94444rem;color:#211c17}.download-row-date{font-size:.72222rem;color:#8a8074;margin-top:.16667rem}.download-row-version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem}.download-row-version-num{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:600;color:#211c17}.download-row-note{font-size:.77778rem;color:#5c554c}.download-row-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.33333rem .88889rem;font-size:.75rem;font-weight:700}.download-row-artifact,.download-row-links{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.download-row-artifact{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;gap:.33333rem;white-space:nowrap}.download-row-link{color:#8a8074}.download-row-link:hover{color:#e97826;text-decoration:none}.download-row-link--primary{color:#a84e0d}.download-row-link--primary:hover{color:#e97826}.download-row-sub{font-size:.61111rem;font-weight:600;color:#8a8074}.download-row-sub::before{content:"("}.download-row-sub::after{content:")"}.download-row-sublink{color:inherit}.download-row-sublink:hover{color:#e97826;text-decoration:none}.download-row-sublink+.download-row-sublink::before{content:" \00b7 ";color:#8a8074}.download-cards{margin-top:2.66667rem}.download-card{padding:1.44444rem}.download-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.download-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}@media screen and (width <= 1024px){.download-hero{grid-template-columns:1fr}.download{padding:2.22222rem 1.33333rem 2.66667rem}}@media screen and (width <= 626px){.download-row{grid-template-columns:1fr;gap:.44444rem}.download-row-links{margin-top:.22222rem}}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.post-share-link{font-family:inherit;font-size:.72222rem;font-weight:700;color:#5c554c;background:none;border:1px solid #e7e0d5;padding:.33333rem .66667rem;border-radius:6px;text-decoration:none;cursor:pointer}.post-share-link:hover{border-color:#d9ccb8}.security{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.security-hero{max-width:42.22222rem}.security-grid{margin-top:2.22222rem}.security-card--feature{grid-column:1/-1}.security-card--feature h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:.55556rem 0 0}.security-card--feature p{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.66667rem 0 0;max-width:45.55556rem}.security-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#a84e0d;letter-spacing:.08em;text-transform:uppercase}.security-card{padding:1.44444rem}.security-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.security-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0}.security-band a,.security-card--feature a,.security-card a{color:#a84e0d}.security-band a:hover,.security-card--feature a:hover,.security-card a:hover{color:#853c09}.security-band{grid-column:1/-1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.33333rem;background:#211c17;border-radius:16px;padding:1.77778rem;color:#faf7f1}.security-band-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:16.66667rem}.security-band-copy h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:0}.security-band-copy p{font-size:.83333rem;line-height:1.6;color:#c4bbac;margin:.55556rem 0 0;max-width:35.55556rem}.security-band .button{white-space:nowrap}.security-advisories{width:100%;font-size:.77778rem;border-collapse:collapse}.security-advisories thead tr{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#8a8074;text-transform:uppercase;letter-spacing:.06em;text-align:left}.security-advisories thead th{padding:.77778rem .66667rem .55556rem}.security-advisories thead th:first-child{padding-left:0}.security-advisories thead th:last-child{padding-right:0}.security-advisories tbody th{text-align:left;padding:1.44444rem 0 .44444rem;font-family:Archivo,sans-serif;font-weight:800;font-size:1.22222rem;letter-spacing:-.02em;color:#211c17}.security-advisories .security-row{border-top:1px solid #f0e9dd}.security-advisories td{padding:.66667rem;color:#5c554c}.security-advisories td:first-child{padding-left:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#3a332b}.security-advisories td:first-child a{font-weight:600;color:#a84e0d}.security-advisories td:first-child a:hover{color:#853c09;text-decoration:none}.security-advisories td:last-child{padding-right:0;line-height:1.5}.security-severity{font-size:.63889rem;padding:.16667rem .44444rem}.security .table-wrapper{overflow-x:auto}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}@media screen and (width <= 1024px){.security-grid{grid-template-columns:1fr}}@media screen and (width <= 626px){.security-band{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 62dce113f1b..b1d827b0801 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-ed40aafe81.css", + "css/site.css": "css/site-36b14b70a3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index 8e208cffc3e..342bad193ba 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,7 +1,7 @@ 'use strict' const manifest = { - "css/site.css": "css/site-ed40aafe81.css", + "css/site.css": "css/site-36b14b70a3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 04c2e6f9b63..5577f1a437f 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 62dce113f1b..b1d827b0801 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-ed40aafe81.css", + "css/site.css": "css/site-36b14b70a3.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", From 5476e8ae543c6dff1d34a1cd044c1fc3f2622831 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:44:46 -0400 Subject: [PATCH 121/209] content: standardize the connector count on 350+ Reverts the 390+ normalization. 350+ is the figure the site and its published blog posts already used, so this makes every page agree without rewriting dated articles. Co-Authored-By: Claude Opus 5 (1M context) --- content/_index.md | 2 +- content/camel-core/_index.md | 2 +- content/camel-dna/_index.md | 6 +++--- content/trust/_index.md | 4 ++-- content/what-is-apache-camel/_index.md | 14 +++++++------- content/when-to-use/_index.md | 8 ++++---- data/docs-projects.yaml | 2 +- data/home.yaml | 10 +++++----- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/content/_index.md b/content/_index.md index bdae391a884..a401d967751 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,6 +1,6 @@ --- title: Home -description: Apache Camel is an open source integration framework with 390+ connectors for databases, APIs, message brokers, and cloud services. Write routes in Java, YAML, or XML. Run on Spring Boot, Quarkus, or standalone with the Camel CLI. In production since 2007. Apache License 2.0. +description: Apache Camel is an open source integration framework with 350+ connectors for databases, APIs, message brokers, and cloud services. Write routes in Java, YAML, or XML. Run on Spring Boot, Quarkus, or standalone with the Camel CLI. In production since 2007. Apache License 2.0. keywords: - apache camel - integration framework diff --git a/content/camel-core/_index.md b/content/camel-core/_index.md index 1243df449bb..9b15ea6c88c 100644 --- a/content/camel-core/_index.md +++ b/content/camel-core/_index.md @@ -53,7 +53,7 @@ The Apache Camel Core is the foundation for all other projects. Ideal for experi ## Reference Documentation

    - The comprehensive reference documentation for all 390+ Camel components, enterprise integration patterns (EIPs) and links to the JavaDoc documentation. + The comprehensive reference documentation for all 350+ Camel components, enterprise integration patterns (EIPs) and links to the JavaDoc documentation.

    Learn More diff --git a/content/camel-dna/_index.md b/content/camel-dna/_index.md index 066294bd48c..35ac52ff3de 100644 --- a/content/camel-dna/_index.md +++ b/content/camel-dna/_index.md @@ -64,7 +64,7 @@ Endpoint → Processor → Processor → Processor → Endpoint This simple pipeline model turned out to be powerful enough to express any integration pattern. A content-based router is a processor that picks the next endpoint. A splitter is a processor that turns one message into many. An aggregator collects messages until a condition is met. Every pattern in the [Enterprise Integration Patterns](https://www.enterpriseintegrationpatterns.com/) book by Gregor Hohpe and Bobby Woolf maps cleanly onto this model — and Camel turned all of them into code. -The `from().to()` syntax is the user-facing expression of this architecture. But underneath, it's always been endpoints and processors — a design so composable that it scaled from 19 components to 390+ without ever needing to change the core model. +The `from().to()` syntax is the user-facing expression of this architecture. But underneath, it's always been endpoints and processors — a design so composable that it scaled from 19 components to 350+ without ever needing to change the core model. ## That same route today @@ -104,7 +104,7 @@ No Maven project. No build step. No manual wiring. Just one YAML file and one co | **Component setup** | Manual ConnectionFactory wiring | Auto-configured via properties | | **Run command** | `mvn camel:run` | `camel run *` | | **Dependencies** | Declared in pom.xml | Auto-downloaded | -| **Components** | 19 | 390+ | +| **Components** | 19 | 350+ | | **Patterns (EIPs)** | ~20 | 65+ | | **Contributors** | A handful | 1,600+ | | **Lines of code** | Tens of thousands | Millions | @@ -138,7 +138,7 @@ SQL has `SELECT * FROM`. Camel has `from().to()`. Both are ideas so fundamental that they outlasted every technology shift around them — new languages, new runtimes, new architectures, cloud, containers, AI. The world changed; the abstraction didn't need to. -Thousands of companies. Billions of messages. 390+ connectors. 65+ patterns. 100,000+ commits. 1,600+ contributors. Nearly two decades of production use. +Thousands of companies. Billions of messages. 350+ connectors. 65+ patterns. 100,000+ commits. 1,600+ contributors. Nearly two decades of production use. It all started with one line: diff --git a/content/trust/_index.md b/content/trust/_index.md index b0c5a0f3e14..ecf4043caac 100644 --- a/content/trust/_index.md +++ b/content/trust/_index.md @@ -201,7 +201,7 @@ major release. The community has fixed [7,070 out of 7,081 reported bugs](/blog/2026/06/camel-bug-fix-track-record/) — a **99.8% resolution rate** — with a median fix time of **1 day**. That track record has been -sustained for 17 of the last 19 years across 390+ connectors and 272 production releases. Only 6 +sustained for 17 of the last 19 years across 350+ connectors and 272 production releases. Only 6 bugs are open today. When something breaks, it gets fixed fast, and the data is there to prove it.

    @@ -297,7 +297,7 @@ are logged as warnings so existing applications are not broken. AI coding assistants are remarkably good at Apache Camel — and it is not an accident. [Nineteen years of stable APIs](/blog/2026/06/camel-ai-trained/) mean training data does not go stale, 11,700+ Stack Overflow answers provide real-world examples, and a predictable component model -lets LLMs generalize across 390+ connectors. Add a built-in [MCP server](/manual/camel-jbang-mcp.html), +lets LLMs generalize across 350+ connectors. Add a built-in [MCP server](/manual/camel-jbang-mcp.html), machine-readable catalog metadata, a schema-validated YAML DSL, and dedicated [AI integration patterns](/components/next/eips/ai-patterns.html) for building AI-powered routes, and Camel is one of the best-trained integration frameworks for AI-assisted development today. diff --git a/content/what-is-apache-camel/_index.md b/content/what-is-apache-camel/_index.md index fbef93e65db..7a713dd5304 100644 --- a/content/what-is-apache-camel/_index.md +++ b/content/what-is-apache-camel/_index.md @@ -1,6 +1,6 @@ --- title: "What is Apache Camel?" -description: "Apache Camel is an open-source integration framework with 390+ connectors, 65+ enterprise integration patterns, and multiple DSLs including Java, YAML, and XML. It connects applications, services, APIs, and data — whether they live in the cloud, on-premise, or both." +description: "Apache Camel is an open-source integration framework with 350+ connectors, 65+ enterprise integration patterns, and multiple DSLs including Java, YAML, and XML. It connects applications, services, APIs, and data — whether they live in the cloud, on-premise, or both." keywords: - apache camel - integration framework @@ -21,7 +21,7 @@ keywords: It connects your applications, services, APIs, and data — whether they live in the cloud, on-premise, or both. You describe what should happen — read from Kafka, transform the data, write to a database — and Camel -handles the protocols, formats, and error handling. With 390+ ready-made connectors and 65+ proven +handles the protocols, formats, and error handling. With 350+ ready-made connectors and 65+ proven integration patterns, you write the logic once and run it on Spring Boot, Quarkus, or standalone. Routes can be written in Java, YAML, or XML — or designed visually with Kaoto or Karavan. @@ -86,7 +86,7 @@ Camel supports multiple ways to work: Pick the style that fits your team. Mix them in the same project if you want. -### 390+ connectors — included, not extra +### 350+ connectors — included, not extra Kafka, AWS (S3, SQS, Lambda, DynamoDB), Azure, GCP, Salesforce, ServiceNow, Slack, databases (JDBC, MongoDB, Cassandra), messaging (JMS, AMQP, MQTT), file protocols (FTP, SFTP), AI services, and hundreds more. @@ -111,7 +111,7 @@ These aren't theoretical — they're production-tested patterns used by thousand ## The origin story -The very first Camel route ever written was `from("jms:queue:test.queue").to("file://test")` — one line, June 2007. Nearly two decades later, that same idea powers every Camel route: take data from here, send it there. The framework grew from 19 components to 390+, from a handful of contributors to 1,500+ — but the DNA never changed. +The very first Camel route ever written was `from("jms:queue:test.queue").to("file://test")` — one line, June 2007. Nearly two decades later, that same idea powers every Camel route: take data from here, send it there. The framework grew from 19 components to 350+, from a handful of contributors to 1,500+ — but the DNA never changed. **[Read the full origin story — Camel DNA →](/camel-dna/)** @@ -132,13 +132,13 @@ Camel also provides an **MCP server** (Model Context Protocol) that connects AI {{< table >}} | Metric | Value | |---|---| -| **Connectors** | 390+ | +| **Connectors** | 350+ | | **Integration patterns** | 65+ | | **Contributors** | 1,500+ | | **Commits** | 100,000+ | | **Years in production** | Nearly two decades | | **Median bug fix time** | 1–2 days | -| **Open bugs** | Typically 10 or fewer (across 390+ connectors) | +| **Open bugs** | Typically 10 or fewer (across 350+ connectors) | | **License** | Apache License 2.0 — free, no cost, forever | {{< /table >}} @@ -185,7 +185,7 @@ Or design visually: [Kaoto](https://kaoto.io) | [Karavan](https://github.com/apa - [When to use Apache Camel](/when-to-use/) — common use cases and when Camel is the right fit - [Getting Started Guide](/manual/getting-started.html) — build your first integration -- [Component Catalog](/components/next/) — browse 390+ connectors +- [Component Catalog](/components/next/) — browse 350+ connectors - [Enterprise Integration Patterns](/components/next/eips/enterprise-integration-patterns.html) — the pattern library - [Camel on Spring Boot](/camel-spring-boot/latest/) — the most popular runtime - [Camel on Quarkus](/camel-quarkus/latest/) — cloud-native, fast startup diff --git a/content/when-to-use/_index.md b/content/when-to-use/_index.md index c8466078f1a..b3ed1606d8e 100644 --- a/content/when-to-use/_index.md +++ b/content/when-to-use/_index.md @@ -74,7 +74,7 @@ Poll a directory, FTP server, or cloud storage bucket. Pick up new files, transf ### API mediation -Sit between API consumers and providers. Transform request/response formats, handle authentication, throttle traffic, and route to different backends based on content. Camel provides REST DSL for exposing APIs and 390+ components for calling backends. +Sit between API consumers and providers. Transform request/response formats, handle authentication, throttle traffic, and route to different backends based on content. Camel provides REST DSL for exposing APIs and 350+ components for calling backends. ### Data pipelines and ETL @@ -172,11 +172,11 @@ Camel isn't the right tool for everything. ### vs custom integration code -Custom code gives you full control but no reuse. Every new integration — Kafka, FTP, database, cloud service — means writing and maintaining protocol-specific code, error handling, retry logic, and connection management from scratch. Camel provides this out of the box for 390+ systems with significantly less code, and the error handling is more robust. Camel also includes a built-in test framework — mock endpoints, adviceWith, and auto-wired test support — so you can unit test routes without deploying them. +Custom code gives you full control but no reuse. Every new integration — Kafka, FTP, database, cloud service — means writing and maintaining protocol-specific code, error handling, retry logic, and connection management from scratch. Camel provides this out of the box for 350+ systems with significantly less code, and the error handling is more robust. Camel also includes a built-in test framework — mock endpoints, adviceWith, and auto-wired test support — so you can unit test routes without deploying them. ### vs Spring Integration -Spring Integration is a good choice when integration is a small part of a larger Spring application — polling an SFTP folder, processing a JMS queue. Camel is the better choice when integration is your core problem: many systems, complex routing, diverse protocols. Camel has 390+ connectors vs Spring Integration's ~40 adapters, richer EIP support (saga, circuit breaker, dynamic routing), and the YAML DSL for non-Java use. Both run on Spring Boot — they're not mutually exclusive. +Spring Integration is a good choice when integration is a small part of a larger Spring application — polling an SFTP folder, processing a JMS queue. Camel is the better choice when integration is your core problem: many systems, complex routing, diverse protocols. Camel has 350+ connectors vs Spring Integration's ~40 adapters, richer EIP support (saga, circuit breaker, dynamic routing), and the YAML DSL for non-Java use. Both run on Spring Boot — they're not mutually exclusive. ### vs managed iPaaS platforms @@ -186,7 +186,7 @@ Managed platforms (MuleSoft, Dell Boomi, Informatica) provide a cloud-hosted env - [What is Apache Camel?](/what-is-apache-camel/) — introduction, architecture, and getting started - [Getting Started Guide](/manual/getting-started.html) — build your first integration -- [Component Catalog](/components/next/) — browse 390+ connectors +- [Component Catalog](/components/next/) — browse 350+ connectors - [Enterprise Integration Patterns](/components/next/eips/enterprise-integration-patterns.html) — the pattern library - [User Stories](/community/user-stories/) — companies using Camel in production - [Camel CLI](/manual/camel-jbang.html) — prototype integrations from the command line diff --git a/data/docs-projects.yaml b/data/docs-projects.yaml index e4c8c43a71c..d23ce450c69 100644 --- a/data/docs-projects.yaml +++ b/data/docs-projects.yaml @@ -20,7 +20,7 @@ manual: url: /manual/camel-4x-upgrade-guide.html components: - eyebrow: 390+ components + eyebrow: 350+ components title: Component Reference desc: >- Functionality and configuration for every component, data format, diff --git a/data/home.yaml b/data/home.yaml index 95a7bf231a6..4e639c07f11 100644 --- a/data/home.yaml +++ b/data/home.yaml @@ -13,7 +13,7 @@ hero: title: Apache Camel tagline: The Open Source Integration Framework lead: >- - Connect anything. Route everything. 390+ connectors, written in Java, YAML, + Connect anything. Route everything. 350+ connectors, written in Java, YAML, or XML, deployed on Spring Boot, Quarkus, or standalone with the Camel CLI. primary_cta: label: "Get Started →" @@ -32,7 +32,7 @@ stats: - num: 1,500+ label: contributors source: 1,583 distinct authors (anon=true), GitHub API, 2026-09-04 - - num: 390+ + - num: 350+ label: components source: 398 component pages in the built docs, 2026-09-04 - num: 300+ @@ -47,7 +47,7 @@ get_started: badge: Most popular description: >- Add Camel to your existing Spring Boot project with a single starter - dependency. Starters for 390+ components. + dependency. Starters for 350+ components. code: | # pom.xml camel-spring-boot-starter @@ -75,7 +75,7 @@ features: eyebrow: Why developers choose Camel heading: Built for real integration work items: - - tag: 390+ + - tag: 350+ title: Connectors out of the box body: >- Kafka, REST, JDBC, AWS, Azure, GCP, SAP, Salesforce. Connect to @@ -156,7 +156,7 @@ tiles: - name: Camel Spring Boot icon: spring-boot description: >- - Camel on Spring Boot with auto-configured starters for 390+ components. + Camel on Spring Boot with auto-configured starters for 350+ components. url: /camel-spring-boot/latest/ - name: Camel Quarkus icon: quarkus From fd5dc39d4bb3af7bbdf49c9198e8bc5c9d496539 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 22:07:55 -0400 Subject: [PATCH 122/209] fix(css): consolidate duplicated eyebrow/shell/hover/rail declarations (M5) The final-review found the mono uppercase eyebrow declared ten times across seven files (same five declarations, three different colours), plus three other byte-identical cross-file blocks: the .download/.security/.advisory page shell, the .card:hover lift forked in frontpage.css/projects.css, and the .blog-rail/.releases-rail sticky offset. Extract each shared shape into primitives.css and have the existing selectors join it via grouped selectors, so no HTML/template changes are needed. Colours are left exactly as they render today (frontpage.css's .home-eyebrow, at 12.5px instead of 12px, is deliberately excluded from the eyebrow group for the same reason). Verified byte-identical before/after screenshots at 1440/626 for all nine routes; see .superpowers/sdd/4d/hygiene-report.md. --- antora-ui-camel/src/css/blog.css | 22 +------- antora-ui-camel/src/css/docs.css | 19 ++----- antora-ui-camel/src/css/download.css | 18 ++----- antora-ui-camel/src/css/frontpage.css | 7 +-- antora-ui-camel/src/css/primitives.css | 75 +++++++++++++++++++++++++- antora-ui-camel/src/css/projects.css | 7 +-- antora-ui-camel/src/css/release.css | 36 +++---------- antora-ui-camel/src/css/security.css | 18 ++----- antora-ui-camel/src/css/tooling.css | 8 ++- 9 files changed, 102 insertions(+), 108 deletions(-) diff --git a/antora-ui-camel/src/css/blog.css b/antora-ui-camel/src/css/blog.css index 5a3fdc7531a..2a3b96ceab8 100644 --- a/antora-ui-camel/src/css/blog.css +++ b/antora-ui-camel/src/css/blog.css @@ -18,21 +18,8 @@ align-items: start; } -.blog-rail { - position: sticky; - top: calc(var(--navbar-height) + calc(24 / var(--rem-base) * 1rem)); -} - -.blog-rail-eyebrow { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; - color: var(--color-ink-muted); - letter-spacing: 0.08em; - text-transform: uppercase; - padding-bottom: calc(12 / var(--rem-base) * 1rem); - border-bottom: 1px solid var(--color-line); -} +/* .blog-rail / .blog-rail-eyebrow: shared base (sticky offset; mono + eyebrow shape + colour) lives in primitives.css - see M5, final-review.md. */ .blog-categories { display: flex; @@ -368,12 +355,7 @@ /* Shared eyebrow typography for the rail's Share / In this post labels (post.md §2.7b/§2.7c call these "identical typography"). */ .post-eyebrow { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; color: var(--color-ink-muted); - letter-spacing: 0.08em; - text-transform: uppercase; padding-bottom: calc(10 / var(--rem-base) * 1rem); } diff --git a/antora-ui-camel/src/css/docs.css b/antora-ui-camel/src/css/docs.css index d2421e0455a..b85eb7eead2 100644 --- a/antora-ui-camel/src/css/docs.css +++ b/antora-ui-camel/src/css/docs.css @@ -27,13 +27,8 @@ margin-top: calc(40 / var(--rem-base) * 1rem); } -.docs-feature-eyebrow { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; - letter-spacing: 0.08em; - text-transform: uppercase; -} +/* .docs-feature-eyebrow: shared shape lives in primitives.css - see M5, + final-review.md. */ .docs-feature--dark .docs-feature-eyebrow { color: var(--color-prompt); @@ -196,14 +191,8 @@ grid-column: span 2; } -.community-cta-eyebrow { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; - letter-spacing: 0.08em; - text-transform: uppercase; - color: var(--color-prompt); -} +/* .community-cta-eyebrow: shared shape lives in primitives.css - see M5, + final-review.md. */ .community-cta-title { font-family: var(--display-font-family); diff --git a/antora-ui-camel/src/css/download.css b/antora-ui-camel/src/css/download.css index 576886b454a..6262e28e4ad 100644 --- a/antora-ui-camel/src/css/download.css +++ b/antora-ui-camel/src/css/download.css @@ -5,12 +5,8 @@ shared .card/.card--flat primitives with only a page-scoped padding override. Everything below is genuinely page-owned layout. */ -.download { - width: 100%; - max-width: var(--static-max-width--desktop); - margin: 0 auto; - padding: calc(56 / var(--rem-base) * 1rem) var(--page-padding-x) calc(40 / var(--rem-base) * 1rem); -} +/* .download page shell: shared with .security/.advisory in primitives.css + - see M5, final-review.md. */ /* hero: intro copy + CLI launcher card */ @@ -54,14 +50,8 @@ color: var(--color-on-dark); } -.download-cli-eyebrow { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; - color: var(--color-prompt); - letter-spacing: 0.08em; - text-transform: uppercase; -} +/* .download-cli-eyebrow: shared shape lives in primitives.css - see M5, + final-review.md. */ .download-cli-desc { font-size: calc(14.5 / var(--rem-base) * 1rem); diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index e8bca90b9f0..f1b59009c3c 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -118,11 +118,8 @@ a.button.ink:hover { transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s; } -.home-card:hover { - border-color: var(--color-line-hover); - box-shadow: 0 14px 34px -22px rgb(33 28 23 / 35%); - transform: translateY(-2px); -} +/* .home-card:hover: shared hover lift lives in primitives.css (.card:hover + selector group) - see M5, final-review.md. */ /* Hero */ diff --git a/antora-ui-camel/src/css/primitives.css b/antora-ui-camel/src/css/primitives.css index 7740c9bc216..69c7b7dde20 100644 --- a/antora-ui-camel/src/css/primitives.css +++ b/antora-ui-camel/src/css/primitives.css @@ -6,6 +6,22 @@ fixed grid-column span, a header-row layout) - never the shell/typography again. */ +/* ---- page-shell (single-column content pages) ------------------------ */ +/* Byte-identical across download.css/.download, security.css/.security and + release.css/.advisory before this extraction (M5, final-review.md). Not + extended to docs.css's .docs/.community or blog.css's .post, which share + the same four declarations but were left in place (out of the finding's + named scope). */ + +.download, +.security, +.advisory { + width: 100%; + max-width: var(--static-max-width--desktop); + margin: 0 auto; + padding: calc(56 / var(--rem-base) * 1rem) var(--page-padding-x) calc(40 / var(--rem-base) * 1rem); +} + /* ---- page-hero (index/list screens) --------------------------------- */ .page-hero-title { @@ -52,6 +68,47 @@ border-bottom: 1px solid var(--color-line); } +/* ---- eyebrow (mono, uppercase, 0.08em) -------------------------------- */ +/* Shared shape only (M5, final-review.md): colour is a per-consumer design + decision and is intentionally NOT unified here. Three colours ship on + purpose (--color-prompt, --color-orange-deep, --color-ink-muted). + frontpage.css's .home-eyebrow is a near-match (12.5px, not 12px, plus its + own margin: 0) and is deliberately left out: folding it in would shift + its rendered font-size. */ + +.docs-feature-eyebrow, +.tooling .tooling-eyebrow, +.post-eyebrow, +.security-eyebrow, +.advisory-eyebrow, +.community-cta-eyebrow, +.download-cli-eyebrow, +.blog-rail-eyebrow, +.releases-rail-heading { + font-family: var(--monospace-font-family); + font-size: calc(12 / var(--rem-base) * 1rem); + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.security-eyebrow, +.advisory-eyebrow { + color: var(--color-orange-deep); +} + +.community-cta-eyebrow, +.download-cli-eyebrow { + color: var(--color-prompt); +} + +.blog-rail-eyebrow, +.releases-rail-heading { + color: var(--color-ink-muted); + padding-bottom: calc(12 / var(--rem-base) * 1rem); + border-bottom: 1px solid var(--color-line); +} + /* ---- card / card-grid ------------------------------------------------ */ .card { @@ -64,7 +121,12 @@ transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s; } -.card:hover { +/* Byte-identical fork in frontpage.css/.home-card:hover and + projects.css/.project-card:hover before this extraction (M5). Each + consumer keeps its own radius/padding; only the hover lift is shared. */ +.card:hover, +.home-card:hover, +.project-card:hover { border-color: var(--color-line-hover); box-shadow: 0 14px 34px -22px rgb(33 28 23 / 35%); transform: translateY(-2px); @@ -161,3 +223,14 @@ background: var(--important-tint); color: var(--important-chip-font-color); } + +/* ---- sticky rail base: position + offset only ------------------------- */ +/* Byte-identical in blog.css/.blog-rail and release.css/.releases-rail + before this extraction (M5). Each file keeps its own <=1024px override + (blog goes static; releases goes static with an added margin-top). */ + +.blog-rail, +.releases-rail { + position: sticky; + top: calc(var(--navbar-height) + calc(24 / var(--rem-base) * 1rem)); +} diff --git a/antora-ui-camel/src/css/projects.css b/antora-ui-camel/src/css/projects.css index ba7750939ab..e8e2dc5c651 100644 --- a/antora-ui-camel/src/css/projects.css +++ b/antora-ui-camel/src/css/projects.css @@ -90,11 +90,8 @@ transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s; } -.project-card:hover { - border-color: var(--color-line-hover); - box-shadow: 0 14px 34px -22px rgb(33 28 23 / 35%); - transform: translateY(-2px); -} +/* .project-card:hover: shared hover lift lives in primitives.css + (.card:hover selector group) - see M5, final-review.md. */ .project-card--row { flex-direction: row; diff --git a/antora-ui-camel/src/css/release.css b/antora-ui-camel/src/css/release.css index 0c5392c6586..37629a290df 100644 --- a/antora-ui-camel/src/css/release.css +++ b/antora-ui-camel/src/css/release.css @@ -130,21 +130,9 @@ for aside.toc.sidebar, which this markup never carries, but the class names below stay distinct from the TOC component on purpose, not by accident. */ -.releases-rail { - position: sticky; - top: calc(var(--navbar-height) + calc(24 / var(--rem-base) * 1rem)); -} - -.releases-rail-heading { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; - color: var(--color-ink-muted); - letter-spacing: 0.08em; - text-transform: uppercase; - padding-bottom: calc(12 / var(--rem-base) * 1rem); - border-bottom: 1px solid var(--color-line); -} +/* .releases-rail / .releases-rail-heading: shared base (sticky offset; + mono eyebrow shape + colour) lives in primitives.css - see M5, + final-review.md. */ .releases-rail-links { display: flex; @@ -171,12 +159,8 @@ Security advisory (single CVE page) ====================================================================== */ -.advisory { - width: 100%; - max-width: var(--static-max-width--desktop); - margin: 0 auto; - padding: calc(56 / var(--rem-base) * 1rem) var(--page-padding-x) calc(40 / var(--rem-base) * 1rem); -} +/* .advisory page shell: shared with .download/.security in primitives.css + - see M5, final-review.md. */ .advisory-back { display: inline-block; @@ -203,14 +187,8 @@ max-width: calc(760 / var(--rem-base) * 1rem); } -.advisory-eyebrow { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; - color: var(--color-orange-deep); - letter-spacing: 0.08em; - text-transform: uppercase; -} +/* .advisory-eyebrow: shared shape lives in primitives.css - see M5, + final-review.md. */ .advisory-title { font-family: var(--display-font-family); diff --git a/antora-ui-camel/src/css/security.css b/antora-ui-camel/src/css/security.css index cc6f3fd2a6e..fe95962e0d4 100644 --- a/antora-ui-camel/src/css/security.css +++ b/antora-ui-camel/src/css/security.css @@ -9,12 +9,8 @@ horizontal, wrapping layout is a genuinely different shape from the card system, not a --dark modifier of it. */ -.security { - width: 100%; - max-width: var(--static-max-width--desktop); - margin: 0 auto; - padding: calc(56 / var(--rem-base) * 1rem) var(--page-padding-x) calc(40 / var(--rem-base) * 1rem); -} +/* .security page shell: shared with .download/.advisory in primitives.css + - see M5, final-review.md. */ .security-hero { max-width: calc(760 / var(--rem-base) * 1rem); @@ -44,14 +40,8 @@ max-width: calc(820 / var(--rem-base) * 1rem); } -.security-eyebrow { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; - color: var(--color-orange-deep); - letter-spacing: 0.08em; - text-transform: uppercase; -} +/* .security-eyebrow: shared shape lives in primitives.css - see M5, + final-review.md. */ .security-card { padding: calc(26 / var(--rem-base) * 1rem); diff --git a/antora-ui-camel/src/css/tooling.css b/antora-ui-camel/src/css/tooling.css index 3ff303b4935..66fbe666ac9 100644 --- a/antora-ui-camel/src/css/tooling.css +++ b/antora-ui-camel/src/css/tooling.css @@ -153,13 +153,11 @@ /* .doc p / .static p (both 0,1,1) beat a bare class for margin; every .tooling

    below is compound-scoped (.tooling .foo, 0,2,0) for the same reason. */ +/* .tooling-eyebrow: shared mono/uppercase shape lives in primitives.css + (compound .tooling .tooling-eyebrow selector, to keep the specificity + this file's header comment explains) - see M5, final-review.md. */ .tooling .tooling-eyebrow { - font-family: var(--monospace-font-family); - font-size: calc(12 / var(--rem-base) * 1rem); - font-weight: 600; color: var(--color-orange-deep); - letter-spacing: 0.08em; - text-transform: uppercase; margin: 0; } From a7080973bd43955fc54fa48abb8e7b5a385d4ccf Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 22:08:07 -0400 Subject: [PATCH 123/209] fix(css): drop the orphan --color-on-dark-dim token (L3) --color-on-dark-dim (#cabfb0) had exactly one consumer, .home-example-command in frontpage.css, and differed from the existing --color-on-dark-soft (#c4bbac) by an imperceptible amount. Point the consumer at --color-on-dark-soft and delete the token. Contrast against --color-dark-3 (its background) moves from 9.74:1 to 9.29:1, both far above the 4.5:1 normal-text floor. Verified: only 747-810 pixels differ in the home page screenshots at 1440/626, all within the small CLI command text this rule paints; see .superpowers/sdd/4d/hygiene-report.md. --- antora-ui-camel/src/css/frontpage.css | 2 +- antora-ui-camel/src/css/vars.css | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index f1b59009c3c..7aa83fdca80 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -492,7 +492,7 @@ a.button.ink:hover { } .home-example-command { - color: var(--color-on-dark-dim); + color: var(--color-on-dark-soft); font-family: var(--monospace-font-family); font-size: calc(12.5 / var(--rem-base) * 1rem); } diff --git a/antora-ui-camel/src/css/vars.css b/antora-ui-camel/src/css/vars.css index 9be8deb0c78..036224d0e24 100644 --- a/antora-ui-camel/src/css/vars.css +++ b/antora-ui-camel/src/css/vars.css @@ -52,7 +52,6 @@ --color-dark-line: #34302a; --color-on-dark: #faf7f1; --color-on-dark-soft: #c4bbac; - --color-on-dark-dim: #cabfb0; --color-on-dark-muted: #8f867a; --color-button-on-dark-border: #4a443c; /* fonts */ From aa1521d37abea3cbd9f10e40039ef86327c9aa13 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 22:22:27 -0400 Subject: [PATCH 124/209] fix(releases): move the mobile jump-nav rail above the content (M1) layouts/releases/list.html put

    - + {{ end }} From dd3b8acce95a22ec01ba3f9e713a6ed138137117 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Fri, 4 Sep 2026 22:22:48 -0400 Subject: [PATCH 126/209] test(hugo): add an optional width to the measure harness _measure.html's iframe was hardcoded to 1440px, so --measure could only ever report desktop computed styles. Add an optional fourth hash segment (and matching 4th CLI arg in build.sh) to set the iframe width, defaulting to 1440 so every existing call is unaffected. Needed to confirm the releases-rail position/order fix at 626px. Co-Authored-By: Claude Opus 5 (1M context) --- tests/hugo/_measure.html | 8 ++++++-- tests/hugo/build.sh | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/hugo/_measure.html b/tests/hugo/_measure.html index 40254757114..eb2fd3f2ead 100644 --- a/tests/hugo/_measure.html +++ b/tests/hugo/_measure.html @@ -5,23 +5,27 @@ measure
    pending
    - + diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 06b77047e6d..76fb23508b4 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 2debd3a2010..458bf9caa1f 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,5 +1,5 @@ { - "css/site.css": "css/site-c33ac39dcd.css", + "css/site.css": "css/site-697c9df5c1.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", @@ -44,7 +44,7 @@ "img/team.svg": "img/team-899f1050c2.svg", "img/tooling.svg": "img/tooling-f5e235c238.svg", "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg", - "js/site.js": "js/site-c7bbbf7be8.js", + "js/site.js": "js/site-354642194b.js", "js/vendor/algoliasearch.js": "js/vendor/algoliasearch-6711ef4b37.js", "js/vendor/highlight.js": "js/vendor/highlight-de2def4bea.js", "js/vendor/svg4everybody.js": "js/vendor/svg4everybody-a0c573f2b9.js", From 1cd8549a9e7c5d0f7b9f6dfe97763c46b620d39b Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Sat, 5 Sep 2026 11:59:41 -0400 Subject: [PATCH 142/209] fix(content): make the Hugo pages pass html-validate All pre-existing on main. The release-note partial never closed the Spring Boot BOM paragraph before the Note 2 aside, which failed every releases/release-* page. Five blog posts had youtube shortcodes glued to the surrounding markdown (a stray U+00AC after each call, no blank line before a following
    , or a call inside a list item without indentation), so the shortcode's div was wrapped in a paragraph or broke the list, and one post opened a in one paragraph and closed it in the next. After hugo, gulp minify and html-validate on the 975 Hugo-owned pages (everything except the Antora trees): 0 errors. The Google verification file is already excluded by .htmlvalidateignore. Co-Authored-By: Claude Fable 5.1 --- .../blog/2022/08/ApacheCon-Asia-2022-videos/index.md | 10 +++++----- .../index.md | 1 + content/blog/2023/01/karavan-intro/index.md | 1 + content/blog/2024/07/kaoto-release-2.1.0/index.md | 3 ++- content/blog/2025/11/kaoto-release-2.8.0/index.md | 3 ++- layouts/partials/releases/camel.html | 2 +- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/content/blog/2022/08/ApacheCon-Asia-2022-videos/index.md b/content/blog/2022/08/ApacheCon-Asia-2022-videos/index.md index d7d71f7bd50..fcfaf565529 100644 --- a/content/blog/2022/08/ApacheCon-Asia-2022-videos/index.md +++ b/content/blog/2022/08/ApacheCon-Asia-2022-videos/index.md @@ -17,28 +17,28 @@ Enjoy! by 陈映初 (Chen Yingchu) -{{< youtube id="-prMcpvbmcU" class="video" >}}¬ +{{< youtube id="-prMcpvbmcU" class="video" >}} ### Citizen Streaming Engineer - A How To by [Timothy Spann](https://twitter.com/paasdev) -{{< youtube id="hPZS1ocmWhM" class="video" >}}¬ +{{< youtube id="hPZS1ocmWhM" class="video" >}} ### Camel K goes Quarkus Native by [Pasquale Congiusti](https://twitter.com/Squ4k3) -{{< youtube id="Wmg7-PZgQJI" class="video" >}}¬ +{{< youtube id="Wmg7-PZgQJI" class="video" >}} ### Integrating systems in the age of Quarkus, serverless and Kafka by [Zineb Bendhiba](https://twitter.com/ZinebBendhiba) -{{< youtube id="Owl9bOhPx8o" class="video" >}}¬ +{{< youtube id="Owl9bOhPx8o" class="video" >}} ### Up & Running: Low Code Cloud-Native Integrations by [Rachel Yordán](https://twitter.com/nerdycode) -{{< youtube id="EHC-W3RtBb4" class="video" >}}¬ +{{< youtube id="EHC-W3RtBb4" class="video" >}} diff --git a/content/blog/2022/10/ContentBasedRoutingWithCamelDroolsQuarkusKogitoAltasMapApacheKafka/index.md b/content/blog/2022/10/ContentBasedRoutingWithCamelDroolsQuarkusKogitoAltasMapApacheKafka/index.md index 0a455e0df0e..e4349799b24 100644 --- a/content/blog/2022/10/ContentBasedRoutingWithCamelDroolsQuarkusKogitoAltasMapApacheKafka/index.md +++ b/content/blog/2022/10/ContentBasedRoutingWithCamelDroolsQuarkusKogitoAltasMapApacheKafka/index.md @@ -9,6 +9,7 @@ preview: "Content Based Routing using Quarkus as a development platform includin --- {{< youtube id="nXyKM-xds2M" class="video" >}} +
    In this post I want to share with you how to implement a complete, end-to-end **Content Based Routing** solution using [Apache Camel](/#apache-camel-projects), [AtlasMap](https://www.atlasmap.io/) and [Quarkus](https://quarkus.io/) as a developer platform, including: [Drools DMN Engine](https://www.drools.org/learn/dmn.html), [Kogito](https://kogito.kie.org/). Apache Kafka is used in this solution as a message broker. diff --git a/content/blog/2023/01/karavan-intro/index.md b/content/blog/2023/01/karavan-intro/index.md index 77668b5353b..3eab3f85c26 100644 --- a/content/blog/2023/01/karavan-intro/index.md +++ b/content/blog/2023/01/karavan-intro/index.md @@ -12,5 +12,6 @@ Karavan is an Integration Toolkit for Apache Camel, which makes integration easy This is a short Karavan introduction aimed to help to understand if this tool is right for your needs. {{< youtube id="RA8sH3AH8Gg" class="video" >}} +
    diff --git a/content/blog/2024/07/kaoto-release-2.1.0/index.md b/content/blog/2024/07/kaoto-release-2.1.0/index.md index 553f9c5a4e4..62e296d7b5f 100644 --- a/content/blog/2024/07/kaoto-release-2.1.0/index.md +++ b/content/blog/2024/07/kaoto-release-2.1.0/index.md @@ -14,8 +14,9 @@ preview: "Kaoto 2.1 has been released"
    After the previous 2.0 GA release, we are happy to announce the release of Kaoto 2.1, packed with exciting new features, bug fixes, and various improvements to enhance the user experience. + -This update introduces the capability to choose your preferred Runtime version among other notable upgrades. Read on to discover the key highlights of this release and how they can improve your workflow with Kaoto. +This update introduces the capability to choose your preferred Runtime version among other notable upgrades. Read on to discover the key highlights of this release and how they can improve your workflow with Kaoto. ## New Features diff --git a/content/blog/2025/11/kaoto-release-2.8.0/index.md b/content/blog/2025/11/kaoto-release-2.8.0/index.md index 973e7ca0988..44f9827d6fd 100644 --- a/content/blog/2025/11/kaoto-release-2.8.0/index.md +++ b/content/blog/2025/11/kaoto-release-2.8.0/index.md @@ -53,7 +53,8 @@ Kaoto 2.8 brings improvements to XML Schema handling in the DataMapper: ### Canvas Enhancements - **Contextual Menu**: Right-click on canvas nodes to access relevant actions directly where you need them -{{< youtube id="92WqknAa7K4" class="video" >}} + + {{< youtube id="92WqknAa7K4" class="video" >}} - **Keyboard Support**: Delete steps quickly by selecting them and pressing the Delete key - **Improved Drag Feedback**: Different mouse pointer styles clearly indicate which nodes are draggable and which are not diff --git a/layouts/partials/releases/camel.html b/layouts/partials/releases/camel.html index 3b181178516..dd9c33f359d 100644 --- a/layouts/partials/releases/camel.html +++ b/layouts/partials/releases/camel.html @@ -26,7 +26,7 @@

    Getting the Binaries using Ma ` .Params.version) }} -

    To use this release in a Spring Boot application, use Spring Boot spring-boot-dependencies and Camel camel-spring-boot-bom Bill of Materials (BOM): +

    To use this release in a Spring Boot application, use Spring Boot spring-boot-dependencies and Camel camel-spring-boot-bom Bill of Materials (BOM):

    From 624314b696929f3a9114c2ebdc182093bfc85623 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Sat, 5 Sep 2026 13:39:51 -0400 Subject: [PATCH 143/209] fix(content): correct the tooling commands and refresh the project activity figures Fact-check corrections on /tooling/: the message sender is `camel cmd send`, not `camel send`; `camel test` is a plugin installed with `camel plugin add test`; the Spring archetype is camel-archetype-spring-boot and creates a Spring Boot project; the IntelliJ plugin lives under the camel-tooling org. On /projects/ the six activity lines undershot today's counts by 20 to 30 percent and gave the same repository different figures than the home page with the window only in a footnote. They are remeasured (commits and unique non-bot contributors since 2025-01-01, GitHub stars, 2026-09-05) and now say "since 2025" on the line itself; the footnote and the yaml comment record the method. Co-Authored-By: Claude Fable 5.1 --- data/projects.yaml | 20 +++++++++++--------- data/tooling.yaml | 10 +++++----- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/data/projects.yaml b/data/projects.yaml index e8ad5884d66..84825935bc5 100644 --- a/data/projects.yaml +++ b/data/projects.yaml @@ -1,6 +1,8 @@ # All Camel Projects: drives layouts/projects/list.html # Icons resolve through the Antora UI rev-manifest: antora-ui-camel/src/img/.svg -# Activity figures are maintained by hand (commits · contributors · GitHub stars, 2025–2026). +# Activity figures are maintained by hand: commits and unique non-bot contributors since +# 2025-01-01 (gh api repos//commits?since=2025-01-01T00:00:00Z) plus GitHub stars, +# measured 2026-09-05. intro: >- Every Camel project, with descriptions and current activity. The primary @@ -11,19 +13,19 @@ primary: - name: Camel Core icon: logo-d description: The integration framework and routing engine. - stats: 7,641 commits · 192 contributors · 6,222 ★ + stats: 9,883 commits and 204 contributors since 2025 · 6,312 ★ docs: /camel-core/ source: https://github.com/apache/camel/ - name: Camel Spring Boot icon: spring-boot description: Camel on Spring Boot with component starters. - stats: 859 commits · 42 contributors · 187 ★ + stats: 1,068 commits and 39 contributors since 2025 · 188 ★ docs: /camel-spring-boot/latest/ source: https://github.com/apache/camel-spring-boot - name: Camel Quarkus icon: quarkus description: Camel as cloud-native Quarkus extensions. - stats: 1,285 commits · 40 contributors · 292 ★ + stats: 1,576 commits and 39 contributors since 2025 · 302 ★ docs: /camel-quarkus/latest/ source: https://github.com/apache/camel-quarkus/ - name: Camel CLI @@ -37,19 +39,19 @@ specialized: - name: Camel K icon: kubernetes description: A lightweight integration framework that runs natively on Kubernetes, built for serverless workloads. - stats: 634 commits · 22 contributors · 917 ★ + stats: 779 commits and 29 contributors since 2025 · 928 ★ docs: /camel-k/latest/ source: https://github.com/apache/camel-k/ - name: Camel Kamelets icon: logo-d description: Reusable, high-level connectors that snap together to build routes with minimal configuration. - stats: 578 commits · 15 contributors · 69 ★ + stats: 730 commits and 13 contributors since 2025 · 71 ★ docs: /camel-kamelets/latest/ source: https://github.com/apache/camel-kamelets - name: Camel Karavan icon: karavan description: A low-code, visual data-integration platform for designing and managing Camel routes. - stats: 210 commits · 14 contributors · 590 ★ + stats: 271 commits and 14 contributors since 2025 · 594 ★ docs: "" source: https://github.com/apache/camel-karavan - name: Camel Kafka Connector @@ -67,5 +69,5 @@ specialized: footnote: >- Nothing has been removed; these projects remain fully supported and - documented. Activity figures reflect commits, contributors, and GitHub stars - over 2025–2026. + documented. Activity figures count commits and unique contributors since + January 2025, plus GitHub stars, as measured in September 2026. diff --git a/data/tooling.yaml b/data/tooling.yaml index 31f396d9762..4e1ac1d0462 100644 --- a/data/tooling.yaml +++ b/data/tooling.yaml @@ -17,10 +17,10 @@ cliCommands: desc: Run in developer mode with hot-reload — changes are picked up automatically without restarting - cmd: camel trace desc: Live message tracing, step by step through your routes to see how messages are processed - - cmd: camel send + - cmd: camel cmd send desc: Send test messages to running Camel routes for quick testing and debugging - cmd: camel test - desc: Run tests for your Camel routes + desc: Run tests for your Camel routes (a plugin, installed with camel plugin add test) - cmd: camel export desc: Export your Camel project to Spring Boot, Quarkus, or standalone Java for production deployment @@ -72,8 +72,8 @@ toolGroups: desc: Creates a new Camel project using Java DSL - name: camel-archetype-main desc: Creates a new Camel project using standalone Camel Main - - name: camel-archetype-spring - desc: Creates a new Camel project with Spring DSL support + - name: camel-archetype-spring-boot + desc: Creates a new Camel project using Spring Boot - name: camel-archetype-component desc: Creates a new Camel component - name: camel-archetype-dataformat @@ -85,7 +85,7 @@ toolGroups: title: IDE Plugins and Extensions items: - name: Apache Camel IDEA Plugin - url: https://github.com/camel-idea-plugin/camel-idea-plugin + url: https://github.com/camel-tooling/camel-idea-plugin desc: Camel editing capabilities for IntelliJ IDEA, including textual route debugging. - name: VS Code Extension Pack for Camel url: https://marketplace.visualstudio.com/items?itemName=redhat.apache-camel-extension-pack From d299fafe12ff971386111d53a0c63c1f6ea55b27 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Sat, 5 Sep 2026 13:39:52 -0400 Subject: [PATCH 144/209] fix(pages): drop the unsourced deployments claim and rehome the lost deep links "Proven across millions of production deployments" had no source, unlike the four stat figures; the EIP feature now cites the pattern catalog and "in production since 2007". The EIP catalog and data formats links the old home page carried get a link row on the components card of /docs/, and /community/sources/ gets its own card on /community/, which also fills the 3-by-3 grid. The home spec's Corrections record both. Co-Authored-By: Claude Fable 5.1 --- data/community.yaml | 6 ++++++ data/docs-projects.yaml | 5 +++++ data/home.yaml | 4 ++-- .../specs/2026-09-04-home-page-design.md | 14 ++++++++------ layouts/docs/list.html | 5 +++++ 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/data/community.yaml b/data/community.yaml index f22a1f2b9f3..c0f214aab7f 100644 --- a/data/community.yaml +++ b/data/community.yaml @@ -47,6 +47,12 @@ cards: title: Team body: "Who we are. By all means add yourself to the list, in alphabetical order." url: /community/team/ + - tag: git + title: Source Code + body: >- + The source is mirrored on GitHub and hosted in the ASF git repositories. + Learn how to check it out and submit pull requests. + url: /community/sources/ cta: eyebrow: Talk to us diff --git a/data/docs-projects.yaml b/data/docs-projects.yaml index e00c2a3bea6..8a7f7e83077 100644 --- a/data/docs-projects.yaml +++ b/data/docs-projects.yaml @@ -34,6 +34,11 @@ components: secondary_cta: label: API docs url: https://www.javadoc.io/doc/org.apache.camel/camel-api/latest/index.html + links: + - label: EIP catalog + url: /components/latest/eips/enterprise-integration-patterns.html + - label: Data formats + url: /components/latest/dataformats/ projects: - name: Camel K diff --git a/data/home.yaml b/data/home.yaml index 4e639c07f11..9d6234198e3 100644 --- a/data/home.yaml +++ b/data/home.yaml @@ -93,8 +93,8 @@ features: - tag: EIP title: Battle-tested routing body: >- - Route, transform, filter, split, and aggregate. Proven across millions - of production deployments. + Route, transform, filter, split, and aggregate with the Enterprise + Integration Patterns catalog, in production since 2007. - tag: CI title: Standard build body: >- diff --git a/docs/superpowers/specs/2026-09-04-home-page-design.md b/docs/superpowers/specs/2026-09-04-home-page-design.md index 8a7e9e28a7a..a027d2f4b4e 100644 --- a/docs/superpowers/specs/2026-09-04-home-page-design.md +++ b/docs/superpowers/specs/2026-09-04-home-page-design.md @@ -336,12 +336,14 @@ not see, because measuring an element says nothing about what is painted on top with their deep links (EIP catalog, component reference, data formats, `/community/sources/`), the "50 data formats" and "280+ Quarkus extensions" claims, the ASF wide logo and the license links. Feature cards are text-only per Sections; the shared footer still reaches mailing lists, - support, the component reference, apache.org and the license. Open for the owner: the EIP - catalog, data formats and sources links now have no home on the page. + support, the component reference, apache.org and the license. The EIP catalog and data + formats links moved to the components card on `/docs/`, and `/community/sources/` got its own + card on `/community/`; the unreferenced ASF wide logo and the other orphaned images were deleted. - **Shortcodes**: `section` and `downloads` were deleted (no callers left); `div` and `icon` stay. -- **Stat copy**: "Proven across millions of production deployments" (features) has no recorded - source, unlike the four figures; open for the owner. +- **Stat copy**: "Proven across millions of production deployments" (features) had no recorded + source, unlike the four figures; replaced with the EIP catalog and "in production since 2007". - **Contrast, site-wide**: `--color-ink-muted` moved to `#6f675c` and the LTS chip to `--color-orange-deep` so 12px to 15px text and the chip clear 4.5:1 (see the comments in - `vars.css` and `primitives.css`). The primary CTA keeps white on `--color-camel-orange` - (2.93:1) as the memo's unchanged brand color; open for the owner. + `vars.css` and `primitives.css`). The primary CTA keeps the memo's `--color-camel-orange` + ground but paints its label in ink (5.78:1) instead of white (2.93:1); hover lifts to + `--color-camel-orange-light`, where ink reads at 7.30:1. diff --git a/layouts/docs/list.html b/layouts/docs/list.html index 04f90f58622..aa74eb7f97d 100644 --- a/layouts/docs/list.html +++ b/layouts/docs/list.html @@ -34,6 +34,11 @@

    {{ $data.components.title }}

    {{ $data.components.primary_cta.label }} {{ $data.components.secondary_cta.label }}

    + {{- with $data.components.links }} + + {{- end }} From 21aacb0b5fd6af093d67b29400546cad0a7da678 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Sat, 5 Sep 2026 13:39:52 -0400 Subject: [PATCH 145/209] fix(antora-ui): paint the primary CTA label in ink on the brand orange White on --color-camel-orange is 2.93:1, below both AA thresholds, and the memo keeps the orange itself. Ink on it reads at 5.78:1. Hover lifts to --color-camel-orange-light, where ink reads at 7.30:1; the old darker hover would drop ink below 4.5:1. Co-Authored-By: Claude Fable 5.1 --- antora-ui-camel/src/css/frontpage.css | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/antora-ui-camel/src/css/frontpage.css b/antora-ui-camel/src/css/frontpage.css index a9f062aad17..9b3f3fc9d05 100644 --- a/antora-ui-camel/src/css/frontpage.css +++ b/antora-ui-camel/src/css/frontpage.css @@ -14,14 +14,17 @@ a.button { white-space: nowrap; } +/* Ink on the brand orange: white on #e97826 is 2.93:1, ink is 5.78:1, and the + memo keeps the orange itself. Hover lifts to the lighter orange, where ink + reads at 7.30:1 (a darker hover would drop ink below 4.5:1). */ a.button.dark { background-color: var(--color-camel-orange); - color: var(--color-white); + color: var(--color-ink); } a.button.dark:hover { - background-color: var(--color-orange-deep); - color: var(--color-white); + background-color: var(--color-camel-orange-light); + color: var(--color-ink); } a.button.light, From ef6c8b3304508129560695b70b7952bc730c9f25 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Sat, 5 Sep 2026 13:39:52 -0400 Subject: [PATCH 146/209] chore(antora-ui): delete unreferenced images and orphaned tokens Sixteen images lost their last reference in the redesign (the old home and community icons, the ASF wide logo, the medium camel logo and the static/img feature icons); the footer keeps the ASF, license and privacy links the ASF site policy asks for. Fifteen tokens in vars.css had no var() consumer: the three ASF blues, the smoke-10/30 and jet-30/70 greys, black, glow, wheat, the navbar menu and search-result tokens, and the mobile top offsets. --color-camel-orange-light stays as the CTA hover ground. Co-Authored-By: Claude Fable 5.1 --- antora-ui-camel/src/css/vars.css | 16 +-- antora-ui-camel/src/img/articles.svg | 4 - antora-ui-camel/src/img/asf_logo_wide.svg | 1 - antora-ui-camel/src/img/blog.svg | 3 - antora-ui-camel/src/img/contributing.svg | 14 -- antora-ui-camel/src/img/documentation.svg | 7 - antora-ui-camel/src/img/download.svg | 3 - antora-ui-camel/src/img/home-o.svg | 124 ------------------ antora-ui-camel/src/img/home.svg | 124 ------------------ antora-ui-camel/src/img/logo-camel-medium.png | Bin 22001 -> 0 bytes antora-ui-camel/src/img/support.svg | 6 - antora-ui-camel/src/img/team.svg | 9 -- static/img/camel-gears.svg | 1 - static/img/components.svg | 1 - static/img/data-formats.svg | 1 - static/img/patterns.svg | 1 - static/img/runtimes.svg | 1 - 17 files changed, 1 insertion(+), 315 deletions(-) delete mode 100644 antora-ui-camel/src/img/articles.svg delete mode 100644 antora-ui-camel/src/img/asf_logo_wide.svg delete mode 100644 antora-ui-camel/src/img/blog.svg delete mode 100644 antora-ui-camel/src/img/contributing.svg delete mode 100644 antora-ui-camel/src/img/documentation.svg delete mode 100644 antora-ui-camel/src/img/download.svg delete mode 100644 antora-ui-camel/src/img/home-o.svg delete mode 100644 antora-ui-camel/src/img/home.svg delete mode 100644 antora-ui-camel/src/img/logo-camel-medium.png delete mode 100644 antora-ui-camel/src/img/support.svg delete mode 100644 antora-ui-camel/src/img/team.svg delete mode 100644 static/img/camel-gears.svg delete mode 100644 static/img/components.svg delete mode 100644 static/img/data-formats.svg delete mode 100644 static/img/patterns.svg delete mode 100644 static/img/runtimes.svg diff --git a/antora-ui-camel/src/css/vars.css b/antora-ui-camel/src/css/vars.css index e5573288885..ae948456f69 100644 --- a/antora-ui-camel/src/css/vars.css +++ b/antora-ui-camel/src/css/vars.css @@ -1,8 +1,6 @@ :root { /* colors */ --color-white: #fff; - --color-smoke-10: #fefefe; - --color-smoke-30: #fafafa; --color-smoke-50: #f5f5f5; --color-smoke-70: #f0f0f0; --color-smoke-90: #e1e1e1; @@ -12,18 +10,10 @@ --color-gray-60: #555; --color-gray-70: #5d5d5d; --color-jet-20: #4a4a4a; - --color-jet-30: #424242; --color-jet-50: #333; - --color-jet-70: #222; - --color-black: #000; - --color-asf-dark-blue: #303284; - --color-asf-moderate-blue: #4f51ae; - --color-asf-light-blue: #7375bf; --color-camel-orange: #e97826; - --color-camel-orange-light: #f39421; + --color-camel-orange-light: #f39421; /* a.button.dark hover ground; ink reads at 7.30:1 */ --color-highlight: #cf7428; - --color-glow: #fff7a3; - --color-wheat: #f5deb3; /* redesign palette, 2026 site design */ --color-paper: #faf7f1; --color-paper-2: #f4eee3; @@ -83,8 +73,6 @@ /* navbar */ --navbar-background: rgb(250 247 241 / 90%); --navbar-font-color: var(--color-ink-soft); - --navbar-menu-border-color: var(--panel-border-color); - --navbar-menu-hover-background: var(--color-smoke-70); /* nav */ --nav-background: var(--panel-background); --nav-border-color: var(--color-line); @@ -210,13 +198,11 @@ --toolbar-height: calc(46 / var(--rem-base) * 1rem); --drawer-height: var(--toolbar-height); --body-top: calc(var(--navbar-height) + 1rem); - --body-mobile-top: calc(var(--navbar-mobile-height) + 1rem); --body-min-height: calc(100vh - var(--navbar-height)); --nav-height: calc(var(--body-min-height) - var(--toolbar-height)); --nav-height--desktop: var(--body-min-height); --nav-width: calc(280 / var(--rem-base) * 1rem); --toc-top: calc(var(--body-top) + var(--toolbar-height)); - --toc-mobile-top: calc(3rem + var(--toc-top)); --toc-height: calc(100vh - var(--toc-top) - 2.5rem); --toc-width: calc(220 / var(--rem-base) * 1rem); --toc-width--widescreen: calc(220 / var(--rem-base) * 1rem); diff --git a/antora-ui-camel/src/img/articles.svg b/antora-ui-camel/src/img/articles.svg deleted file mode 100644 index af014b70c23..00000000000 --- a/antora-ui-camel/src/img/articles.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/antora-ui-camel/src/img/asf_logo_wide.svg b/antora-ui-camel/src/img/asf_logo_wide.svg deleted file mode 100644 index 4f37dbde2a3..00000000000 --- a/antora-ui-camel/src/img/asf_logo_wide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/src/img/blog.svg b/antora-ui-camel/src/img/blog.svg deleted file mode 100644 index 560a66f1a25..00000000000 --- a/antora-ui-camel/src/img/blog.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/antora-ui-camel/src/img/contributing.svg b/antora-ui-camel/src/img/contributing.svg deleted file mode 100644 index 69d1a390bdd..00000000000 --- a/antora-ui-camel/src/img/contributing.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/antora-ui-camel/src/img/documentation.svg b/antora-ui-camel/src/img/documentation.svg deleted file mode 100644 index c57763e2cbf..00000000000 --- a/antora-ui-camel/src/img/documentation.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/antora-ui-camel/src/img/download.svg b/antora-ui-camel/src/img/download.svg deleted file mode 100644 index e5e6082d6dc..00000000000 --- a/antora-ui-camel/src/img/download.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/antora-ui-camel/src/img/home-o.svg b/antora-ui-camel/src/img/home-o.svg deleted file mode 100644 index 02e64b87729..00000000000 --- a/antora-ui-camel/src/img/home-o.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/antora-ui-camel/src/img/home.svg b/antora-ui-camel/src/img/home.svg deleted file mode 100644 index 06ca9567bff..00000000000 --- a/antora-ui-camel/src/img/home.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/antora-ui-camel/src/img/logo-camel-medium.png b/antora-ui-camel/src/img/logo-camel-medium.png deleted file mode 100644 index 36701f7ef0860a8b2ed7ecb50bd69d80730c2e67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22001 zcmXtg1ymeO)AcOw?(P!Y-92~+?(P=c7k3DR;1=B7-ARHb$l@9xI0W~9pZ7ceo-@0% zduDois;h6^y4AC>8fpsYC?qHV0H7-=%6yWbj&1VLc8=St(bKtCg=_s~wWgjgWd-dZAq`RoN`gm_ z%`-~bw~PtWH*(>S*hao((|PKd>FeqFD{~!s`+HS&mv$aJ$)t*<%KuJ?V_Uwv6Aflv z@7z;NznSj5Tk}9BM?uE92}eDQXVBUE_D^04QfPl3*=) z2WUZ_amNh_=v1t*7c6=YW9es)@^L+~G%1QZO5M2E&OQl5gXItFSm}I z8;^DVJNY!P1nc_ePN@AMI&%iD8!dR4<}3#IKr9O|=hK96Ar5Tgt-J|$uX4hg!N7$J zRkgPv4^(UX{bh1jYeJx^fD_`sQ<1L% zSGt2OzH88{eE^mfY4U_1z>yP{vO?qR%>AvZpoTwPkq$>`oSGUwubjeqbD{Q;1n>d= zI+oU2z!rAF=OUFw2>dN2is_n>LD1`f-`Eiq3%}&AKFaGoH|!kxpbWi!iYF3|+N{qy z|B2C{Zv(T-oSS{dKiEFFK`n)#>ze&PB2VH?Wj{Sx{yViL z07rh-=hgbVS;bE$z&58+J#Lj$_hjwgyXOclYFV)~)xz{jzwKA9($j<&xV~zI#}%QE zXy#@AovXMa;LQHlNOZBSIrzzw<`ofK<94HD&g3oGhE}$(svYSr(H)LlkhLQ z>rIZ6@X2zZh7MJ#w?YmQbfAyZw;`byoCCz)jvkRZO&PZlkRN%KWXav)g>$k$mb)%R zDfPZJcKudy{@)#P7#Ppq;bWfso;M3YE_A16c?V{T{I(>0a(hHow1GoTX=AiS1*;XX z*}s3&z()@q(cg7;+ESZ-PZz(;Owh)*3cn(0oVwJLbvfHg@ii64bd}RMmMuakkFyr< zY=q!Bpj{)6*1^3dZ^!7403U#?5cuTb=Xs+nID08R3=4m*-~lo-qikmhhkoGxx#fp; z>X4`D;Y#S%tiUL(cxvZsZ0n0ABD@VWo6`N3 znD(D{apMX|ad1ql|ETooLm9d+46g>W%?0VjVSbnwBP#7hb($bsG<3BpQ}&l=cs!kz ze-A|hI{n!ALRXfvoNxR#>*r#xWHw;+nCpR;#@iL^$|Ba0m z-F{f#!&vZPB{T6k&-T0-?aFWB_b5gGVoECz+pK5s0%QEyVT>2AUKgy*YyQ`*RBWyP z>z2J+AN*FXS@ANDSinTD^@sUzlX%(r(1zn9H3o{!rvk@KROgca-8=Gb#TAkn;(V_E zK{XQ1zO3Z?bi+x|dY){DVVnkpS>=k;S%yI0>DWW)C&bDqQMH{O{@ZJlx5c|v_v4E> z=@q8`x>`bGL-Cko82uGX!%8q_sKJ(oGl)gFq15D_#ZWX-&cOvAHv_M*#=&c-S4qZwF9Ya{(RhxMT%r5pY2&usb zMiITP>%;u8X>xMK9E04}Jq2dn2EkY=#`y2GZCoT?Ot9I4*L|kfahsmg8zIcPO%?Yy z3>Z@6d!nk-NX=tir#9}z6>6Ce$9$` z`zEaH5&b4z_?mKkE~h=e`wx;)4+}0T(l3|N?n=dCmi-B`apGY1yUwtC%zy&?yw;hB z3#m9pLUcl13e1uSa(gDMlq;q1$#r)mgmmgUz>Tz{U*kS+O5j!*(^4rq9GvAAujli7 zzA}B4r!-(C`pujSW(Zk@$!6Q2HE`=9OJ~es_Jk0Y2(FMN#`e{BUULwG5JTB7IC!yX ztw+Hr+nI%H3jVL>eVh=02D8nr>M&8dx$~h@$gCH3cr3IQrmlUu`y7#b|`+jzc z7=gEIFyGp#79qjD?U1kV5ie3HhL<7X1D+jWu-9xM1)A_#QL zx}9ZX+ror~CN{CZLj_Tl0wVv-%iNH=tTC=+GIbP; zCkXrt4K1>$r=Qhlq_>zwcf;OmQt;9gAw%}}Y`XdCQP5=vHOB-G+izQ-B)Wh;sw3ihXzV?INx#Y`@kS!Km?S z(R}l+D`aYIHqQ$UkJ@J7WjYAP3=h2FHN;ObP@QspaFXBn_isV)r>M%dt#%OYnHO^p z(!eFvS{JL&{Y){7j4PKBzu-9&5*gwE{1_>fkvz|t+@Pbzz@)oGx?qmZc?ga&h8KY_3>q~NM|tjPa7g8BSzwoPFk*W6q z@GnwGV1@94B@lSbPw2xzn&}g_?EWQmoH8Wv4OdUy9y>-)I=0I~W+f$q>T0c@_B3Q8N-YlU;N5O{%L9ltkG)@mr~%w(e)rTep5u@Pgm90Ki3)1T2(QgRHO`ygf%<3qSyN{-sfV4|EI~q>LsIk~)aMtJMt89@kOY>FqX&`u)L# z_PpUzkc5?nekuaZ8brg~_K*N%K&cpaq;q7H!CtZN> z@9}Bra^?Nd4?Hw&Eaq}~en-8QwqQ*05~>B8);!t=5Mr!ibBwKPCTyAJ%uA z$14j$&R~kk03_a#3Jh43&@};~$>twd>e>tacOn$7omzPfq|-%*)RAvHejReEy61`W z`?8I7~|Ab(q3tkwZj5vy3YBOkcmKm7l?6R5ovri@H0h7H{ROd+!Jh=^Lpa2b+ zLd1Ct;srfL6oDe7Qr~PvcIHKfo7L2OZ@zmSdk0MDI_teqfK>tR7Cd*kY9bk<^R^$p z)sQ$Tzk{J(?b;-{_m%ByK|GQiUEPwJ73#ykL9|J5yNY*$zVG^bdYIEWq@cu(y$n9+ z;Iy-s$V!mBx(wtHcfRr0iqPu`Y&q=hAac!QWpd&6UFbxXz>CQ0?1~e7oEL&RC(~UN zs1Y0jenSFKBGg;nM!{ndgdhNBPAH1`OSnul3=rx~WNhuy_rL`8wFmKn^f+NmFv3O5 zKhW?v0(t1HD6UNQXTv7CRJ!qJ!Y>V*nDPUjw9H_!Vb}Cp@|dpFbw(9imk&_|p$T&? zXd*7(C!FbyWT~Y=NIdPE+#_y;G6AxuMLtY8ZL#(l)MWADU#r~_YamBL=_bkSWJ zp2dKGC>Q{@@2bBq@cZXMU>XKkWTLuSskmX`=eeK;8l(q{uVO>ag9mcNKweNH6U)_# z83d`7NirMY^k2xQPlybktznKbEC^!1KP|^t`99)>>l}Wj1!>m~>#lz-$>YSYb7tA9 zdFJ<&L+EH+;T%?8yRF2HbgA}Vfy=hiQuM2=?mkq=^uu+6+wKw#Gswo>e;s&o`X zwz9KEo5Dn4_Wb!fl$It=3x6c45l)^{(8upAMw;ctQSG#OxV>hXq_0diwIc%G6Tyx! zjnRB-s=5-5{$uJ7x1uwN4@8=G%yG>X@hepg1jnS-s+<{_aikbUm*u*eZ=0QFw!N+# zP*az{P0{$QBpF8KZa#&2oktM~9lDpR?d1cve0-Q0Ye5A)I{@E z@X!dhS0m&8=E7OsTvLkoPOGBOiP3!Dovt8Df8#9CCAJp|`;qKViB6((E%&EHliM;i z`dJSJ*QZK$yG`QKp@N7FZ6)OqwIat`Y*k6 z)@Wx4WxxD;8gBNmlrL+AR}{uBuO4 z13PQzq(e4X%FBk`{`xK^6;30|Xu3&fQ=9Y=pKiCmhR*##>)Tk5+K-%IbH(+YF5OZC z#1ge2|I~nR&>8+2-w2FNu-jzRg1YQ)?@{n}IZDxtN+Rr|o#)IeF=^~A6+LVs1|inD@Fn^VqJlau7eC9rmj{ERoPLr8>mk3DdiKi}FH zrlyCw1qXxSaqj5a-^_`lq(D_s$RpVubI$3MHaM2D?96=hEk?Uc~@vE-YC7DMLGCc`fBRQUE?gLHLvo zWi~L!x-V9J3bC@Oc5wLD#_bqFxC3@?pFR*f7&MI9w&Ya=P%!a>V_%Ls%CjTEhP4qE zODX*oB9Pba1-M?mZ`ad*dAG4E)*p+{;>!c;D*@8`ZCOtq*!rm0EcJJaUM8bp0iMtJ zT*oM8SVRhSM7$?N#m+AND*0^$sionFcM*~xfU_Z`rdBQ)WOh|j=PbUuUTR0V%A11= z&Vy$dUJ0N|QN&5u(mIn3;eI@7vn}$IP&JGf=9yKLv>||nrse^{^qUN41C&8o2%il* z^sv6~VIbkM!x*7$!*ql~QIAsA89!|@7mI^IiCTK>uvyYRPvfZ`(Q6Os_KvjqYH_=K z=XIfMkqeg`A#HEqCcoS?q0WeJ(P{Nx=tD2xZ+;j>>>3pX$6R_2CkUVzx%%yG`0vk! z>M4F>VNO?U?6KjzuG_``cnE0gzi7uXF%O46pF9AX z)qmY9>1wY6Q8=Tu7W1yTXrXAb70&7!WAGyd_HmaE(w1`2dSMN3%pmK^%}VZgOFhQwQlEAxiCYiiY%&kj=x|nQ z&z7pebBW=Xbzwe`{`BGWjXgLlRYt@-BX)ec?%AFu*b=&qkRY{`ngoH<_929yyL1-j z5w~AwzBkz4E~l*MiF5YfL9>_h42+*S-)mEq)M--gE$@?UwYc!}vm6TkdBV1LhE z!0hAb&k$I*O}P8gx~a{NucR?z%y|zx)}6Gh1y8RCg$^ZRh+9M!ta`#sGoCm^v9dTK zFmSz1zGfsbC^`Kzm3!@MQz6bPZ=oPAteXXqJm2f9aNlbQ#0F1C+K7u*8OyN=Q^?NV zi~}`qoXL_>h%rcj9PNrGl}t`<5&jJ*{W}ffx^4WpP-j{yOXZ6gw;V;PnfIiDb*a8EXJu=dg~alT`lXGCXbBN8W1nD* zSNG63UQk~Zw#P=byi9RHML_vVZ5no=CrLufoC$2HH@b*-Q?a)Y9C3O3WCdc5H{VNE3ldIsw#y#&pW;A+*L(tGW{#fq*5r~?n#uGQ*3o9km}D_kKcE9UpM2-k(=09aj$o< zlw^(O3sH(sO{FZTEyAY-KokDmuWBy!l!-WD^fUEx8%uxc-@*SS7F)>R?kMyR5Q;YU zy;~^WB-5LRkPe&!33GZPKFb5!l+9sxR2oVuh%prsxKW@$aa6K7C&qg}!!F^|`59a) zUC>n_l&R5VE78D9B;P8xv!u|Wiih>xrAy@*%Z326G~RF(@49Kfi_L_`bw#q;$e+{` z`u6uwnCkLN-b0$Hj&g3hF1Av`@8>#LJx@#E+V0e<5t+5R66KHVOQ`}Fgz@6yS}YmA z-R>f;n{P>RCo;)q0E+LWAkg_M*FaIr2qnNaerFevXxU=}`u!L`NeLzn_n{8NTC3(^ zD@q%D*AS;oT70M;nn_z|1S`q)-dM!u<KqY-JoOKTzC}#L z{%wP%eH(ZEvo=_2R9g`j_^{?<!tu8F}s_PlZlqbl1_W#L4u0APNk|c^ar9~fi zX*ey5!LGKbXd{j&2@iHv(5`uATG@yw65TtjPtD}GNXIoVDDNri(khR+J?lP#%I!~&C2W61lGi6W0=qKsoY}%K~1FS37@d?%_G$* zwL2XqE8@ONjf$31Ys32T4CE+DjSMou%x|44e6A3vl1ZrD5Kei;`YTz&|DMh{apulz zA#ZpSZxUWyU>mK(8~@B`^A+wPdj|{hyvn}15&;RW8|@QDwXbIl6!V_aaJzzE{(e|= zHSZM~{5YQW8@bZ9A5=P_aRu8Vb1VLddt@*V*jlcp)KdV)Z#yMCrSX-XwlhMbeU#jV zz7Dsgonvyl(?Z4NOdF1Ps3dN?&-2{tG>Tx!byrQOK{l3CSGB--(7)h&RPEqs;Zo!( z_H+bC;a^S?aM#>uyU`|b3SeV81M z-a?njn3!AZdtP?GX$*9D`Tpkz8vo4EvvWg>>i#5zy|?Gu=%fCLdVOdb(R3!r6I8~YZqhP$PfCSmXnCS7KAUkbB^glSY!N0p%LY!gFsp% zzOedGQRo5tZY2y(l|=$U;Nw$Y?bvza5zW(Otwq{@^65|!aCYPI*=|E?MRfg4>|~@~ zlnDU>(d~5GR6x8KU6C)g6tWD5*L?Hx!2Q`*=a}!(PRWJ){y^%oktKGk%%3;#3CCf> z{s-#s=eBoJuWk{zyDpjkHLPL|3l{6G!epchj}^=LvAq%E!n5@1{HfmW%b0J7oS3-2 zKBkTG>UY}VA)uhHLSd8rotlt4+zD;@$XwNkoSoaL5jtew6v{qGrf*C`b40sCJL9LT?i*meHLd26o*LsnuSBy7l8i=eJt9fy4`3ui_FZ6~VZ579RJP=Kl%Zq7+i) zzkuwkSYJ6~O~bzOshBPXqI1?O-#sY=6+BIe=QIf##|!4mmXZZ*#I{bk00;@R-7dKv z2QgXB?Y7kA8DD+cfG2X=$K8#un%1090)wM;?MpLg=NX?J(ATZKZDI}y+K$G#5o?9v z2sBQNd#4+NKpk(XkO{(*i`;z_*|C>e+m14xy-gd|?u41H-J5M=4X>!>u2Ghs+nXXZ zXCD{mT9RDA&+y=d=1>0>D8_t6J*V$3M~F0>guO6nk0hL(h9)*4g&X!Jy{jMQ)rHS- z$WldE^NYvHGccQAV4B$nbY5>OIvMIQTdo5Y|BPpCoPO5gK|7-$d=IAMehy$Zer}fB%}OKwkNWXZEY! zYc`A`o}j08RJn1mJE5>b@cdtqZxWu+5Hci6&W$|;ZLMY8cpv}M+t*|>>vv`|)*arU z6`g(ni997v7(0CV+(rte3)(y#9KTKlN8@IOXy?q(ZTTQP>vJ24gi8V^VgPCUqr0sU zc;f|e+#@XpD?qpK@;Ga2MRn}g9|GAtP=y%r`*d)1>VVYiN9@?HU(&+6pQ(DG7Ktsv zZ!El@@z5g(^DAndqaq~SWeOg8xFXPNRfBImv}wenwU6;`EAvL64kcueu;1J{~1SC z;a6Ii=;B{D$!i_FOP3$YuCMGQ7sl+q+(YrIkM*q#k?R^U=sjKxlBc7E z9|u}f(A1lgbmmV_PB1zNjiD|~WAlg)|A12bS>Fi6)JuCfEbov_4$Pmyro4pI7oRmN z{JLL9t#HBe-Jfu%Sv^dsUGO(hnny$JDF{{6eHDk`LEYOKdn05YoGYqMzkh-Tf!;|bTjofI@?Z_?MTJ{;X4l8jb^i=G9FDW zAWI4l^H0(qc?GLV`yD<+)Ld zsB+uHTcLPqTX8w(r$X}(Bg#G(90`mW5>?mmp4u$aQt#`xDzHJpklYv4MbLc;To9Z{ zklsIw<+HW`cxW&qQ0ZRdicl0W0im03eUu+Q2S)Zja*|duM+pu1-%%#)5Q+~r-{Ea{ zhxC&tHwMLisVES;^si_e5z?G$-ABI&MGqZ1p&#OgK~tAS<%f4A{XW|U7<{c)jK=qZ zjVK)P3t#wMJH0CijeR!e!yn0*&&UMi;0^#`#eG<{)`A&JLrPMG|QMk;N1!>+k42`YH& zcQ6QSxrva2XL9Mx?xBJo5MZ1Pk78NhR z6398g6RPpApKiRm3z9jUd!EvO>*k0o2Q@75Ud&N#uI zTisShlNDp>W_fk{F;7H-Pj5hL#A1Si_Q|q;JVkBz*aam})Qbq>c)N(K(ZzKVhj1WI zuQHJ5UeP^7t}q)PAOBVCI78K?@G&5^vi^t74b@}9fGMYCRzqj7$MPtJE7n>fhJt^P zaMv=gXLwa2%-lKXnPR~FVsrlcJvsKvbO<1){i!I}9qNhullm9?s{qVmZMjNTYWlKg z1L5*tV@``yy3u`y8iA!OCzbl(&W@+fknOB~)nUxH*sItq&A3OX(Q$r?_|&q)LINyu z6M7t}G}dk+SWxki2B9|Tl6*`CTz67NyL7bDTUW4XeNK-EtM=yOuIk?g8C32w|t_UC24UVgomx?E~(t9lh`4}Di80{6>b<xC4!WF`#CW09$ zohP-f3ECSLdQg0O>qG?890z4cNzrmYJX1|3?ERY3(RQ=4CCk3QO$K|m!pN5`jIt}4 z|BRxb@GIAAwdkp+YzH|LyR$)Ul!c9ErAuFV@PPr ztv_Q$oK<-c3NR6$H80$_a+1z;x^msf(-F@xs^8OM2Z3yGLtT5QY_IZp3QRQG_%^)1 zvg$oEfCuKIf6HVj3X7t|K;&0rp^WT@zd{#6-<|Ea>lzZ4NN{M|%Xm7>7m82da+k9Ftk)_3qb{y_RwzC60W}Wha5PZ=CH)+s z(*In^RCX7n_-o^Rm6FQSIc6it1T{mu>k3=`i~#PWh1Y@=!^ zNvjAz_~si?CFcI-gYL3F4Z&G!*Uxfl#h>t3Bqu?Ie@fdI!yA^KatA)GX3PE_)C6ig zgmNriOFe&gW^8?HI=_6nVi>b^&I9B$HQi2YJ3QsxPo9!-#5>^YZYTvp)_IQm9%%Iu zlgnzQ^ubUm>Gxfsw{-~_&OI0P#lO$4vZ-#n+DR^OJs4EOvNu6PW%vXcUt8^^$>E=C z?zqCcgvgS>;pxyxKQ2X0Igd7X-O9na%*;BD2P}DWN8T1u%4t>MgIY5cx*mTS!Pq$TH0kj6MKp zp=Xv)23?*`UADdxRcF_G77Fb(MEF|AZwTS%gD$0OVMYPw$(P6>ihF~!$wRfx8Cyx^ zo1>cLxu|lnYbg!oB|A{3-U)^DCq1Z2*KC!MbOc|WnEWGrU(D>w0`lO5dUTe(rmYV& zNQFeLv_8O-{k@Wu%Rx14`B-ZjOgdnjT{YQabvrbAKC(>L%o*NyBd(<6oO=8pri>u~ zac;q|X1+a$r0#!WiJ;q3ZxC+Z1BB-JqTsHbM zL~%;_IN4KURsp;^H2K5EyprjL*9`emL^uP5d|tV^kI*22MG9R1EqD_JGuQIjC5yjs zx%^Bd64;Z6hTCX#mJExl$4!kOGY$vLlW;LUbo;}szl+Tr{rcu8CP!xSa|i|`*FlOn5pkVJ zUl`X>L-X00*{TzomC`eN-F_JY8xGZ%@#INq>%wcpcn-@m=G_SdaMWKLEb8xu}Tcd(&z z6LUVaGDWhRcWhDEaGyY3?Yv{lO>jP+m_{9&2(GLSCRYg#y)bB`C@JcrMAFO zM+cWf#30-vn%3I%-6!}KYM3;o2=>PrYB)ZeE1mKoeDw_WSWEx8wqXRo-Z&s|RnK&y z@-VBmk0|f!IzDYOX?)6fqVwsu-7v>>g)Il4VC;7BBfL37B)Gf9+L$iQ5S^9BukceZ zF1%4F6?yjPshLGTb~!-1XkQj`cyq3Pb&#aNO=kWPRAE|yhZBwqP0_{*R~kTI%1>^7 zg8lvJ%X=!$j{v)>oTm980q2V(-D`Q{81Xord`HTx&FwJay zEe7+Ztje?dUIEiiG(U?G*zv*o{%L055LbXFbIs>m1)R#@3&j|Di<*eAPe`vHc&iHN zo4#-Qel5q+UV{O8r@=U0Uv=K`LTl5fYaUN_eAL6MHQ zB?*Z~$PUbRin3G-j|4D%A~{Yy;0(OjWSdIV4(76 zD;kA5mq|9Q8F9>h*{8>$Xl3Qq>-j!=42ASmc6PclrIVyePLx|eZ|_5z0*|b6LIN^{ zGwU1=^Us_@Fl{&$D%!^CqT+A0=r*KN&?&{VdT(R%E~2tF!`$Ag%m?JWksGNj9xD~n z2)4l^c*Y*kM$3goMU0Q!rW$Z%j(GSFhYE;p?Bj}lz;A-F-RPRIWd)n928-0gja|is zsv7;zGXN9|Gt+3f)n|0xfOm%b-)ru@}UTVeE7p5!u-0{M?E*l zG{W9;Q&W>5#rEI$|FTxwi^CdsYDFVB`7-yhNJ$$NlFej%f3n864bh0fW}|F_j~@kJ z@d@uazLmw43zOw(&2{L3%fp!irRlCpa4z8_voxRw1Tc6l=E7TVjx>ZQJ zIU#|tTbo%KL@M>s?`Z4G>*8JROu1)Ck zg?;=5IKed#4g>@1fG7McrcD!8S0jjb89})G@4ri3($l(3A;0I!Fga$}Xt>izJ5soF z7;_1*Ctytc7k9|JSS^X3z!V=}&6mpd;(I>Yz#-8D0 zPP=a1BJXYZGd|f~L76*-=$x>-YS??#!GMXxvelbGCr!2PfRN_kuJ!u-C2NuHs~YV$ zlt57I%=M3?-PlpczTvEdZAPD8z%%Q6R;VvdT5Y+*z5QOD8hDa@hHW%Z%U;_5^ltU$ zxOR>#iIorjMam+9Dpzg*F7rnsCJ+H@#ue;+m^xDw!Z(n{to2*C(;*4;88tFwe1O;t zEwO|H=Dk#f`PdCYMhLV5qBD=Fb#!@bX>EP;itqA{b<*kMkvd)&2lW;Tk@_*|H|+bP z)Ze35z3@B?gwK)0ceHNVA%r{}pkE?tx;M@yk3h(6fYwC3#{)lvqdfx0aZz}E|6D8lGiBPB0hMj#Iy}}#S zQ|o+s9@cq%E}%rD;JU4_LqCa`?-zib=A%3uA^9e^e%0}S0QBv>_WyYE7t|Ec;!q*R z6}2t;;wr`nu~yYDkPGb#{=jMZX>g6o^m`Q6+z)!x&1dd>etHxh_5#kVSX1sEMZM{* zZl8tfbGZU7&lr^o^WbAELQgHZnqx_I%8Zrk3ZmxwdHHPt^T@Z^**Dj z+|8KW?;q$0X9vqki6i%*nI-&SkZurkJsYBbd-smj7j7UiII31>;I3HtrJA0ek{{ua z7F>zTxL>lAlMiQEw9F4T$;@nw=X+#&Qdl&Ed{SavvsD3OIoOdt^eKG)&7*n*lJtb zm{==w`mh-(CAI{l*Cda^xoeg93+lAl7!6>4_l;YF4T({#)$CW3-B?0n;jun!%yDs+ zQYPQt5Iei-3&{Y|7gcZUZ4Vox6E?HL?3i=A_Y;1?aWl-S9Au{N3zck0kq8b(cA_S} zr$fO~Jq$ewnScLrximgM$*QnYt9(U^^p^--B_H-aWT?2Jcy&UW^1 z`>`WNi-F|(fNz&iwg$g@V5UNC#Brv?`vcn|Iw93B&&Ib;pqjmK0Yi1u{Q^}r4Krfk zlxm9Kmozm@%zg*cW)!+G?!JjOMhK{&qlo&IA6Vq`o`5xICo2PhbgYCu zt7M(F4&@pOJY_pOu)qfGg)X22w#&)79KHxlT(MVanSe>232~I*GIso?q)vHB9jL4^ zHfhq(LHBcpS%h@{uKTn} zw+xyDiqMc(^Ic$j(tOg^W_{z*vsR)qYQ~-ZN1xC5N{B9-=k-{DtKF^_Kv?&(a{t1A zG^f$ftP5&)Z{GrGkErF+Fo(`{z zfXm1vtJ&=bqpa_U)s1kD+J*oMRR>N9jKPS|5iP)3+I zXIf|Ta7X5BGuXR?b)M3d3Hl!BL9T|bKk65l^3?Lki>(x{e*VPZoReVXB^L7dci-4Z zw5t5;PuK)#&7tYB2#O9mCwwIxH8o00Mqhx;W&Vdd`wY{xhUPDz00s~L8|5AkMcm9W zN>eyq+d^>Bo?o-=sV-wl`xzwqE%`9;;&nHB@@hH^_Lz(6=t8ZjE)NzAlhC?I^U%DV z1@6)BJ3B(|bMS={oC)nO`r&8&a3GZ9l>uUX?) zQa}r-h>(r{KO(R*VUdS6nqQSRG;|UPBqlE`&9VESfp&?%EZkMFA6)AtirtO23xr>! z#a6|=|0wLWGZG;xKrK1T<9`sW+v;~Z*v84QTp`kcsH$x0xZLji=hELiSuGmJtGE43 z0vOhstHKUMrJvV72)%60O1|>f#FR*=PNR)jkrBxXRy(}> z%Z9oFq>iPB$tJdZP08we4QE-S*q(YLi3rK}UUIhm5|77nfHj8aREEr@hBBbfiGyh0 z2aJ@97w-;LmhjGn=8dqcLCPln zj$(k;+&bFNi-~zJ_k9@#piy6{+NPq`o6Bsd{V%TME`Srj%@V zTm9qq(;_c}zVAb0zx3Q%Xd%06OoGXLVviSXeIDA%Q820Mw{beNq-_tG?YZ{Q`*``2 z^Vi*@XqjHdAE2xon6=h#a3yC>x0LHl=P z$38P=i$TNb>TY#miol_K<>(eY=I|aFu2BcF$PY*^ZVldWcEaJZ)m+LER8gLoC=`rO z5OAO%vlwbWsrMHRTvsMuGL#gSm-|$%^&LfHqztd1W$zEMsITqmj)B4)dEw951hQ%F zI{SHcYXgq`Y+(~*SHDxdcu8p52I&YIi@A(!oCF`Aq5n&#!-Z=$v=DX6ZDXRRp-0VN zrFV0$5Jn3$cAoI(P2csu?Z~+$`H13PrI#ubh9f;I2C}WiLwg^>Yx-3@S*~rUVYs7a z4_a$(-m#9?9;yo>6FwS=Cvm|18RG*Kq>Cl9;a8*8!{<<7W`;p@7vG?Dw8D)pwU%Ox z%&VA=nUCFdA({&9bE7{voSuNR&7<kX{Kal2h%%QYRX1c4r1C_N0bB)CLuI!dlS3e=NlYAa}{&7-V}fCb{79r`YY8ib z<$Ld2mkd|Ar#mzF_c4PAhNhC|wy<^atKPhCVMnqhxn0wz=%<_(-I3RXVPwvrIhDe% zmo4KHJ$_fYa*^=ez%{>C!TLcpBb-eV*9e%a+$f~MVbywBC`cr2yy#%`=`Eq_2sU)( znBylkJY;UbBW3wsmY-6vqXJg`Q8l!@{h|G4!wO&vbqi)};o@;z==eEe_yv!5<^mnq0l%L06@-tySY&ZK{&Jj}bNewN&8W@QAkJac(L^ubu$sZ&J9nyj~J$icF44RPbZvtKMP(e(6|X563oWMuPP!7 zgTwMvmXd~EQ>^rCtFHv}bJLJA<}3VDl{b+|Gc#OH(UT+zeD`6#0Y)ZjQyWD*Scsr+ zytrvvu{PA!lbwCj@xJH_p86k`)=?WF9-G`b^NcKm@SPnCc-h~_XW#~nl_@l$>X>(i zCN&K$HHxwUZEv?zr^L(s0aPXk^f+%%6==|H@?}KQi06aZUpZ22_kr9#bqV#=PXoE* zhPF{p0D)Nkr(cDED>rSeS28_pKPDOUM4S_SLv&1mukKCdGM`?o;ln@T+X8}?GmqBg zF!L_75c)xC3*}WsT;fHX-B!IsTNFEDGn zl)`wr+Gy_s*?3vC#%n0+Y3`3ZVyk2~Hnip%w z;biRTTzOf@*GE$AEEx~4u2oZJM2B0!@#@9kQ}%F+k>6;;2St zJdoS0>DTmh>bUxV9AHt|nkfiIF5b0L={6fHQCgOE7R?$c2R~Rzk|7VsPx;io&Z@zL zOpZ|U328~>-yKzJL&2e53dJA#K%p>dJESFKxPBS99iJ-nmXr;{0K^cVRl1ayxRB6(b}sj%eUlZYP^gEP69!p@trvUL zn$LEn_`Y6_YUiKCHB}kdz{2bX1qO6?4xf_Ry*j)CC9U;L@qQ-E0hA!~Y zZE&C+W$p=Pr&tJ;@CBxN4*Ezk^6-j2vUG9q=P-)Y72|1u2&HKyC&W$fHJcVlvbPjkB<` zq1VPXXy^}35~J8Bh1wcu{g4XmggP}gnaRuC{bw%&ebH1H1ES7ORLiXjb00`Rgl$t) zoB~dk^d0}P(_5~bapFMFL$3rEUiD+BH_yx(39O^^mR%!D|DUJbH_HTD%1MJn4TN=PNs62Je-&kcNFv>EcVEHrY_RpD zZzz7F+ie(qfWiL@XcU+0$xKO-Ld=^jt$-=Wi<>d+gs26bh@8wkYX7b+Te|e@mk^=* zR;f9#7Z2Vr0sD4ux702t-PYoT>jc&7t&`5v4mky{FZK_Z3+1gN@CKlz(BqkV(z^Pr z!4n_^Tw0TIQLo}n2@##yYB0Y8z>1(l0B4{B3Hq!l7j|(9IC z=5@bWYS$%QL59u!O=n8fVc@O%t!Y~em~&tB4_I%m%YKPtd;;cJ<3{z$oV!+kYUxF{ z1B9x)qiEtOSV*cwz_|csp`EY&IvftQcbb^)(r_2KBhN!a_*Q5 zsAMa-&6LDB)hto5cAR7g(z1K3VNrKP-NC)CSoIlini}fy=$|h`<;q_yx9#86b8?qg ztaSlt`n~DQI>FV|^?{9l`|R}b{P<*u^JbXS-86s!76?on)7+MYXjEr(yKD7AOE0*c zFn5004ggkj)DM|4X?(l>GMRSe1&8)Z)BerC69_NnE)e}KXV9nV*AgudUvX2WAvt#rI!C+(-XxTj0H=-ZR%dhyJ;rw;hqUj+XZBz6f9fYXrd* zqz@L(TIDa@?_BeUr5D-`q0V(>1g^5wh%s^M)bo=vMkEw73oja}XyP*fJxo*=#9T0E z!JBW#+b&55f%qFs^%(_mvZP%Qb3q4yPJKpvp&i(JOzr;NZGJwiKl^rX$Gz8$i`X*< z+&=Mu&YrEeAv|q1@REJnn3;kP=Kbs13IPZw!F#f#cdB3aMAMouqsQN+m;*pb$%l;$ z~X2ndv;@!0yD^618RhO5A8x~+_dbg>~rANpq`+TKh4-m+1-k+-hz zQ}31QyYj4+vx{^y0Nzb=-affe)Zx;cyVlLM@DkfSnwIhqEGDTS;LpWl$0k+KXDGz} z^y|SGWwQF-rUtq%t_Ddu94-z2w%SHvTon&n+5>SDbO4~VUh6ye=r{1d&P~>)H{-z1 zUw(wYU41t8?%Ec0UxT{^`A!cZ>i*t3L06`0YibJKdjp{Pu9y4XJP;soP&iXh?*5N; zZ<>B_9fYS|d1W61k6CP%TXkr+E8=2Mj3}Dq7&Xn|Fm;q8fv&O8^&9ib$__+mmPBI6 zQ?D$l0PvHQHUwNfb>c*MLZ1O~6?6a~qFtSP^*?mix}SfJ_gF?~nhT4cdjOB!d^zfC zV{`6EUQSBziy@}i{k`?(t>YF0=GZgEE?Adm$uD4zUA(DI9lVdM*|}`v6!7tLJhUq7q?n zmk@&PMK8*_q%Xb^>bi__W&-8}+)?Z<-DY?FP~PVnf6}drhxIF7x5fM`>v%l)!aLPq zOtaRCd!?j_yW?X~bnNMua~T*z8I(iB_fxudX0W=dQyXZhbF!EOL?SVZ5U&C7-)I{e zqCXW~I<9Yg3`$;FMbN$U8+FP}`**ClxS{r-wLe}2{O`jzaNA`kVcm)!eJ?~Q>ce{4 zkgA5S2f$d=4FcwT^2``{>z?U#;i8s9Rty5>nAs_u+RZt4uRV)O)|t;?+ku(AaM4=; zUboonhN8lYPK$>q8jUWXWLoK8WhHLM>Jrctuf8RT&zx5l zZvP_+JfAjj^aNo2G@Ko`2!Kc`x5cT|? zsn#0kr{Mh$P|=CE{*q6U7?)>yUGp>Ae{EgxmU_~T>hbsW4_Px%LN;Xv04uW@3ZT3+ zeey-&v#GTL#l^*nu-jh-(A!%^jDLjMC$2!$S{Xwl(J2ZOLqn*ETi=qTfLQz!L8Fj@ zHNq7|lP8=LAB&QcRu^;tAfheZ`wbtsd+kq8xSUPa{)j=ST=@%1Zod+@Uw$%v`{_#) zMpz$1Az*Y56VvTRgb;PF7p_m?Dl|Yexjl0BzX9;+lLcvby*t+C9(q^B^2m(q*p$3j zwj01j02(Yb>!(0@z1ZQ1@B zUGwZI*C^-|yv~E)2BDqR{qJiorD7ya%H2d{cIl!Y89dcW8)lqdl_p+9OrkR)W5(oy z`x!h-SJWsVu0A+AnEeusVTJzXtEb+lo%0nK* zBOs#)8W@Zuok!pE?H}ENCggE%(+$DOud1s$ea|`f%kA6eJNJ7Xz;T@j%Q9n=6tP!C zaU4CbYF)Bx-A{VSu%h#TW|!T@XjIo;%yiQ7Qr}2h%&RE#)RF_0CElt)AaKcaX(E?g zh^(wDb`BmfX7q{r9Y1P|obJ)LZb#eMxBVS{`STz1Z{@R?d*2PLtq$;E{odpSa4|jH zG}5KHy*m<>I`OD=8|*g0PAuC>*8y{&ZMMw|!=BzZCjaSr*Lj@%bj|YMD?t&SaM`V} zve^4mpU>wsvLYn}0s*VC#JgCPe>~@a$TKT~>-Y59f77NY;KHIKQ{2kv6l0lQtR&*jI`nhl2$e&D{R-rX>E*a|Mf!rK2G-*C$|zXGm_f0U($NM9*~+$V};h=>h5 zsj5p)9@+Iu-q^pmvo+Gp(GT|VQT-n{dUzl8yWeBq_ARuvbWx{9;v0}9`*n7)jcI2x zJi<*^rbwX^Q{u4{G&#?du5`D1o2tO;;?bhvPw(%KU{3>8wc*8;#RUTLT<@*V@bJiN zlmEES_w5%#p|lrLnqT_BkcNXhR}E|CrS<0n7kG`>ic--&Ru!_$7vjf`%v#OzRY zx*oFnMBG9@>EU?9T6|@exeH;2%dY?6FP`0065>BIWd(b7tF z@RjEU=HVihM&bVUY_p}}LGSfx6b=8Jg4?6UvxUyeT-laQZjqZO1un zG1(3WNf4!@2uw%HnH^6%L(V-_PlaR*dyQ@WdiXQ@CXagdz$Vv1^pg}-!SFJ%DuO)vAF#G=|e7lnzt z4~)Q8A^K$gkNSP&mx`*F*8O^Jq4zf9VGZEahn$1x;)ZN}q_U*oU-FNf49ES|N%2@= zVV>n_c~oe99OV3HUS)G;mNoN*pM_2)Grm~XLRIq?&KCFgRup>|Ef0pDPUc(?^ZkE% zXvZ{c3I!=r!BsxIBKcV@4foTHU*XZ>StByA-U6^~?unNc?GaJUaJo)WNZ(>Y#PQgw z>60T62v`jVcRG#<$+p^4F3Ykt;r(+9z0-|{{{_C}vilTU%)9<#?~U>sVVu=gGWxZKVIJu zo!oA#I}1Z^i-2yf#^2s>1$QPsp?8-?hB#knB#f2N<+Q-7*q(nLv3SpZmm~F)CIZu^ zXEcl*x&R~q{M;tTcLSC-5U zpz5Ofoz{Ay(Ikhc2zz(BlR?2@8PnPW~65QH*s*s-Mha_t>xy@PN}kqEb{1=T)Ux{cAXFBW(a}1^2zeJu-m)1tyQr>b{p)KBM%;UQ9>?DAog?7 zm|N(bXgoYiEN4BL-_AkM%_8zX%3fpXXC6FF(Wq^Cgb|8NK)3_A2N>GJIHyJAdsVgT zR*`~9G!O__pB~)#Q-OzEbZZ4RD*C1%dyLVO85tgftywBM47f(&&jqF`Tu;}NV+WfI zrd*IIg48-Wxxfy!w7mMIS2mZHmSzvs##_b6Lg2o5ldaXk@GV{SEi3z0Ze~mNjTrs9 zh|cF+Q);g$d@e|}CFVCR5zo8HZdwzVK0V{)*t{m9?Rd zl92;oe(3{O+jhpyiWcKyQPF{*Z>Y$NSZvL|`i6a}jQTDsE6W@ZIr&4-1zea_xe;`i zA`KF&Igtls0ap>T0`zE=5aD;WWfiTc2_3rt87MFHjTGD5EV1kSP;ck$g55xs@mOz1 z2juNqwQALw^wY~$p(pZ-qR~^2d}ii-+GO8#tkE8BdeiPM4*%u&9A-{(Wfi11rLIa8 z(cNlUp;kMx{HkY+e^%FqpY5(~MUnS;5xm4K zPJ`&)3X}{HkVeoZU`KT@JS!E0`io}Ws94Jp?o7paE;xj;u;YGmOGT0QF%cFJyZ;8q zU#X%^&_+cX5t{n658Wx>t~>fB@Fu{z!toP7h%}dd9?^R~X|gAsYPQcek@n()?>Icb z5~g3B<0!4|Tr`$mo zTpCZ=qOjI7*5Y&p;l!V){iG?o3U6q{K$#5o#G2Lo7@LmXwKpMl)Ucf z{QFi!o~jP6J2UyVXOQDj7dy+jLx?RB@&v$=o-8X6+u<%Psdo}n%!A_Zd%Pb-7>{!| zgIjVyJHD5cMSxe;t=|qz^Ot!4$|z3?OedWSYT<1)^0TIlE9z=$YTQ(j>@<#y2Az;X z$r2f$NIsB{_VJ*&WSG6Cem}6V%ngDF(yKDzdKyTL|zTaaH_Ncbmp zp+9uja7i%OxwCf;R7)lHV@%gbul zzkk8P0;nG4B3x_uf|%Uh^2>*=x$cve$ZelBF*zFL+Ez7VTHAC;OFM&%YHq7dcGRdW zoSG*?vLzE06(LGYrMDZj)k2y;KLt%W`&@leKDBXJ#3sZ)5mP2dRM?B?)`6brd&xu^`~Ba@;#BSoMeaa#G%x}o zQz2pr5u+RfJtWAUY;xalo3_`_7l-mv-$;+Kr>V+UiN$P;14bj{p!^xJpv$KCs|~b4 r)j9%t2sk9jp3GKx=VBCwN+ - - - - - diff --git a/antora-ui-camel/src/img/team.svg b/antora-ui-camel/src/img/team.svg deleted file mode 100644 index f9e8719895f..00000000000 --- a/antora-ui-camel/src/img/team.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/static/img/camel-gears.svg b/static/img/camel-gears.svg deleted file mode 100644 index c4858bc111c..00000000000 --- a/static/img/camel-gears.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/components.svg b/static/img/components.svg deleted file mode 100644 index 9b2e008c955..00000000000 --- a/static/img/components.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/data-formats.svg b/static/img/data-formats.svg deleted file mode 100644 index 34216edb9f8..00000000000 --- a/static/img/data-formats.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/patterns.svg b/static/img/patterns.svg deleted file mode 100644 index 5dcb85b6c39..00000000000 --- a/static/img/patterns.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/runtimes.svg b/static/img/runtimes.svg deleted file mode 100644 index 655c4168356..00000000000 --- a/static/img/runtimes.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From f50e1b32b9360e9fce5260db9118e769f8a8638e Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Sat, 5 Sep 2026 13:39:52 -0400 Subject: [PATCH 147/209] chore(antora-ui): regenerate the bundle for the CTA and cleanup changes Co-Authored-By: Claude Fable 5.1 --- ...{site-697c9df5c1.css => site-5bf9477644.css} | 2 +- antora-ui-camel/public/_/data/rev-manifest.json | 13 +------------ antora-ui-camel/public/_/helpers/asset.js | 13 +------------ .../public/_/img/articles-88ac404d18.svg | 1 - .../public/_/img/asf_logo_wide-3982e7e19b.svg | 1 - .../public/_/img/blog-4c7fa4cb60.svg | 1 - .../public/_/img/contributing-107909992d.svg | 1 - .../public/_/img/documentation-abb1b7f8b1.svg | 1 - .../public/_/img/download-63cdd75074.svg | 1 - .../public/_/img/home-934e2b15ea.svg | 1 - .../public/_/img/home-o-97a33fc02f.svg | 1 - .../_/img/logo-camel-medium-372cf8688f.png | Bin 16120 -> 0 bytes .../public/_/img/support-7219bb2f58.svg | 1 - .../public/_/img/team-899f1050c2.svg | 1 - .../public/_/partials/head-styles.hbs | 2 +- antora-ui-camel/public/_/rev-manifest | 13 +------------ 16 files changed, 5 insertions(+), 48 deletions(-) rename antora-ui-camel/public/_/css/{site-697c9df5c1.css => site-5bf9477644.css} (50%) delete mode 100644 antora-ui-camel/public/_/img/articles-88ac404d18.svg delete mode 100644 antora-ui-camel/public/_/img/asf_logo_wide-3982e7e19b.svg delete mode 100644 antora-ui-camel/public/_/img/blog-4c7fa4cb60.svg delete mode 100644 antora-ui-camel/public/_/img/contributing-107909992d.svg delete mode 100644 antora-ui-camel/public/_/img/documentation-abb1b7f8b1.svg delete mode 100644 antora-ui-camel/public/_/img/download-63cdd75074.svg delete mode 100644 antora-ui-camel/public/_/img/home-934e2b15ea.svg delete mode 100644 antora-ui-camel/public/_/img/home-o-97a33fc02f.svg delete mode 100644 antora-ui-camel/public/_/img/logo-camel-medium-372cf8688f.png delete mode 100644 antora-ui-camel/public/_/img/support-7219bb2f58.svg delete mode 100644 antora-ui-camel/public/_/img/team-899f1050c2.svg diff --git a/antora-ui-camel/public/_/css/site-697c9df5c1.css b/antora-ui-camel/public/_/css/site-5bf9477644.css similarity index 50% rename from antora-ui-camel/public/_/css/site-697c9df5c1.css rename to antora-ui-camel/public/_/css/site-5bf9477644.css index 56f0bb2a741..0affd8a8d7b 100644 --- a/antora-ui-camel/public/_/css/site-697c9df5c1.css +++ b/antora-ui-camel/public/_/css/site-5bf9477644.css @@ -18,5 +18,5 @@ identifiers), .o and .ow (operators), .p (punctuation), .w (whitespace), .line and .cl (line wrappers), and .err (a lexer hiccup is not worth a color). .go, generic command output, is content the reader needs rather - than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#fff}a.button.dark:hover{background-color:#a84e0d;color:#fff}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}a.button.ink{background-color:#211c17;color:#fff}a.button.ink:hover{background-color:#3a332b}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;min-width:0;padding:.77778rem .88889rem;white-space:normal;word-break:break-word}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#c4bbac}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-hero-art img{width:40%}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}.advisory,.download,.security{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.page-hero-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:0;color:#211c17}.page-hero-lead{font-size:.97222rem;line-height:1.55;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.detail-lead{font-family:Archivo,sans-serif;font-weight:500;font-size:1.16667rem;line-height:1.4;color:#3a332b;margin:.88889rem 0 0;text-wrap:pretty}.section-label{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#6f675c;margin:3.11111rem 0 0;padding-bottom:.77778rem;border-bottom:1px solid #e7e0d5}.advisory-eyebrow,.blog-rail-eyebrow,.community-cta-eyebrow,.docs-feature-eyebrow,.download-cli-eyebrow,.post-eyebrow,.releases-rail-heading,.security-eyebrow,.tooling .tooling-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.advisory-eyebrow,.security-eyebrow{color:#a84e0d}.community-cta-eyebrow,.download-cli-eyebrow{color:#e0805a}.blog-rail-eyebrow,.releases-rail-heading{color:#6f675c;padding-bottom:.66667rem;border-bottom:1px solid #e7e0d5}.card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fff;border:1px solid #e7e0d5;border-radius:13px;padding:1.33333rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.card:hover,.home-card:hover,.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.card--flat{-webkit-transition:none;transition:none}.card--flat:hover{border-color:#e7e0d5;-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;transform:none}.card--lg{border-radius:16px;padding:1.77778rem}.card--dark{background:#211c17;border-color:#34302a;color:#faf7f1}.card-grid{display:grid;list-style:none;margin:0;padding:0;gap:1rem}.card-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1.2fr 1fr}@media screen and (width <= 1024px){.card-grid--3{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1fr}}@media screen and (width <= 626px){.card-grid--2,.card-grid--3,.card-grid--feature{grid-template-columns:minmax(0,1fr)}.page-hero-title{font-size:2rem}}.lts-chip{font-size:.58333rem;color:#fff;background:#a84e0d;padding:.11111rem .38889rem}.lts-chip,.severity-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;border-radius:20px}.severity-chip--low{background:#f4eee3;color:#5c554c}.severity-chip--medium{background:#fbead8;color:#a84e0d}.severity-chip--high{background:#fdf0dc;color:#8a5209}.severity-chip--critical{background:#fce9e9;color:#b02525}.blog-rail,.releases-rail{position:sticky;top:5rem}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit!important}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog-layout{display:grid;grid-template-columns:13.33333rem 1fr;gap:3.11111rem;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.blog-categories{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.44444rem}.blog-categories,.blog-category{display:-webkit-box;display:-ms-flexbox;display:flex}.blog-category{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.44444rem 0;font-size:.77778rem;font-weight:600;color:#3a332b;border-bottom:1px solid #f0e9dd;text-decoration:none}.blog-category:hover{color:#853c09}.blog-category-count{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#6f675c}.blog-rss{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem;margin-top:1.11111rem;font-size:.75rem;font-weight:700;color:#a84e0d;text-decoration:none}.blog-rss:hover{color:#853c09}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}.blog-main{min-width:0}.blog-back-link{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#6f675c;margin-bottom:.77778rem;text-decoration:none}.blog-back-link:hover{color:#853c09}.blog-posts{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:2rem}.blog-post{display:grid;grid-template-columns:5.33333rem 1fr;gap:1.55556rem;padding:1.66667rem 0;border-top:1px solid #e7e0d5}.blog-post-date{text-align:center}.blog-post-day{display:block;font-family:Archivo,sans-serif;font-weight:800;font-size:2.22222rem;line-height:1;letter-spacing:-.03em;color:#a84e0d}.blog-post-month{display:block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#6f675c;text-transform:uppercase;letter-spacing:.06em;margin-top:.33333rem}.blog-post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.tag-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-weight:600;color:#a84e0d;background:#fbead8;padding:.16667rem .5rem;border-radius:20px;text-transform:uppercase;letter-spacing:.04em;text-decoration:none}.blog-post-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.33333rem;letter-spacing:-.02em;line-height:1.2;margin:.66667rem 0 0}.blog-post-title a{color:#211c17;text-decoration:none}.blog-post-title a:hover{color:#853c09}.blog-post-summary{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}.blog-post-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.88889rem;margin-top:.77778rem;font-size:.75rem;color:#6f675c}.blog-post-continue{font-weight:700;color:#a84e0d;text-decoration:none}.blog-post-continue:hover{color:#853c09}.blog-list .pagination{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.33333rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:1.55556rem 0 0;padding:1.55556rem 0 0;border-top:1px solid #e7e0d5;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;list-style:none}.blog-list .page-item{display:contents}.blog-list .page-link{display:inline-block;padding:.44444rem .66667rem;border-radius:6px;color:#5c554c;text-decoration:none}.blog-list .page-link:hover{background:#f0e9dd}.blog-list .page-link--next{color:#a84e0d}.blog-list .page-item.active .page-link{background:#211c17;color:#faf7f1}.blog-list .page-item.active .page-link:hover{background:#211c17}.blog-list .page-item.disabled .page-link{padding:.44444rem .33333rem;color:#6f675c;cursor:default}.blog-list .page-item.disabled .page-link:hover{background:none}@media screen and (width <= 1024px){.blog-layout{grid-template-columns:minmax(0,1fr);padding:2.22222rem 1.33333rem 1.77778rem}.blog-rail{position:static}}.post{max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.post .post-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#6f675c;text-decoration:none;background-image:none}.post .post-back:hover{color:#853c09}.post .post-toc a,.post .tag-chip{background-image:none}.post .detail-lead{margin-top:.88889rem}.post-hero{max-width:45.55556rem;margin-top:1rem}.post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post .post-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:.88889rem 0 0;color:#211c17}.post-layout{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:3.11111rem;margin-top:2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.post-rail{position:sticky;top:4.66667rem;gap:1.22222rem}.post-authors,.post-rail{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.post-authors{gap:.77778rem}.post-author{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.post-avatar{width:44px;height:44px;border-radius:50%;background:#e7e0d5}.post-author-name{font-weight:700;font-size:.80556rem}.post-date{font-size:.72222rem;color:#6f675c}.post-eyebrow{color:#6f675c;padding-bottom:.55556rem}.post-share-links{gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post-adjacent,.post-share-links{display:-webkit-box;display:-ms-flexbox;display:flex}.post-adjacent{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem;border-top:1px solid #e7e0d5;font-size:.72222rem}.post-adjacent a{color:#5c554c;font-weight:600;text-decoration:none;background-image:none}.post-adjacent a:hover{color:#853c09}.post-content{max-width:42.22222rem}.blog .post-content img.featured{aspect-ratio:16/8;-o-object-fit:cover;object-fit:cover;width:100%;height:auto;border-radius:14px;display:block;margin-bottom:1.88889rem}.blog .post-content h2{font-family:Archivo,sans-serif;font-weight:700;font-size:1.55556rem;letter-spacing:-.02em;margin:2.22222rem 0 0;padding-top:0}.blog .post-content p{font-size:.94444rem;line-height:1.75;color:#3a332b}.blog .post-content p+p{margin-top:.66667rem}.blog .post-content ol,.blog .post-content ul{padding-bottom:1rem}.blog .post-content li ol,.blog .post-content li ul{padding-bottom:0}.blog .post-content blockquote{margin:1.33333rem 0 0;padding:1rem 1.22222rem;border-left:3px solid #e97826;background:#fff;border-radius:0 12px 12px 0;font-family:Archivo,sans-serif;font-weight:500;font-size:1.05556rem;line-height:1.45;color:#3a332b}.blog .post-content blockquote p{font-size:inherit;line-height:inherit}.blog .post-content img:not(.featured){width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block;cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img:not(.featured){max-width:100%;max-height:none}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post-content td{padding:.5rem}.blog .post-content th{padding:.7rem;background:#e1e1e1}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.post-related{margin-top:3.11111rem;padding-top:1.55556rem;border-top:1px solid #e7e0d5}.post .post-related-heading{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#6f675c;margin:0 0 1rem}.post-related-grid{gap:.77778rem}.post .post-related-card,.post .post-related-card:hover{border-radius:12px;padding:1rem 1.11111rem;color:#211c17;text-decoration:none;background-image:none}.post-related-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#6f675c}.post-related-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.91667rem;margin-top:.33333rem;line-height:1.3}@media screen and (width <= 1024px){.post{padding:2.22222rem 1.33333rem 1.77778rem}.post-layout{grid-template-columns:minmax(0,1fr)}.post-rail{position:static}}.blog-category.is-current{color:#a84e0d;font-weight:700}.releases{display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;padding:3.11111rem 1.77778rem 2.22222rem}.releases-content{grid-column:1}.releases-intro{max-width:40rem}.releases-lead a{color:#a84e0d}.releases-lead a:hover{color:#853c09;text-decoration:none}.releases-group{margin-top:2.66667rem}.releases-content>.releases-group:first-child{margin-top:2.22222rem}.releases-group-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:0 0 .77778rem;color:#211c17}.releases-table{width:100%;font-size:.80556rem;background:#fff;border:1px solid #e7e0d5;border-radius:12px;border-collapse:collapse;overflow:hidden}.releases-table thead tr{background:#f4eee3}.releases-table th{text-align:left;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#6f675c;padding:.61111rem .88889rem}.releases-col-version{width:7.77778rem}.releases-col-date{width:8.33333rem}.releases-table tbody tr{border-top:1px solid #f0e9dd}.releases-table tbody tr:first-child{border-top:0}.releases-table td{padding:.66667rem .88889rem}.releases-version{font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;font-size:.77778rem;color:#a84e0d}.releases-version:hover{color:#853c09;text-decoration:none}.releases-table .lts-chip{margin-left:.44444rem}.releases-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#5c554c}.releases-desc{color:#5c554c;line-height:1.5}.releases-rail{grid-column:2}.releases-rail-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.55556rem}.releases-rail-link{display:block;padding:.33333rem 0 .33333rem .66667rem;font-size:.75rem;color:#5c554c;border-left:2px solid #e7e0d5;text-decoration:none}.releases-rail-link:focus-visible,.releases-rail-link:hover{border-left-color:#d9ccb8;color:#211c17}.advisory-back{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c;text-decoration:none}.advisory-back:hover{color:#853c09}.advisory-layout{display:grid;grid-template-columns:minmax(0,1fr) 17.77778rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;margin-top:1rem}.advisory-article{max-width:42.22222rem}.advisory-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.33333rem;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0;color:#211c17}.advisory-section{margin-top:2rem}.advisory-section-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#6f675c;margin:0 0 .55556rem}.advisory-section-body{font-size:.91667rem;line-height:1.7;color:#3a332b;margin:0;text-wrap:pretty}.advisory-section-body a{color:#a84e0d}.advisory-section-body a:hover{color:#853c09}.advisory-section-body pre{background:#211c17;border-radius:.55556rem;color:#f0e9df;display:block;font-size:.75rem;line-height:1.7;overflow-x:auto;padding:1rem 1.11111rem}.advisory-section-body pre code{color:inherit}.advisory-references{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.44444rem;font-size:.83333rem}.advisory-reference{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;color:#a84e0d;text-decoration:none}.advisory-reference:hover{color:#853c09;text-decoration:none}.advisory-facts{position:sticky;top:5rem;background:#fff;border:1px solid #e7e0d5;border-radius:14px;padding:1.33333rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:1rem}.advisory-facts-label{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#6f675c;letter-spacing:.06em;text-transform:uppercase}.advisory-severity-chip{margin-top:.44444rem;font-size:.66667rem;padding:.22222rem .55556rem}.advisory-facts-value{margin-top:.33333rem;font-size:.80556rem;line-height:1.6;color:#3a332b}.advisory-facts-value--mono{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.77778rem;line-height:1.7;color:#211c17;font-weight:600}a.advisory-facts-cta{display:block;margin:.22222rem 0 0;padding:.61111rem 1rem;font-size:.77778rem;text-align:center}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 1024px){.releases{grid-template-columns:minmax(0,1fr)}.releases-content,.releases-rail{grid-column:1}.releases-rail{position:static}.advisory-layout{grid-template-columns:minmax(0,1fr)}.advisory-facts{position:static}}@media screen and (width <= 626px){.releases-table{font-size:.72222rem}.release aside{width:100%;margin:0 auto}}.misc p:has(img){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.community-hero,.docs-hero{max-width:42.22222rem}.docs-features{margin-top:2.22222rem}.docs-feature--dark .docs-feature-eyebrow{color:#e0805a}.docs-feature--light .docs-feature-eyebrow{color:#a84e0d}.docs-feature-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.66667rem;letter-spacing:-.02em;margin:.66667rem 0 0}.docs-feature--light .docs-feature-title{color:#211c17}.docs-feature-desc{font-size:.86111rem;line-height:1.6;margin:.66667rem 0 1.44444rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-feature--dark .docs-feature-desc{color:#c4bbac}.docs-feature--light .docs-feature-desc{color:#5c554c}.docs-feature-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.docs-feature-actions .button{margin:0;padding:.61111rem 1.11111rem;font-size:.80556rem}.docs-projects{margin-top:1.11111rem}.docs-project-card-head{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.docs-project-card-icon{width:1.66667rem;height:1.66667rem;display:block;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.docs-project-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0;color:#211c17}.docs-project-card-desc{font-size:.77778rem;line-height:1.55;color:#5c554c;margin:.66667rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-project-card-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.77778rem;font-size:.75rem;font-weight:700}.docs-project-card-link{color:#a84e0d}.docs-project-card-link:hover{color:#853c09;text-decoration:none}.docs-project-card-link--muted{color:#6f675c}.docs-feature-links{margin-top:1rem}.docs-feature--dark .docs-project-card-link{color:#f2a05a}.docs-feature--dark .docs-project-card-link--muted{color:#c4bbac}.docs-feature--dark .docs-project-card-link:hover{color:#faf7f1}.community-grid{margin-top:2.22222rem}.community-card-tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:2.11111rem;height:2.11111rem;border-radius:9px;background:#fbead8;font-family:Archivo,sans-serif;font-weight:800;font-size:.83333rem;color:#a84e0d}.community-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.05556rem;margin:.88889rem 0 0;color:#211c17}.community-card-body{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:.5rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.community-card-link{color:#a84e0d;font-weight:700;font-size:.75rem}.community-card-link:hover{color:#853c09;text-decoration:none}.community-cta{grid-column:span 2}.community-cta-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:.66667rem 0 0}.community-cta-body{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 1.11111rem;-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:31.11111rem}.community-cta-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.community-cta-actions .button{margin:0;padding:.55556rem 1rem;font-size:.77778rem}@media screen and (width <= 1024px){.community,.docs{padding:1.77778rem 1.11111rem 2.66667rem}}@media screen and (width <= 626px){.community-cta{grid-column:span 1}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.tooling{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.tooling h1{font-weight:800;line-height:1.05;margin:0}.tooling .tooling-lead{max-width:42.22222rem;margin:.77778rem 0 0}.tooling-section{margin-top:2.66667rem}.tooling-cli-section{margin-top:2.88889rem}.tooling .tooling-section h2{font-weight:800;font-size:1.55556rem;letter-spacing:-.02em;margin:0;padding:0}.tooling .tooling-section-intro{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;max-width:42.22222rem;text-wrap:pretty}.tooling-cli-section .tooling-section-intro{margin-bottom:1.11111rem}.tooling code{padding:.11111rem .33333rem;border-radius:4px}.tooling .tooling-section-intro code,.tooling code{font-size:.77778rem}.tooling-cli{background:#211c17;border:1px solid #34302a;border-radius:12px;overflow:hidden}.tooling-cli-row{display:grid;grid-template-columns:9.44444rem minmax(0,1fr);gap:1.11111rem;padding:.72222rem 1.11111rem;border-top:1px solid #34302a;font-size:.77778rem}.tooling .tooling-cli-cmd{color:#f2a05a;font-weight:600;font-size:.75rem}.tooling-cli-desc{color:#c4bbac;line-height:1.5}.tooling-split{display:grid;grid-template-columns:1fr 1fr;gap:1.55556rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.tooling-media{aspect-ratio:16/10;border-radius:12px;background:#211c17;border:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}.tooling-media img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.tooling .tooling-eyebrow{color:#a84e0d;margin:0}.tooling-mcp .tooling-eyebrow+h2{margin-top:.55556rem}.tooling-ai-grid{display:grid;grid-template-columns:1fr 1fr;gap:.77778rem;margin-top:1.22222rem}.tooling-ai-card{border:1px solid #e7e0d5;border-radius:10px;padding:.88889rem 1rem}.tooling .tooling-ai-name{font-family:Archivo,sans-serif;font-weight:700;font-size:.88889rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-ai-name:hover{color:#853c09;text-decoration:underline}.tooling .tooling-ai-desc{font-size:.75rem;line-height:1.5;color:#5c554c;margin:.33333rem 0 0}.tooling-rows{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:1rem;border-top:1px solid #e7e0d5}.tooling-row{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:1.33333rem;padding:.88889rem 0;border-bottom:1px solid #f0e9dd}.tooling .tooling-row-name{font-weight:700;font-size:.83333rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-row-name:hover{color:#853c09;text-decoration:underline}.tooling-row-name--mono{font-family:JetBrains Mono,ui-monospace,monospace}.tooling .tooling-row-desc{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:0;text-wrap:pretty}.tooling .tooling-footnote{font-size:.80556rem;line-height:1.6;color:#6f675c;margin:2.66667rem 0 0;padding-top:1.33333rem;border-top:1px solid #e7e0d5}.tooling .toc.sidebar .toc-menu{top:5rem}@media screen and (width <= 1024px){.tooling{padding:1.77778rem 1.11111rem 2.66667rem}.tooling,.tooling-row,.tooling-split{grid-template-columns:minmax(0,1fr)}.tooling-row{gap:.33333rem}}@media screen and (width <= 626px){.tooling-cli-row{gap:.33333rem}.tooling-ai-grid,.tooling-cli-row{grid-template-columns:minmax(0,1fr)}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download-hero{display:grid;grid-template-columns:1fr 21.11111rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.download-intro p{font-size:.91667rem;line-height:1.6;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.download-intro p:first-of-type{margin-top:.88889rem}.download-intro strong{color:#211c17}.download-card a,.download-intro a{color:#a84e0d}.download-card a:hover,.download-intro a:hover{color:#853c09}.download-cli-card{background:#211c17;border-radius:16px;padding:1.55556rem;color:#faf7f1}.download-cli-desc{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 .88889rem}.download-cli-bar{display:-webkit-box;display:-ms-flexbox;display:flex;background:#1c1813;border:1px solid #34302a;border-radius:8px;overflow:hidden}.download-cli-command{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;color:#f0e9df;padding:.66667rem .77778rem;white-space:normal;word-break:break-word}.download-cli-prompt{color:#e0805a}.download-cli-copy{border:0;border-left:1px solid #34302a;background:#2b2620;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .77778rem;cursor:pointer}.download-cli-copy:hover{background:#3a342c}.download-cli-guide{display:inline-block;margin-top:.77778rem;font-size:.75rem;font-weight:700;color:#f2a05a}.download-cli-guide:hover{color:#faf7f1;text-decoration:none}.download-row{display:grid;grid-template-columns:12.22222rem 7.22222rem minmax(11.11111rem,1fr) minmax(0,auto);gap:1.33333rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1.22222rem 0;border-bottom:1px solid #f0e9dd}.download-row-project{font-family:Archivo,sans-serif;font-weight:700;font-size:.94444rem;color:#211c17}.download-row-date{font-size:.72222rem;color:#6f675c;margin-top:.16667rem}.download-row-version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem}.download-row-version-num{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:600;color:#211c17}.download-row-note{font-size:.77778rem;color:#5c554c}.download-row-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.77778rem;font-size:.75rem;font-weight:700}.download-row-artifact,.download-row-links{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.download-row-artifact{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;gap:.33333rem;white-space:nowrap}.download-row-link{color:#6f675c}.download-row-link:hover{color:#853c09;text-decoration:none}.download-row-link--primary{color:#a84e0d}.download-row-link--primary:hover{color:#853c09}.download-row-sub{font-size:.75rem;font-weight:700;color:#6f675c}.download-row-sub::before{content:"("}.download-row-sub::after{content:")"}.download-row-sublink{color:inherit}.download-row-sublink:hover{color:#e97826;text-decoration:none}.download-row-sublink+.download-row-sublink::before{content:" \00b7 ";color:#6f675c}.download-cards{margin-top:2.66667rem}.download-card{padding:1.44444rem}.download-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.download-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}@media screen and (width <= 1024px){.download-cards,.download-hero{grid-template-columns:1fr}.download{padding:2.22222rem 1.33333rem 2.66667rem}.download-row{grid-template-columns:1fr;gap:.44444rem}.download-row-links{margin-top:.22222rem}}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.post .post-share-link{font-family:inherit;font-size:.72222rem;font-weight:700;color:#5c554c;background:none;border:1px solid #e7e0d5;padding:.33333rem .66667rem;border-radius:6px;text-decoration:none;cursor:pointer}.post .post-share-link:hover{border-color:#d9ccb8;color:#5c554c}.security-hero{max-width:42.22222rem}.security-grid{margin-top:2.22222rem}.security-card--feature{grid-column:1/-1}.security-card--feature h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:.55556rem 0 0}.security-card--feature p{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.66667rem 0 0;max-width:45.55556rem}.security-card{padding:1.44444rem}.security-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.security-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0}.security-band a,.security-card--feature a,.security-card a{color:#a84e0d}.security-band a:hover,.security-card--feature a:hover,.security-card a:hover{color:#853c09}.security-band{grid-column:1/-1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.33333rem;background:#211c17;border-radius:16px;padding:1.77778rem;color:#faf7f1}.security-band-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:16.66667rem}.security-band-copy h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:0}.security-band-copy p{font-size:.83333rem;line-height:1.6;color:#c4bbac;margin:.55556rem 0 0;max-width:35.55556rem}.security-band .button{white-space:nowrap}.security-advisories{width:100%;font-size:.77778rem;border-collapse:collapse}.security-advisories thead tr{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#6f675c;text-transform:uppercase;letter-spacing:.06em;text-align:left}.security-advisories thead th{padding:.77778rem .66667rem .55556rem}.security-advisories thead th:first-child{padding-left:0}.security-advisories thead th:last-child{padding-right:0}.security-advisories tbody th{text-align:left;padding:1.44444rem 0 .44444rem;font-family:Archivo,sans-serif;font-weight:800;font-size:1.22222rem;letter-spacing:-.02em;color:#211c17}.security-advisories .security-row{border-top:1px solid #f0e9dd}.security-advisories td{padding:.66667rem;color:#5c554c}.security-advisories td:first-child{padding-left:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#3a332b}.security-advisories td:first-child a{font-weight:600;color:#a84e0d}.security-advisories td:first-child a:hover{color:#853c09;text-decoration:none}.security-advisories td:last-child{padding-right:0;line-height:1.5}.security-severity{font-size:.63889rem;padding:.16667rem .44444rem}.security .table-wrapper{overflow-x:auto}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}@media screen and (width <= 1024px){.security-grid{grid-template-columns:1fr}}@media screen and (width <= 626px){.security-band{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}} + than chrome, so it stays at the base color too. */.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cs{color:#8f867a;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .nd{color:#8f867a;font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#e97826;font-weight:600}.chroma .kt,.chroma .nc,.chroma .ne{color:#d9b6f0;font-weight:600}.chroma .fm,.chroma .gh,.chroma .gu,.chroma .nf{color:#faf7f1;font-weight:600}.chroma .dl,.chroma .s,.chroma .s1,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .si,.chroma .sx{color:#f2a05a}.chroma .il,.chroma .kc,.chroma .l,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .no,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#e8c87a}.chroma .nn,.chroma .nt{color:#c4bbac}.chroma .na,.chroma .nl,.chroma .py{color:#e8c87a}.chroma .bp,.chroma .nb{color:#8ec5e6}.chroma code.language-json .nt,.chroma code.language-yaml .nt{color:#e8c87a}.chroma code.language-yaml .l{color:#f2a05a}.chroma .sr{color:#9fd3b0}.chroma .ni,.chroma .se,.chroma .ss{color:#f2a05a}.chroma .gp{color:#e0805a}.chroma .gd{background:rgba(224,82,58,.25)}.chroma .gi{background:rgba(159,211,176,.25)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}a.button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:none;border-radius:.44444rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:.83333rem;font-weight:700;gap:.44444rem;line-height:1;margin:.5rem;padding:.72222rem 1.33333rem;white-space:nowrap}a.button.dark{background-color:#e97826;color:#211c17}a.button.dark:hover{background-color:#f39421;color:#211c17}a.button.light,a.button.light:hover{background-color:#fff;border:1px solid #e7e0d5;color:#211c17}a.button.on-dark,a.button.on-dark:hover{background-color:transparent;border:1px solid #4a443c;color:#faf7f1}a.button.ink{background-color:#211c17;color:#fff}a.button.ink:hover{background-color:#3a332b}.home{color:#3a332b;padding-bottom:2.66667rem}.home a{background-image:none;text-decoration:none}.home-section{margin:0 auto;max-width:66.66667rem;padding:3.66667rem 1.77778rem 1.11111rem}.home-section-head{margin-bottom:2.44444rem;text-align:center}.home-eyebrow{color:#a84e0d;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;letter-spacing:.08em;margin:0;text-transform:uppercase}.home-section-head h2{font-family:Archivo,sans-serif;font-size:2.11111rem;font-weight:800;letter-spacing:-.025em;line-height:1.15;margin:.66667rem 0 0}.home-section-sub{color:#5c554c;font-size:.88889rem;margin:.33333rem 0 0}.home-grid{display:grid;list-style:none;margin:0;padding:0}.home-card{background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.home-hero{display:grid;gap:3.11111rem;grid-template-columns:1.05fr .95fr;margin:0 auto;max-width:66.66667rem;padding:3.55556rem 1.77778rem 3.11111rem}.home-hero,.home-hero-badge{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.home-hero-badge{background:#fbead8;border-radius:1.11111rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:500;gap:.44444rem;letter-spacing:.02em;margin:0;padding:.33333rem .66667rem}.home-hero h1{color:#211c17;font-family:Archivo,sans-serif;font-size:3.33333rem;font-weight:800;letter-spacing:-.03em;line-height:1.02;margin:1.11111rem 0 0}.home-hero-tagline{color:#3a332b;font-family:Archivo,sans-serif;font-size:1.38889rem;font-weight:600;line-height:1.2;margin:.77778rem 0 0}.home-hero-lead{color:#5c554c;font-size:.97222rem;line-height:1.55;margin:1.11111rem 0 0;max-width:28.88889rem;text-wrap:pretty}.home-hero-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:1.66667rem 0 0}.home-hero-actions .button{font-size:.86111rem;margin:0;padding:.77778rem 1.44444rem}.home-hero-art{-webkit-box-align:center;-ms-flex-align:center;align-items:center;aspect-ratio:1/.86;background:radial-gradient(circle at 50% 50%,#f4eee3 0,#faf7f1 70%);border:1px solid #e7e0d5;border-radius:.88889rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.home-hero-art img{display:block;-webkit-filter:drop-shadow(0 30px 50px rgba(233,120,38,.3));filter:drop-shadow(0 30px 50px rgb(233 120 38/30%));height:auto;width:62%}.home-cli{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background:#211c17;border:1px solid #34302a;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.44444rem 0 0;max-width:28.88889rem;overflow:hidden}.home-cli-command{color:#f0e9df;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;min-width:0;padding:.77778rem .88889rem;white-space:normal;word-break:break-word}.home-cli-prompt{color:#e0805a}.home-cli-copy{background:#2b2620;border:0;border-left:1px solid #34302a;color:#f0e9df;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .88889rem}.home-cli-copy:hover{background:#3a342c}.home-stats{background:#f4eee3;border-bottom:1px solid #e7e0d5;border-top:1px solid #e7e0d5}.home-stats-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.66667rem 2.66667rem;margin:0 auto;max-width:66.66667rem;padding:1.66667rem 1.77778rem}.home-stats-label{color:#3a332b;font-family:Archivo,sans-serif;font-size:.83333rem;font-weight:700;margin:0 auto 0 0}.home-stats-list{display:-webkit-box;display:-ms-flexbox;display:flex;gap:2.44444rem;list-style:none;margin:0;padding:0}.home-stat-num{color:#a84e0d;display:block;font-family:Archivo,sans-serif;font-size:1.44444rem;font-weight:800;letter-spacing:-.02em;line-height:1}.home-stat-label{color:#5c554c;display:block;font-size:.66667rem;font-weight:600;letter-spacing:.06em;margin-top:.27778rem;text-transform:uppercase}.home-grid--three{gap:1.22222rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-started-card{padding:1.55556rem}.home-started-head{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem}.home-started-head h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1.11111rem;font-weight:700;margin:0}.home-badge{background:#a84e0d;border-radius:1.11111rem;color:#fff;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.58333rem;font-weight:600;letter-spacing:.04em;padding:.16667rem .44444rem;text-transform:uppercase;white-space:nowrap}.home-started-desc{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.83333rem;line-height:1.55;margin:.66667rem 0 1.11111rem;text-wrap:pretty}.home-started-code{background:#211c17;border-radius:.5rem;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;line-height:1.6;margin:0 0 1.11111rem;overflow-x:auto;padding:.77778rem .83333rem}.home-started-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.80556rem;font-weight:700}.home-started-link:hover{color:#853c09}.home-grid--features{gap:1.11111rem;grid-template-columns:repeat(3,minmax(0,1fr))}.home-feature{padding:1.44444rem}.home-feature-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:start;align-self:flex-start;background:#fbead8;border-radius:.5rem;color:#a84e0d;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:Archivo,sans-serif;font-size:.88889rem;font-weight:800;height:2.11111rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:2.11111rem;padding:0 .38889rem}.home-feature h3{color:#211c17;font-family:Archivo,sans-serif;font-size:1rem;font-weight:700;margin:.88889rem 0 0}.home-feature p{color:#5c554c;font-size:.80556rem;line-height:1.55;margin:.5rem 0 0;text-wrap:pretty}.home-example{background:#211c17;border:1px solid #34302a;border-radius:.77778rem;-webkit-box-shadow:0 24px 60px -30px rgba(33,28,23,.5);box-shadow:0 24px 60px -30px rgba(33,28,23,.5);margin:0 auto;max-width:45.55556rem;overflow:hidden}.home-tablist{border-bottom:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.11111rem;padding:.66667rem .77778rem 0}.home-tab{background:none;border:0;color:#a89f92;cursor:pointer;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;padding:.5rem .88889rem .72222rem;position:relative}.home-tab[aria-selected=true]{color:#f0e9df}.home-tab[aria-selected=true]::after{background:#e97826;bottom:-1px;content:"";height:2px;left:.66667rem;position:absolute;right:.66667rem}.home-tabpanel pre{color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;line-height:1.7;margin:0;min-height:11.11111rem;overflow-x:auto;padding:1.22222rem 1.33333rem}.home-example-run{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1c1813;border-top:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;gap:.55556rem;margin:0;padding:.77778rem 1.33333rem}.home-example-prompt{color:#e0805a}.home-example-command,.home-example-prompt{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem}.home-example-command{color:#c4bbac}.home-grid--four{gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.home-tile{padding:1.33333rem}.home-tile-icon{display:block;height:1.88889rem;-o-object-fit:contain;object-fit:contain;width:1.88889rem}.home-tile h3{color:#211c17;font-family:Archivo,sans-serif;font-size:.94444rem;font-weight:700;margin:.88889rem 0 0}.home-tile p{color:#5c554c;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.77778rem;line-height:1.5;margin:.44444rem 0 .88889rem;text-wrap:pretty}.home-tile-link{-ms-flex-item-align:start;align-self:flex-start;color:#a84e0d;font-size:.75rem;font-weight:700}.home-tile-link:hover{color:#853c09}.home-tiles-cta{margin:1.88889rem 0 0;text-align:center}.home-closing{margin:4rem auto 0;max-width:66.66667rem;padding:0 1.77778rem}.home-closing-inner{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#211c17;border-radius:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1.33333rem;padding:2.88889rem 2.66667rem}.home-closing-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:15.55556rem}.home-closing-copy h2{color:#faf7f1;font-family:Archivo,sans-serif;font-size:1.66667rem;font-weight:800;letter-spacing:-.02em;margin:0}.home-closing-copy p{color:#c4bbac;font-size:.88889rem;line-height:1.55;margin:.66667rem 0 0;max-width:31.11111rem}.home-closing-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.77778rem;margin:0}.home-closing-actions .button{margin:0}@media screen and (width <= 1024px){.home-hero{gap:2rem;grid-template-columns:minmax(0,1fr);padding-top:2.22222rem}.home-hero h1{font-size:2.44444rem}.home-hero-art{aspect-ratio:1/.45}.home-hero-art img{width:40%}.home-section-head h2{font-size:1.66667rem}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.home-closing-inner{padding:2rem 1.77778rem}}@media screen and (width <= 626px){.home-hero h1{font-size:2rem}.home-hero-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.home-grid--features,.home-grid--four,.home-grid--three{grid-template-columns:minmax(0,1fr)}.home-stats-list{gap:1.33333rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.home-closing-actions{-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-tabpanel pre{font-size:.66667rem}}.advisory,.download,.security{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.page-hero-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:0;color:#211c17}.page-hero-lead{font-size:.97222rem;line-height:1.55;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.detail-lead{font-family:Archivo,sans-serif;font-weight:500;font-size:1.16667rem;line-height:1.4;color:#3a332b;margin:.88889rem 0 0;text-wrap:pretty}.section-label{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#6f675c;margin:3.11111rem 0 0;padding-bottom:.77778rem;border-bottom:1px solid #e7e0d5}.advisory-eyebrow,.blog-rail-eyebrow,.community-cta-eyebrow,.docs-feature-eyebrow,.download-cli-eyebrow,.post-eyebrow,.releases-rail-heading,.security-eyebrow,.tooling .tooling-eyebrow{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.advisory-eyebrow,.security-eyebrow{color:#a84e0d}.community-cta-eyebrow,.download-cli-eyebrow{color:#e0805a}.blog-rail-eyebrow,.releases-rail-heading{color:#6f675c;padding-bottom:.66667rem;border-bottom:1px solid #e7e0d5}.card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fff;border:1px solid #e7e0d5;border-radius:13px;padding:1.33333rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.card:hover,.home-card:hover,.project-card:hover{border-color:#d9ccb8;-webkit-box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);box-shadow:0 14px 34px -22px rgba(33,28,23,.35000000000000003);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.card--flat{-webkit-transition:none;transition:none}.card--flat:hover{border-color:#e7e0d5;-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;transform:none}.card--lg{border-radius:16px;padding:1.77778rem}.card--dark{background:#211c17;border-color:#34302a;color:#faf7f1}.card-grid{display:grid;list-style:none;margin:0;padding:0;gap:1rem}.card-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1.2fr 1fr}@media screen and (width <= 1024px){.card-grid--3{grid-template-columns:repeat(2,minmax(0,1fr))}.card-grid--feature{grid-template-columns:1fr}}@media screen and (width <= 626px){.card-grid--2,.card-grid--3,.card-grid--feature{grid-template-columns:minmax(0,1fr)}.page-hero-title{font-size:2rem}}.lts-chip{font-size:.58333rem;color:#fff;background:#a84e0d;padding:.11111rem .38889rem}.lts-chip,.severity-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;border-radius:20px}.severity-chip--low{background:#f4eee3;color:#5c554c}.severity-chip--medium{background:#fbead8;color:#a84e0d}.severity-chip--high{background:#fdf0dc;color:#8a5209}.severity-chip--critical{background:#fce9e9;color:#b02525}.blog-rail,.releases-rail{position:sticky;top:5rem}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}#topbar-nav,.nav-container,.toolbar{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer{background:none;border-top:1px solid #e7e0d5;color:#5c554c;padding:.5rem}.footer *{color:inherit!important}}nav.pagination{border-top:1px solid #e7e0d5;line-height:1;margin:3.11111rem 0 0;padding:1.33333rem 0 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#5c554c;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;padding-bottom:.22222rem}nav.pagination .prev::before{content:"\2190" " Previous"}nav.pagination .next::before{content:"Next \2192"}nav.pagination a{background:none;color:#211c17;font-weight:700;line-height:1.3;position:relative}nav.pagination a:hover{color:#a84e0d}.blog-layout{display:grid;grid-template-columns:13.33333rem 1fr;gap:3.11111rem;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.blog-categories{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.44444rem}.blog-categories,.blog-category{display:-webkit-box;display:-ms-flexbox;display:flex}.blog-category{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.44444rem 0;font-size:.77778rem;font-weight:600;color:#3a332b;border-bottom:1px solid #f0e9dd;text-decoration:none}.blog-category:hover{color:#853c09}.blog-category-count{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#6f675c}.blog-rss{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem;margin-top:1.11111rem;font-size:.75rem;font-weight:700;color:#a84e0d;text-decoration:none}.blog-rss:hover{color:#853c09}.blog-rss .brand-icon{height:1em;width:1em;vertical-align:middle;fill:currentcolor}.blog-main{min-width:0}.blog-back-link{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#6f675c;margin-bottom:.77778rem;text-decoration:none}.blog-back-link:hover{color:#853c09}.blog-posts{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:2rem}.blog-post{display:grid;grid-template-columns:5.33333rem 1fr;gap:1.55556rem;padding:1.66667rem 0;border-top:1px solid #e7e0d5}.blog-post-date{text-align:center}.blog-post-day{display:block;font-family:Archivo,sans-serif;font-weight:800;font-size:2.22222rem;line-height:1;letter-spacing:-.03em;color:#a84e0d}.blog-post-month{display:block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;color:#6f675c;text-transform:uppercase;letter-spacing:.06em;margin-top:.33333rem}.blog-post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.tag-chip{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.61111rem;font-weight:600;color:#a84e0d;background:#fbead8;padding:.16667rem .5rem;border-radius:20px;text-transform:uppercase;letter-spacing:.04em;text-decoration:none}.blog-post-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.33333rem;letter-spacing:-.02em;line-height:1.2;margin:.66667rem 0 0}.blog-post-title a{color:#211c17;text-decoration:none}.blog-post-title a:hover{color:#853c09}.blog-post-summary{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}.blog-post-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.88889rem;margin-top:.77778rem;font-size:.75rem;color:#6f675c}.blog-post-continue{font-weight:700;color:#a84e0d;text-decoration:none}.blog-post-continue:hover{color:#853c09}.blog-list .pagination{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.33333rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:1.55556rem 0 0;padding:1.55556rem 0 0;border-top:1px solid #e7e0d5;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;list-style:none}.blog-list .page-item{display:contents}.blog-list .page-link{display:inline-block;padding:.44444rem .66667rem;border-radius:6px;color:#5c554c;text-decoration:none}.blog-list .page-link:hover{background:#f0e9dd}.blog-list .page-link--next{color:#a84e0d}.blog-list .page-item.active .page-link{background:#211c17;color:#faf7f1}.blog-list .page-item.active .page-link:hover{background:#211c17}.blog-list .page-item.disabled .page-link{padding:.44444rem .33333rem;color:#6f675c;cursor:default}.blog-list .page-item.disabled .page-link:hover{background:none}@media screen and (width <= 1024px){.blog-layout{grid-template-columns:minmax(0,1fr);padding:2.22222rem 1.33333rem 1.77778rem}.blog-rail{position:static}}.post{max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.post .post-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#6f675c;text-decoration:none;background-image:none}.post .post-back:hover{color:#853c09}.post .post-toc a,.post .tag-chip{background-image:none}.post .detail-lead{margin-top:.88889rem}.post-hero{max-width:45.55556rem;margin-top:1rem}.post-tags{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post .post-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.55556rem;letter-spacing:-.03em;line-height:1.05;margin:.88889rem 0 0;color:#211c17}.post-layout{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:3.11111rem;margin-top:2.22222rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.post-rail{position:sticky;top:4.66667rem;gap:1.22222rem}.post-authors,.post-rail{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.post-authors{gap:.77778rem}.post-author{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.post-avatar{width:44px;height:44px;border-radius:50%;background:#e7e0d5}.post-author-name{font-weight:700;font-size:.80556rem}.post-date{font-size:.72222rem;color:#6f675c}.post-eyebrow{color:#6f675c;padding-bottom:.55556rem}.post-share-links{gap:.44444rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.post-adjacent,.post-share-links{display:-webkit-box;display:-ms-flexbox;display:flex}.post-adjacent{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem;border-top:1px solid #e7e0d5;font-size:.72222rem}.post-adjacent a{color:#5c554c;font-weight:600;text-decoration:none;background-image:none}.post-adjacent a:hover{color:#853c09}.post-content{max-width:42.22222rem}.blog .post-content img.featured{aspect-ratio:16/8;-o-object-fit:cover;object-fit:cover;width:100%;height:auto;border-radius:14px;display:block;margin-bottom:1.88889rem}.blog .post-content h2{font-family:Archivo,sans-serif;font-weight:700;font-size:1.55556rem;letter-spacing:-.02em;margin:2.22222rem 0 0;padding-top:0}.blog .post-content p{font-size:.94444rem;line-height:1.75;color:#3a332b}.blog .post-content p+p{margin-top:.66667rem}.blog .post-content ol,.blog .post-content ul{padding-bottom:1rem}.blog .post-content li ol,.blog .post-content li ul{padding-bottom:0}.blog .post-content blockquote{margin:1.33333rem 0 0;padding:1rem 1.22222rem;border-left:3px solid #e97826;background:#fff;border-radius:0 12px 12px 0;font-family:Archivo,sans-serif;font-weight:500;font-size:1.05556rem;line-height:1.45;color:#3a332b}.blog .post-content blockquote p{font-size:inherit;line-height:inherit}.blog .post-content img:not(.featured){width:auto;max-width:800px;height:auto;max-height:600px;margin-left:auto;margin-right:auto;display:block;cursor:-webkit-zoom-in;cursor:zoom-in}@media screen and (width <= 1024px){.blog .post-content img:not(.featured){max-width:100%;max-height:none}}.blog .post-content figcaption{font-size:.8rem;text-align:center}.blog .post-content table{width:100%;text-align:center;margin-bottom:1rem}.blog .post-content tr:nth-child(2n){background:#f5f5f5}.blog .post-content td{padding:.5rem}.blog .post-content th{padding:.7rem;background:#e1e1e1}.image-zoom-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7000000000000001);z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease-in-out,visibility .3s ease-in-out;transition:opacity .3s ease-in-out,visibility .3s ease-in-out;overflow:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.image-zoom-overlay.active{opacity:1;visibility:visible}.image-zoom-overlay img{cursor:-webkit-zoom-out;cursor:zoom-out}@media screen and (width >= 1025px){.image-zoom-overlay img{max-width:800px;max-height:600px;-webkit-transform:scale(1.5);transform:scale(1.5)}}@media screen and (width <= 1024px){.image-zoom-overlay{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.image-zoom-overlay img{max-width:none;max-height:none;width:auto;height:auto}}.post-related{margin-top:3.11111rem;padding-top:1.55556rem;border-top:1px solid #e7e0d5}.post .post-related-heading{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#6f675c;margin:0 0 1rem}.post-related-grid{gap:.77778rem}.post .post-related-card,.post .post-related-card:hover{border-radius:12px;padding:1rem 1.11111rem;color:#211c17;text-decoration:none;background-image:none}.post-related-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;color:#6f675c}.post-related-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.91667rem;margin-top:.33333rem;line-height:1.3}@media screen and (width <= 1024px){.post{padding:2.22222rem 1.33333rem 1.77778rem}.post-layout{grid-template-columns:minmax(0,1fr)}.post-rail{position:static}}.blog-category.is-current{color:#a84e0d;font-weight:700}.releases{display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;padding:3.11111rem 1.77778rem 2.22222rem}.releases-content{grid-column:1}.releases-intro{max-width:40rem}.releases-lead a{color:#a84e0d}.releases-lead a:hover{color:#853c09;text-decoration:none}.releases-group{margin-top:2.66667rem}.releases-content>.releases-group:first-child{margin-top:2.22222rem}.releases-group-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:0 0 .77778rem;color:#211c17}.releases-table{width:100%;font-size:.80556rem;background:#fff;border:1px solid #e7e0d5;border-radius:12px;border-collapse:collapse;overflow:hidden}.releases-table thead tr{background:#f4eee3}.releases-table th{text-align:left;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#6f675c;padding:.61111rem .88889rem}.releases-col-version{width:7.77778rem}.releases-col-date{width:8.33333rem}.releases-table tbody tr{border-top:1px solid #f0e9dd}.releases-table tbody tr:first-child{border-top:0}.releases-table td{padding:.66667rem .88889rem}.releases-version{font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600;font-size:.77778rem;color:#a84e0d}.releases-version:hover{color:#853c09;text-decoration:none}.releases-table .lts-chip{margin-left:.44444rem}.releases-date{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#5c554c}.releases-desc{color:#5c554c;line-height:1.5}.releases-rail{grid-column:2}.releases-rail-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:.55556rem}.releases-rail-link{display:block;padding:.33333rem 0 .33333rem .66667rem;font-size:.75rem;color:#5c554c;border-left:2px solid #e7e0d5;text-decoration:none}.releases-rail-link:focus-visible,.releases-rail-link:hover{border-left-color:#d9ccb8;color:#211c17}.advisory-back{display:inline-block;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c;text-decoration:none}.advisory-back:hover{color:#853c09}.advisory-layout{display:grid;grid-template-columns:minmax(0,1fr) 17.77778rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start;margin-top:1rem}.advisory-article{max-width:42.22222rem}.advisory-title{font-family:Archivo,sans-serif;font-weight:800;font-size:2.33333rem;letter-spacing:-.03em;line-height:1.05;margin:.55556rem 0 0;color:#211c17}.advisory-section{margin-top:2rem}.advisory-section-title{font-family:Archivo,sans-serif;font-weight:700;font-size:.83333rem;text-transform:uppercase;letter-spacing:.08em;color:#6f675c;margin:0 0 .55556rem}.advisory-section-body{font-size:.91667rem;line-height:1.7;color:#3a332b;margin:0;text-wrap:pretty}.advisory-section-body a{color:#a84e0d}.advisory-section-body a:hover{color:#853c09}.advisory-section-body pre{background:#211c17;border-radius:.55556rem;color:#f0e9df;display:block;font-size:.75rem;line-height:1.7;overflow-x:auto;padding:1rem 1.11111rem}.advisory-section-body pre code{color:inherit}.advisory-references{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.44444rem;font-size:.83333rem}.advisory-reference{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.75rem;color:#a84e0d;text-decoration:none}.advisory-reference:hover{color:#853c09;text-decoration:none}.advisory-facts{position:sticky;top:5rem;background:#fff;border:1px solid #e7e0d5;border-radius:14px;padding:1.33333rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:1rem}.advisory-facts-label{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#6f675c;letter-spacing:.06em;text-transform:uppercase}.advisory-severity-chip{margin-top:.44444rem;font-size:.66667rem;padding:.22222rem .55556rem}.advisory-facts-value{margin-top:.33333rem;font-size:.80556rem;line-height:1.6;color:#3a332b}.advisory-facts-value--mono{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.77778rem;line-height:1.7;color:#211c17;font-weight:600}a.advisory-facts-cta{display:block;margin:.22222rem 0 0;padding:.61111rem 1rem;font-size:.77778rem;text-align:center}.release dl{display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}.release dt{grid-column-start:1}.release dd{grid-column-start:2;margin-left:1rem;word-break:break-word}.release aside{float:right;margin-left:1rem;width:25rem}@media screen and (width <= 1024px){.releases{grid-template-columns:minmax(0,1fr)}.releases-content,.releases-rail{grid-column:1}.releases-rail{position:static}.advisory-layout{grid-template-columns:minmax(0,1fr)}.advisory-facts{position:static}}@media screen and (width <= 626px){.releases-table{font-size:.72222rem}.release aside{width:100%;margin:0 auto}}.misc p:has(img){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.misc p img{margin-right:1rem;width:7rem}.column-camel-core-13{float:left;width:33.33%}.row-camel-core-main::after{content:"";display:table;clear:both}.community,.docs{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem}.community-hero,.docs-hero{max-width:42.22222rem}.docs-features{margin-top:2.22222rem}.docs-feature--dark .docs-feature-eyebrow{color:#e0805a}.docs-feature--light .docs-feature-eyebrow{color:#a84e0d}.docs-feature-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.66667rem;letter-spacing:-.02em;margin:.66667rem 0 0}.docs-feature--light .docs-feature-title{color:#211c17}.docs-feature-desc{font-size:.86111rem;line-height:1.6;margin:.66667rem 0 1.44444rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-feature--dark .docs-feature-desc{color:#c4bbac}.docs-feature--light .docs-feature-desc{color:#5c554c}.docs-feature-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.docs-feature-actions .button{margin:0;padding:.61111rem 1.11111rem;font-size:.80556rem}.docs-projects{margin-top:1.11111rem}.docs-project-card-head{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.66667rem}.docs-project-card-icon{width:1.66667rem;height:1.66667rem;display:block;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.docs-project-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0;color:#211c17}.docs-project-card-desc{font-size:.77778rem;line-height:1.55;color:#5c554c;margin:.66667rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.docs-project-card-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.77778rem;font-size:.75rem;font-weight:700}.docs-project-card-link{color:#a84e0d}.docs-project-card-link:hover{color:#853c09;text-decoration:none}.docs-project-card-link--muted{color:#6f675c}.docs-feature-links{margin-top:1rem}.docs-feature--dark .docs-project-card-link{color:#f2a05a}.docs-feature--dark .docs-project-card-link--muted{color:#c4bbac}.docs-feature--dark .docs-project-card-link:hover{color:#faf7f1}.community-grid{margin-top:2.22222rem}.community-card-tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:2.11111rem;height:2.11111rem;border-radius:9px;background:#fbead8;font-family:Archivo,sans-serif;font-weight:800;font-size:.83333rem;color:#a84e0d}.community-card-title{font-family:Archivo,sans-serif;font-weight:700;font-size:1.05556rem;margin:.88889rem 0 0;color:#211c17}.community-card-body{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:.5rem 0 1rem;-webkit-box-flex:1;-ms-flex:1;flex:1;text-wrap:pretty}.community-card-link{color:#a84e0d;font-weight:700;font-size:.75rem}.community-card-link:hover{color:#853c09;text-decoration:none}.community-cta{grid-column:span 2}.community-cta-title{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:.66667rem 0 0}.community-cta-body{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 1.11111rem;-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:31.11111rem}.community-cta-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.55556rem;margin:0}.community-cta-actions .button{margin:0;padding:.55556rem 1rem;font-size:.77778rem}@media screen and (width <= 1024px){.community,.docs{padding:1.77778rem 1.11111rem 2.66667rem}}@media screen and (width <= 626px){.community-cta{grid-column:span 1}}.projects{width:100%;max-width:66.66667rem;margin:0 auto;padding:3rem 2rem 4rem;color:#211c17;font-size:.83333rem;line-height:1.55}.projects-hero{max-width:44rem;margin-bottom:2.5rem}.projects-back{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;font-weight:600;color:#5c554c}.projects-back:hover{color:#853c09;text-decoration:none}.projects h1{margin:1rem 0 0;font-size:2.55556rem;font-weight:800;line-height:1.05;letter-spacing:-.03em;color:#211c17}.projects-intro{margin:.8rem 0 0;font-size:.97222rem;color:#5c554c;text-wrap:pretty}.projects-group+.projects-group{margin-top:2.9rem}.projects-group-title{margin:0 0 1.1rem;padding-bottom:.8rem;border-bottom:1px solid #e7e0d5;font-size:.83333rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#5c554c}.projects-grid{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.projects-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.projects-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.35rem;background:#fff;border:1px solid #e7e0d5;border-radius:.72222rem;-webkit-transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,-webkit-box-shadow .15s,-webkit-transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s;transition:border-color .15s,box-shadow .15s,transform .15s,-webkit-box-shadow .15s,-webkit-transform .15s}.project-card--row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:1.1rem;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.45rem 1.55rem}.project-card-icon{height:1.88889rem;width:1.88889rem;-webkit-box-flex:0;-ms-flex:none;flex:none;-o-object-fit:contain;object-fit:contain}.project-card-icon--lg{height:2.44444rem;width:2.44444rem}.project-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.project-card-title{margin:.9rem 0 0;font-size:.94444rem;font-weight:700;line-height:1.2;color:#211c17}.project-card--row .project-card-title{margin-top:0;font-size:1.05556rem}.project-card-desc{margin:.45rem 0 .8rem;font-size:.75rem;color:#5c554c;text-wrap:pretty}.project-card--row .project-card-desc{font-size:.80556rem}.project-card-stats{margin:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;line-height:1.7;color:#5c554c}.project-card-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.9rem}.project-card-link{color:#a84e0d;font-size:.75rem;font-weight:700}.project-card-link:hover{color:#853c09;text-decoration:none}.project-card-link--muted{color:#5c554c}.projects-footnote{margin:1.4rem 0 0;font-size:.77778rem;color:#5c554c;text-wrap:pretty}@media screen and (width <= 1024px){.projects{padding:2rem 1.25rem 3rem}.projects-grid--four{grid-template-columns:repeat(2,minmax(0,1fr))}.projects-grid--two{grid-template-columns:minmax(0,1fr)}.projects h1{font-size:2rem}}@media screen and (width <= 626px){.projects-grid--four{grid-template-columns:minmax(0,1fr)}.project-card--row{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.tooling{width:100%;max-width:66.66667rem;margin:0 auto;padding:3.11111rem 1.77778rem 2.22222rem;display:grid;grid-template-columns:minmax(0,1fr) 12.22222rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.tooling h1{font-weight:800;line-height:1.05;margin:0}.tooling .tooling-lead{max-width:42.22222rem;margin:.77778rem 0 0}.tooling-section{margin-top:2.66667rem}.tooling-cli-section{margin-top:2.88889rem}.tooling .tooling-section h2{font-weight:800;font-size:1.55556rem;letter-spacing:-.02em;margin:0;padding:0}.tooling .tooling-section-intro{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;max-width:42.22222rem;text-wrap:pretty}.tooling-cli-section .tooling-section-intro{margin-bottom:1.11111rem}.tooling code{padding:.11111rem .33333rem;border-radius:4px}.tooling .tooling-section-intro code,.tooling code{font-size:.77778rem}.tooling-cli{background:#211c17;border:1px solid #34302a;border-radius:12px;overflow:hidden}.tooling-cli-row{display:grid;grid-template-columns:9.44444rem minmax(0,1fr);gap:1.11111rem;padding:.72222rem 1.11111rem;border-top:1px solid #34302a;font-size:.77778rem}.tooling .tooling-cli-cmd{color:#f2a05a;font-weight:600;font-size:.75rem}.tooling-cli-desc{color:#c4bbac;line-height:1.5}.tooling-split{display:grid;grid-template-columns:1fr 1fr;gap:1.55556rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.tooling-media{aspect-ratio:16/10;border-radius:12px;background:#211c17;border:1px solid #34302a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}.tooling-media img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.tooling .tooling-eyebrow{color:#a84e0d;margin:0}.tooling-mcp .tooling-eyebrow+h2{margin-top:.55556rem}.tooling-ai-grid{display:grid;grid-template-columns:1fr 1fr;gap:.77778rem;margin-top:1.22222rem}.tooling-ai-card{border:1px solid #e7e0d5;border-radius:10px;padding:.88889rem 1rem}.tooling .tooling-ai-name{font-family:Archivo,sans-serif;font-weight:700;font-size:.88889rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-ai-name:hover{color:#853c09;text-decoration:underline}.tooling .tooling-ai-desc{font-size:.75rem;line-height:1.5;color:#5c554c;margin:.33333rem 0 0}.tooling-rows{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:1rem;border-top:1px solid #e7e0d5}.tooling-row{display:grid;grid-template-columns:14.44444rem minmax(0,1fr);gap:1.33333rem;padding:.88889rem 0;border-bottom:1px solid #f0e9dd}.tooling .tooling-row-name{font-weight:700;font-size:.83333rem;color:#211c17;text-decoration:none;background:none}.tooling .tooling-row-name:hover{color:#853c09;text-decoration:underline}.tooling-row-name--mono{font-family:JetBrains Mono,ui-monospace,monospace}.tooling .tooling-row-desc{font-size:.80556rem;line-height:1.55;color:#5c554c;margin:0;text-wrap:pretty}.tooling .tooling-footnote{font-size:.80556rem;line-height:1.6;color:#6f675c;margin:2.66667rem 0 0;padding-top:1.33333rem;border-top:1px solid #e7e0d5}.tooling .toc.sidebar .toc-menu{top:5rem}@media screen and (width <= 1024px){.tooling{padding:1.77778rem 1.11111rem 2.66667rem}.tooling,.tooling-row,.tooling-split{grid-template-columns:minmax(0,1fr)}.tooling-row{gap:.33333rem}}@media screen and (width <= 626px){.tooling-cli-row{gap:.33333rem}.tooling-ai-grid,.tooling-cli-row{grid-template-columns:minmax(0,1fr)}}.sitemap h1{text-align:center}.sitemap ul.sitemap-list{list-style-type:none;-webkit-columns:2;-moz-columns:2;column-count:2;padding:0;-webkit-column-gap:25%;-moz-column-gap:25%;column-gap:25%;white-space:nowrap}@media screen and (width <= 626px){.sitemap ul.sitemap-list{-webkit-columns:1;-moz-columns:1;column-count:1}}.video{position:relative;overflow:hidden;padding-bottom:52.9986%}.video iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.download-hero{display:grid;grid-template-columns:1fr 21.11111rem;gap:3.11111rem;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.download-intro p{font-size:.91667rem;line-height:1.6;color:#5c554c;margin:.77778rem 0 0;text-wrap:pretty}.download-intro p:first-of-type{margin-top:.88889rem}.download-intro strong{color:#211c17}.download-card a,.download-intro a{color:#a84e0d}.download-card a:hover,.download-intro a:hover{color:#853c09}.download-cli-card{background:#211c17;border-radius:16px;padding:1.55556rem;color:#faf7f1}.download-cli-desc{font-size:.80556rem;line-height:1.55;color:#c4bbac;margin:.55556rem 0 .88889rem}.download-cli-bar{display:-webkit-box;display:-ms-flexbox;display:flex;background:#1c1813;border:1px solid #34302a;border-radius:8px;overflow:hidden}.download-cli-command{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;color:#f0e9df;padding:.66667rem .77778rem;white-space:normal;word-break:break-word}.download-cli-prompt{color:#e0805a}.download-cli-copy{border:0;border-left:1px solid #34302a;background:#2b2620;color:#f0e9df;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.66667rem;font-weight:600;padding:0 .77778rem;cursor:pointer}.download-cli-copy:hover{background:#3a342c}.download-cli-guide{display:inline-block;margin-top:.77778rem;font-size:.75rem;font-weight:700;color:#f2a05a}.download-cli-guide:hover{color:#faf7f1;text-decoration:none}.download-row{display:grid;grid-template-columns:12.22222rem 7.22222rem minmax(11.11111rem,1fr) minmax(0,auto);gap:1.33333rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1.22222rem 0;border-bottom:1px solid #f0e9dd}.download-row-project{font-family:Archivo,sans-serif;font-weight:700;font-size:.94444rem;color:#211c17}.download-row-date{font-size:.72222rem;color:#6f675c;margin-top:.16667rem}.download-row-version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.44444rem}.download-row-version-num{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.83333rem;font-weight:600;color:#211c17}.download-row-note{font-size:.77778rem;color:#5c554c}.download-row-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:.77778rem;font-size:.75rem;font-weight:700}.download-row-artifact,.download-row-links{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.download-row-artifact{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;gap:.33333rem;white-space:nowrap}.download-row-link{color:#6f675c}.download-row-link:hover{color:#853c09;text-decoration:none}.download-row-link--primary{color:#a84e0d}.download-row-link--primary:hover{color:#853c09}.download-row-sub{font-size:.75rem;font-weight:700;color:#6f675c}.download-row-sub::before{content:"("}.download-row-sub::after{content:")"}.download-row-sublink{color:inherit}.download-row-sublink:hover{color:#e97826;text-decoration:none}.download-row-sublink+.download-row-sublink::before{content:" \00b7 ";color:#6f675c}.download-cards{margin-top:2.66667rem}.download-card{padding:1.44444rem}.download-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.download-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0;text-wrap:pretty}@media screen and (width <= 1024px){.download-cards,.download-hero{grid-template-columns:1fr}.download{padding:2.22222rem 1.33333rem 2.66667rem}.download-row{grid-template-columns:1fr;gap:.44444rem}.download-row-links{margin-top:.22222rem}}.catalog.paragraph{margin:0}.catalog{width:32%;height:9rem;display:inline-block;vertical-align:top;padding:1rem .8rem 0 0}@media screen and (width <= 1024px){.catalog{width:49%}}@media screen and (width <= 626px){.catalog{width:100%}}.catalog p{border:1px solid #e1e1e1;height:100%}.catalog .item{display:block;padding:1rem}.catalog .item a{background-image:none;display:block;text-align:center}.catalog .item .image{display:block}.catalog .item .image img{height:3rem;width:auto;max-width:60%}.post .post-share-link{font-family:inherit;font-size:.72222rem;font-weight:700;color:#5c554c;background:none;border:1px solid #e7e0d5;padding:.33333rem .66667rem;border-radius:6px;text-decoration:none;cursor:pointer}.post .post-share-link:hover{border-color:#d9ccb8;color:#5c554c}.security-hero{max-width:42.22222rem}.security-grid{margin-top:2.22222rem}.security-card--feature{grid-column:1/-1}.security-card--feature h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.44444rem;letter-spacing:-.02em;margin:.55556rem 0 0}.security-card--feature p{font-size:.86111rem;line-height:1.6;color:#5c554c;margin:.66667rem 0 0;max-width:45.55556rem}.security-card{padding:1.44444rem}.security-card h3{font-family:Archivo,sans-serif;font-weight:700;font-size:1rem;margin:0}.security-card p{font-size:.80556rem;line-height:1.6;color:#5c554c;margin:.55556rem 0 0}.security-band a,.security-card--feature a,.security-card a{color:#a84e0d}.security-band a:hover,.security-card--feature a:hover,.security-card a:hover{color:#853c09}.security-band{grid-column:1/-1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.33333rem;background:#211c17;border-radius:16px;padding:1.77778rem;color:#faf7f1}.security-band-copy{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:16.66667rem}.security-band-copy h2{font-family:Archivo,sans-serif;font-weight:800;font-size:1.33333rem;letter-spacing:-.02em;margin:0}.security-band-copy p{font-size:.83333rem;line-height:1.6;color:#c4bbac;margin:.55556rem 0 0;max-width:35.55556rem}.security-band .button{white-space:nowrap}.security-advisories{width:100%;font-size:.77778rem;border-collapse:collapse}.security-advisories thead tr{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.63889rem;font-weight:600;color:#6f675c;text-transform:uppercase;letter-spacing:.06em;text-align:left}.security-advisories thead th{padding:.77778rem .66667rem .55556rem}.security-advisories thead th:first-child{padding-left:0}.security-advisories thead th:last-child{padding-right:0}.security-advisories tbody th{text-align:left;padding:1.44444rem 0 .44444rem;font-family:Archivo,sans-serif;font-weight:800;font-size:1.22222rem;letter-spacing:-.02em;color:#211c17}.security-advisories .security-row{border-top:1px solid #f0e9dd}.security-advisories td{padding:.66667rem;color:#5c554c}.security-advisories td:first-child{padding-left:0;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.72222rem;color:#3a332b}.security-advisories td:first-child a{font-weight:600;color:#a84e0d}.security-advisories td:first-child a:hover{color:#853c09;text-decoration:none}.security-advisories td:last-child{padding-right:0;line-height:1.5}.security-severity{font-size:.63889rem;padding:.16667rem .44444rem}.security .table-wrapper{overflow-x:auto}.security td:only-child{text-align:center}.security td:first-child{white-space:nowrap}@media screen and (width <= 1024px){.security-grid{grid-template-columns:1fr}}@media screen and (width <= 626px){.security-band{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}} /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin:0}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0}.doc .tabs{margin:.77778rem 0 0}.doc .tabs>.content{background:#211c17;border:1px solid #34302a;border-radius:.55556rem;overflow:hidden}.doc .tabs .tablist>ul{border-bottom:1px solid #34302a;gap:.11111rem;padding:.55556rem .66667rem 0}.doc .tabs .tablist>ul li{background:none;border:0;color:#a89f92;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.69444rem;font-weight:600;padding:.38889rem .77778rem .61111rem}.doc .tabs .tablist.ulist>ul li+li{margin-left:0}.doc .tabs.is-loading .tablist li:not(:first-child),.doc .tabs:not(.is-loading) .tablist li:not(.is-selected){background:none}.doc .tabs.is-loading .tablist li:first-child,.doc .tabs:not(.is-loading) .tablist li.is-selected{color:#f0e9df}.doc .tabs.is-loading .tablist li:first-child::after,.doc .tabs:not(.is-loading) .tablist li.is-selected::after{background:#e97826;bottom:-1px;height:2px;left:.55556rem;right:.55556rem}.doc .tabs .tabpanel{background:none;border:0;padding:0}.doc .tabs .tabpanel .listingblock{margin:0}.doc .tabs .tabpanel pre.highlight code,.doc .tabs .tabpanel pre:not(.highlight){border-radius:0} \ No newline at end of file diff --git a/antora-ui-camel/public/_/data/rev-manifest.json b/antora-ui-camel/public/_/data/rev-manifest.json index 458bf9caa1f..e9f12253d3f 100644 --- a/antora-ui-camel/public/_/data/rev-manifest.json +++ b/antora-ui-camel/public/_/data/rev-manifest.json @@ -1,12 +1,9 @@ { - "css/site.css": "css/site-697c9df5c1.css", + "css/site.css": "css/site-5bf9477644.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", - "img/articles.svg": "img/articles-88ac404d18.svg", - "img/asf_logo_wide.svg": "img/asf_logo_wide-3982e7e19b.svg", "img/back.svg": "img/back-e8d811f74c.svg", - "img/blog.svg": "img/blog-4c7fa4cb60.svg", "img/books.svg": "img/books-77a59b07e1.svg", "img/brand-logos.svg": "img/brand-logos-a2b35bbdec.svg", "img/bugfix.svg": "img/bugfix-4280bf9490.svg", @@ -17,21 +14,15 @@ "img/cli.svg": "img/cli-9cede0128a.svg", "img/close.svg": "img/close-af0b99e31b.svg", "img/community.svg": "img/community-2ec8a3dc8b.svg", - "img/contributing.svg": "img/contributing-107909992d.svg", "img/copy-checkmark.svg": "img/copy-checkmark-9a4caf1664.svg", "img/copy.svg": "img/copy-d7c1e3194d.svg", "img/docs.svg": "img/docs-7d0adf1156.svg", - "img/documentation.svg": "img/documentation-abb1b7f8b1.svg", - "img/download.svg": "img/download-63cdd75074.svg", "img/examples.svg": "img/examples-07d01f2bc0.svg", "img/github.svg": "img/github-0cae1e39c4.svg", - "img/home-o.svg": "img/home-o-97a33fc02f.svg", - "img/home.svg": "img/home-934e2b15ea.svg", "img/jbang.svg": "img/jbang-e88e00f7fa.svg", "img/karavan.svg": "img/karavan-8621354711.svg", "img/knative.svg": "img/knative-5010ee4773.svg", "img/kubernetes.svg": "img/kubernetes-07ba46aaa2.svg", - "img/logo-camel-medium.png": "img/logo-camel-medium-372cf8688f.png", "img/logo-d.svg": "img/logo-d-a567cee6fa.svg", "img/menu.svg": "img/menu-8775cec4be.svg", "img/quarkus.svg": "img/quarkus-446ffca541.svg", @@ -40,8 +31,6 @@ "img/security.svg": "img/security-06abe157b3.svg", "img/sparkle.svg": "img/sparkle-da54b1f43c.svg", "img/spring-boot.svg": "img/spring-boot-0a7cb95564.svg", - "img/support.svg": "img/support-7219bb2f58.svg", - "img/team.svg": "img/team-899f1050c2.svg", "img/tooling.svg": "img/tooling-f5e235c238.svg", "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg", "js/site.js": "js/site-354642194b.js", diff --git a/antora-ui-camel/public/_/helpers/asset.js b/antora-ui-camel/public/_/helpers/asset.js index a9708560175..f7894751568 100644 --- a/antora-ui-camel/public/_/helpers/asset.js +++ b/antora-ui-camel/public/_/helpers/asset.js @@ -1,14 +1,11 @@ 'use strict' const manifest = { - "css/site.css": "css/site-697c9df5c1.css", + "css/site.css": "css/site-5bf9477644.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", - "img/articles.svg": "img/articles-88ac404d18.svg", - "img/asf_logo_wide.svg": "img/asf_logo_wide-3982e7e19b.svg", "img/back.svg": "img/back-e8d811f74c.svg", - "img/blog.svg": "img/blog-4c7fa4cb60.svg", "img/books.svg": "img/books-77a59b07e1.svg", "img/brand-logos.svg": "img/brand-logos-a2b35bbdec.svg", "img/bugfix.svg": "img/bugfix-4280bf9490.svg", @@ -19,21 +16,15 @@ const manifest = { "img/cli.svg": "img/cli-9cede0128a.svg", "img/close.svg": "img/close-af0b99e31b.svg", "img/community.svg": "img/community-2ec8a3dc8b.svg", - "img/contributing.svg": "img/contributing-107909992d.svg", "img/copy-checkmark.svg": "img/copy-checkmark-9a4caf1664.svg", "img/copy.svg": "img/copy-d7c1e3194d.svg", "img/docs.svg": "img/docs-7d0adf1156.svg", - "img/documentation.svg": "img/documentation-abb1b7f8b1.svg", - "img/download.svg": "img/download-63cdd75074.svg", "img/examples.svg": "img/examples-07d01f2bc0.svg", "img/github.svg": "img/github-0cae1e39c4.svg", - "img/home-o.svg": "img/home-o-97a33fc02f.svg", - "img/home.svg": "img/home-934e2b15ea.svg", "img/jbang.svg": "img/jbang-e88e00f7fa.svg", "img/karavan.svg": "img/karavan-8621354711.svg", "img/knative.svg": "img/knative-5010ee4773.svg", "img/kubernetes.svg": "img/kubernetes-07ba46aaa2.svg", - "img/logo-camel-medium.png": "img/logo-camel-medium-372cf8688f.png", "img/logo-d.svg": "img/logo-d-a567cee6fa.svg", "img/menu.svg": "img/menu-8775cec4be.svg", "img/quarkus.svg": "img/quarkus-446ffca541.svg", @@ -42,8 +33,6 @@ const manifest = { "img/security.svg": "img/security-06abe157b3.svg", "img/sparkle.svg": "img/sparkle-da54b1f43c.svg", "img/spring-boot.svg": "img/spring-boot-0a7cb95564.svg", - "img/support.svg": "img/support-7219bb2f58.svg", - "img/team.svg": "img/team-899f1050c2.svg", "img/tooling.svg": "img/tooling-f5e235c238.svg", "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg", "js/site.js": "js/site-354642194b.js", diff --git a/antora-ui-camel/public/_/img/articles-88ac404d18.svg b/antora-ui-camel/public/_/img/articles-88ac404d18.svg deleted file mode 100644 index 92c34d7b837..00000000000 --- a/antora-ui-camel/public/_/img/articles-88ac404d18.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/asf_logo_wide-3982e7e19b.svg b/antora-ui-camel/public/_/img/asf_logo_wide-3982e7e19b.svg deleted file mode 100644 index 4f37dbde2a3..00000000000 --- a/antora-ui-camel/public/_/img/asf_logo_wide-3982e7e19b.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/blog-4c7fa4cb60.svg b/antora-ui-camel/public/_/img/blog-4c7fa4cb60.svg deleted file mode 100644 index 677b80ddea3..00000000000 --- a/antora-ui-camel/public/_/img/blog-4c7fa4cb60.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/contributing-107909992d.svg b/antora-ui-camel/public/_/img/contributing-107909992d.svg deleted file mode 100644 index 3f83f6fed3a..00000000000 --- a/antora-ui-camel/public/_/img/contributing-107909992d.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/documentation-abb1b7f8b1.svg b/antora-ui-camel/public/_/img/documentation-abb1b7f8b1.svg deleted file mode 100644 index 868a43209ee..00000000000 --- a/antora-ui-camel/public/_/img/documentation-abb1b7f8b1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/download-63cdd75074.svg b/antora-ui-camel/public/_/img/download-63cdd75074.svg deleted file mode 100644 index 4dc39fecbf6..00000000000 --- a/antora-ui-camel/public/_/img/download-63cdd75074.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/home-934e2b15ea.svg b/antora-ui-camel/public/_/img/home-934e2b15ea.svg deleted file mode 100644 index f0fd7a3e720..00000000000 --- a/antora-ui-camel/public/_/img/home-934e2b15ea.svg +++ /dev/null @@ -1 +0,0 @@ -image/svg+xml \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/home-o-97a33fc02f.svg b/antora-ui-camel/public/_/img/home-o-97a33fc02f.svg deleted file mode 100644 index 3ec849f1cae..00000000000 --- a/antora-ui-camel/public/_/img/home-o-97a33fc02f.svg +++ /dev/null @@ -1 +0,0 @@ -image/svg+xml \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/logo-camel-medium-372cf8688f.png b/antora-ui-camel/public/_/img/logo-camel-medium-372cf8688f.png deleted file mode 100644 index ab4ed1d91140121e43bef99796407231aa2263d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16120 zcmXYYcQ~Bi^S0hwwCE!0hv-4{RT5Fc>O}9+qxarR^v<#pWf47yWr&wp_rL>Nppb2hY#zC3~5o8Txsd9rAq@$Iu#$qTnh(voYe@z08xKvUkS z*nvv#a%x`briWjAe0-!dQuoP62R;H`te-1oL7Ax0+f`{%$I2ZI5z&0r=AzYYFFAhB z{4tHKl>^!B;vhE-jV!`}{-W(+_<%ImhXaA1zh%v`stUJ;;dMh{*TeZ$*DL9z(kWqr zHnn7o*0mY8CQn+G=6(Opxp~+kb6<&`(oc}we%au*#cW7)AgE0S;CK2hv5;npGwCjD9d^mZpZp zy>T|WmZD@ji9_VD1_Y((`tN_kI`y*BKYn7@mBv*<4^d!#m-ouVRMC$0H9Eq%UH!|5 z^YB?9oG7ZnLAyeHD8EXYiHqWC6N5@csFz3VnSyPKBx{%P<3z7Jhl{?8D*4Gv%P&Ky z^+3k+O_Di%M#7i*HFhslMsH+Il9(3ug5v)pKG(Hf0g)K|{e$;7cmGb?&3sa#h>up| z!sc;A{s0El|1)j2hV|E%tbaDn3^ERexB`q>yfpA`a84EhJ?5#dpV&?AwJy#S9_&GV zCMDK2SCZ6pvOZsK{d?_`?9RUgDZC|Jf0w2P)mSLTMiSvh^T_3JWH2$yaHmC4{uFsJ z-lM!RAfQt>vC!BX8)Yd)ap!1615z%jI-nJGv=5+~jOe{w(kck)M6B`SYd1w`_&Y_cK0G+_;bL zu>CiL&WhD@rUDJ;)b^#pg)zb+S|ZPADS?w{%u^YAwIBJTT1M@P1eWv=6c6f9T4;0pfmEI@4oAl47C5?WdGC%r}h1ZyraD{4Txe z3iGr@tQ+{*&M3IxIwW>#Cr*VMB4=$go*2qelN7HvIZsnmv#`7~bB(N;8yizgY zGf~h!3Al5T$Z6EyD%{8YfKOwGq`h1O4lr(Mlb@=BP*sL&nDZ@%8<}e z*3X$`#rIzs#9U`YbT>L1xE4I%j{@()dSS5}K&`*yRu`MLX~2iYL!3jfE+ za}PQ79OmCAc-!L`gUmsuFP#t$Zk9W>cUn2Q3Clf zw(Oc;{(0xjAsBEV$r5`3qT3qTu^D{FDB))M+@(LO{SdG+nD z0_d=cEYIUsEElj zbF{*{-th|HEOcNIR9*hQkc^+GQysGBLVgk zVgJ=ZWZI@Z_kdjcyEfZ%`F`0JDvBBk@uW=`0! zQ?w0LYSV%2rl3eTK5GrV5m%=VxJ`iNensQnB-6j;VYdXYuJ|7UCqnJ@t(NrL5<>+= zRqjZySL}nA+f*p06u`sh6U`@FJwzYrG-`#mW1!-lU^%fT`eA8F$g|Fr>b7@pHqq{c z&XDW>9c{!-pu?3}tf|4ijS{1S^sd~l-jZ7m-^ekFq-y28 zIA2LmKJWeBUpb6{8BT^3qZ$_{eXA8CvdCu-gy;|;tO!nHOXL+4oi0w*^~BMOhcVEP z8Ky}#k!Pq6!CfPsJhTixwhIP~MW<1+^azgrui{e+=V1d~_s*=vVzOc5_^dK|=eFKjLW#(wdS>Ucr&-34L*nbZRGhnecHhHa zR*BKnm5wl462&zyjj<1;ZRfKC*bgxJfEiff)&hip@Ge|#ahLCTyrGn!}g+&hPg!M4$DzL}&BLf2{O3gc*g(>T4 zHv&bOv&WGKf9%hOKF-AzR|=4vPJUjyv{$c`ns0&scc*wvmvK-{=uPtVvKH6mA64BN z=26mE00)X%?v3-?E^UZ6|6TX(p0gYo-qcY`rx{)0E6tR~7(Zo9&+>d4Rcjiz& za3%ih&UxkUpw7}W)%R9;NfB3LQ!#<3L%L}UPF1!2Q8DEZmqmFce59P>!E1VWU;16L zms(}cK5F4WFfz@asA_7rmiQX64#$u(zD5z|qDh&$P&2!eF3TPz18&3L0EI(8EucAB z33m9xjFDL0F&dwK*V|&?z+`#;>1UO)zR)ABv!=znV&Z*Xidq!Hs;b&*%7i$9-YvKq zVuwS?1#eZd4#Fm0eeK(K+0i38GY-XT<7mElweE^^;2}JT@-Vb`lk;h9Zm#)&Zxj9X zNK$U(u6x@3SN`|@gf6wYR+`W#sj+#xuuq~>mu(ET7u3w{+O zJA!u(SZ|x3PwK}2G2<{%iO>Q}Q-3K;s9PR37BUBS{yi{lN8bgn$T&DI<@R7mjg>|L zKs*kyciJn;-M$UG6&o z+2nPxg$b6ZnyXla?!ccnLeeAF&*X6yG_K?uODp1`}01fw(pF$^^_^-UDVRW zy=l#V8|FQo-N$w$cer#H7mFVtT3Uc{lr{B8^+HP%Hate${lA}Z@zbL7qLrTw)m2(nH$omV3`L;iL{k${)YY_I6kV&zS}H~AsY`| zy)}JNaQT+pmVSzcba$?N=Id?8XYxJRqLSI?wiPlYdb7t^%kjoxIc;fq~YLJ`GPMQ6^U-~+qSYGU~B1VgsQbva;$shW8z3itG&ct7eG)%}gR z|I#JElYHa7g3rn9+@b$&{jvWp<0~PDu-Q&OX{Rc_B!59z)y+%Z|Gv-G=bC4gj*|u* z6zNKxTAKF4G4OEljfRV!0d`+B@1VPsfge zj$}4s^c@P&vTG*74B zq(0=H1+Ei9_BzR_%X~Rh02DTzv%Xf$wEZ7Q4csLt&Srq}7(OdwN|XJHH${H-iz_f^ z1h>iJ5_NGA_Sfcn4DXb%^DGs)R|d{18{_PSjKo7MRTP0ixE=Pk)g2cc1z>xw(s~9m z0DFNox9V!Pbh=9AROlhB!-;k>$9HCn8dz}A15`>PtrH!jJ_G-B(KV{k!94M^+W0$& z3ku{4cnV=Ld>H{1HZ3{uE!SPATp`{tvdyQL)8r%`adpCA?hbnrRK(Tfs2+};zxm(~ zoAOUqKY~~MpBdaMSapU{#~y{)GRureSn^GUth%Y17KL)Ih9W^&C-c$uZ$Dv34jM|c z;t;84+x6e~<$tMRUo#MZt8+C8o#&|m<%K0#_(M-TA5c{;J7x#CU6AhhGL8NRJXQO& z5#7F+ngLXgVtoAt@zqc3wPfkWcar_i2GX{+Y)wvXDV0TyB}yfl(u ztb=pP>sDCP&-G6WI=8NTyKkLpD5x{wi7$Yl0kmC;-(X--9`=dV*iX=LL;NK7%m=c1sYsk$yRbm64`-cMx=35#ue85axBt`V5NX8P zwA6}o4)JRO@pPE(Gjdjcp>d+DKg;?!V2(r=O*RJIp_pT7L-t<5s!r#R442ENPP<35 z3g6vK1g)$}D_hXzUg%i`_ikUD3Xq)?99nLwG?53DzL6hZJt5ZZR0+#y^}i)p_=O8q zWAS1-ZttuwRbOZ-;rvs^jT;GItI9~Y8lNyFn=*z_A$&2QiojLLItjIoeaic1xrC?R zOav9Uw;F&JRY&u9RdG)tET!?2yA>}{(X0$${=2UBFtBj3X^0=+EBy7FG*0rwG9c;&?%X# zg`yun(;wN1x7y&{F67_rO`G^hcXDqF;C<~gmUo@q(%7DLG0))q*wE7Hp)kS&$%FU! zPBOQW)ywS^`mVuvZ9By9HjyEvUa4g@RS}hX#Xi@;FxaXCxv@*sv^>E*2`?4M zqRTBEji!BMM%cjBj)b{~KFG~!Nx;)^s26Pvt=ys#-9~8m3O%rG*`MCCSn>%Ah2U}= z1DS@(4C`vdlF7^3t;NKB=68(n1XygToRS%Y*rgK6^!~{sXu}gLKU^L8AhSiQ&H(3; zS3LsRyrT3dNFPF$#C$&MXZ<;0avmyP!)f zH8F^ElmGTF`51%$lks=(Pk3o2H=v{s+nW}7ATv$8;D+F3* z2yA2@OA_AL&KJleJEn-Z`uvq!>E*XjikVJ7?&_8Jo?E=3&eE=Yd?XgzMfE3Y-om=C zl>%uy=ESuR>P9F6>PV~9FQqPd1@l-zlySw~9YK~t2g(p`aztY2{U%_zr}OCI58Xxr zBoG_#Z1=0{NhI{?{IcSTlm$VkTsa*)Mr0Xu8FEj=PxvrhmSJF`Fx$9Opv<@vodc_! z@;Z9p9p}*G42@gQ%2JCfv+U8-Q(&^yv%SDNiNNEnx}QHfGr@9wZX~b};6!jjwZ*j6 z^h21GCjk%W^l5wR4kGKR2jU?W0dXyeM?x@p%pQIDgOt`1|LN(6vWLnig6ai!)I4_bwr7riqhAE$UwYJ<=9d!r!U8HszmI#!^1 z_Vn_Wh&ULjWe;w`+VdHQgH_4Rs>z0eoN2F(3HJ)_r-O59dI( z?GEp?ph_0W0{{jh3%?=UVzvk#0Q~#qtUcuZ>VOEp=J zA?ubxT?-D!2I|CtVatlPuu_wG1z8`U zOtpt$48^!JaD1>3c*<8G4yj*@xRPRlBx&S%b&p{CltxRs(2Nc!nN2B8PA#+6e#*8j zTXe;va{F-KM_Q*^6}xM<{o5tBYF#I`-&5swzt3mu6+%h@%!4231?tcyNg@lrmJHmg zyJ(2K%F*{y{3-1|-;MKsi9w!V!|2KEvQDRuOLomA->6TK(p(RdRL%C+*?aa~#dh;1 z66XxWNM^&0gd=UA&ds$j>i(0aI7xUN)dM90{-Y7K;MjJ)XV9m4gXUgJ;nTx}c6=_= zevy`_$*hvE&nSE4M!DqQd^ySPy2bZ9b9}Ds4@uvlbB^V8 zI^OsB$%cGX+@mj_;_9cVvX5#49vXBwX$+eHW+{Vn$%s zDp6WM+V%yx$*>B1O4Nr>5$UH+*h6I^NaEulAU`!}-+!L+q5dXC`YvAfZ-UF`g8Ntp z;m|5uf+CJT3$=r_U2>x1_QAB!HxxWSBSO!HLn}=+nOB;LKXqxbdIIn7(0)pz((+9- z`ho-DW`m2Kf{-N44r=#hKC3z!q&4MMgZ|oj_K{vT)r;GLRZ;6XVCJDebmp)HGH5SG zO_gfe66-EjVO_I*A3XgM!SD!}tAtzWR2-}togw;{j{VDQ*r)lvx{&>kDNd{Y;h4|| zmp-vwTdy-~;`gvC+k}AU0yHK?jAk9R<;Em)>Un(kkz-LcA(|Xt%%2s8N_u~K2F${~ zy&z|GC!fc5g{U|?I6NEuQ3oPAP4{!w4oG1CR^5AhMqh27TnddAbB73SM_lo;K!OtS7Pg);3WEj z4^~4_$$`#&Cb6iUyf`JaAf|!aTeIGb+d7d^aBVB zO00;b;Hze$@*9>b!ES<{L6#`eQ%+t5Gi8DmeombGRtFF?=Y`fT!3l|(a!la#3st}M zSY2+B%l(;&a7pIC$1}>OIIh$gC*m^`B2PL{%(4|7^$D?~(5Mh`6^k3dL#=Rd#+%|*1ATD3`!KULTZ`RM+GaRbmisHF;61OFRoZS^P=SsycC5e6`f1~(?;l8Y$&rPU1$;HTy;~LgH8IU~wk$bzS zK$ZSIg5?1>cv9);enB^}HQ$rJZZBnB<39_r`lOOE-?&K=>CYVaW41qaq5~&IKG;Ut6{)-BmV8A!ua+lmcp$wn^#_mo#7t<=+Mh#N^H#>bipk5oN-54a z3iYtSp5XgX%el#(a3HlD|pnu|2kAZZ|(TWK_|Km(f;|GYQ@amgz3t;JU| zuEQb+t*PuSPuD2rn00;$(?~8d*60;8X;%FlNo`1t)dBB@IoOfhyBv0!jkN-$1a1@e zbVpcqCB#VG!8ULikR>reHVmR;5E|Y0*)5B}KQk|ut(hVxo#`93`;w2QWFrCEWG9Ov z+uhQ{p>;n+ybu2fPQ}&3l2?pO!_D*WUIhBMi3fU(=$$N>)a*0_w$xC@d@3kR3!2#< zZVB%NRz{Z!Y}Bf&=B=A_umF0COomN{-aJDc13>e;)V!d&LPpG$%gWD;nKLiRp(SU} z6Cxb@K7~xzsz&V@toJz@Os|)HHY*r-m00KEAWFjSe5JCGe9x3CvhnX@=bMh(JK}wD zG~niz@pmkv8x@+RX^pJw?(Sq3YOp@-dfxYeZ3buG0KIQZY}%v{SFo*l%sYIp)WxWC z(0wX1ENMhS{(H5Mb7%3FJ=%hO&6vqqcz48SZ8sQxE!iJs@kMswQ3dE~R%#O$3J9po9gL?v>nWbnQp=hY`WRx6ZSTYj+>evLq*3HsmU9jOI6 z?&8KFQzji4Cj%N*BTqw+CWmJDPnzu+R7{Ux0QMvFff1VCTf^q~e_wsn?{)*!1yI{O zge&M-3!*6#i#2u}L1C+j@faxnUcD%bB&iSWo<3t$&d>Icj@bPV#hTHgER^zoZl+YV z6qRlM-wG-kF;vtT&X|Y^gNN^qK_MUCrVaGH`Tce-?jd$L^NJGDk-yA^DgN|CM zc*;?~pKS|s|L4fKSMIlg-s^jJp7vbf0=@iv!Yjb!TklkoGOu1I_a_{YJH`Ggd$jy8 z24MMMDVI+UZT@Zyb?n8EpbN_wQ%cy<*anUcpI`|Xqx?EEPMFdT&#Z6I1 znpoyr(gZhLF;8n@-He=Uk#MHe`s+|EfVhV@N7oka#kRQ!?Afsq>)THm(IivCsS`E4 zJ})tH>;ktZ`XHWlwEE+AR&u!yv|Mgy=lGnxASKn-2XK8QLiV@gdN|B8v=?T@s5n?0 z`z_@Kw3TZ>h;_Yk+UwthhYxgIsDQ&S9aw)J%y%h~@7`vTth6(iSTf4V?1`&7tAh+2 zzJV-TL$f(z*2p}BfVIRVf%~pbi_vR%{_e3`dX4P$&tOw6A8M`YJ44-}G}CLtm5Ob+gzAFYign z_dbOEe@-;g_1Vmv+!DSrOeKW=xgKx>G;18(z`XS?pW`i?sxdvZL)0k}gtm*Y`Aft? zclE6wzzwPYr5A_3@?vEc31jaSif72PL0n?&N4zX#Q`IyoijHwiH43IQ+y9{cJ4DTt zYNWwXDDj8H)IyG%@G={{!3h#$J@h{oksz&!zV6A>yReLP09dQ(m@`Cz?rKS-_c^|} zV3n-lgrXtbFY?a`NmUdHmqh<}CDUGT)w8|u&@-dbCsQwM%HLlSl6cBKCbYGdC4AE+ z5UP!8+JH8rM0PkR3ix`;gwQEQ{$!<4JsE;lCK<=o8X zdHMHWO#Arvx4rGd=B`Sp{PWurVK9i<0Kh#u=VVIrF8o8n%H_}k#FK0W&zo$XQ^Cy9 zJtV+#1scSEG}u_X31G&Cx#XOc3Y9SC{B{hZcwKr{i{;gDz>}}^1NDJ>R`>ojPcZ*4 zs-RS}3hy+KggXhv7GL&zr1En>(_~a^gvdZj-iFjsl$odC%rHNj`bfVD5lOom$?@wz zWWQ%G9zvO$*e{egJ_oopqaWP^8pbdqfp6nUTDj4a!(Vfbt)Y#_u|U|TKWX%ga)a!s zY|^5k`?{Yow;WqJK!8{6q27t@aYWNBq8#4VqVVtb8M2xg>xX_fP0RT zK{uIDVHx}EDRy|^GeWP?vY=fzmpVf!MOZLqi@+FcO3@J@!SDqOq0va!wR>;$>8rhz zq(-NNQQ_SMyX*|(7+p!W5N@*?$V-ScC*8IF;zz-e2Jmu?sYXMcX$I(? zB5TC>CnEh_>4Hjg-}2un$jp7fkTPS_xR6Uzb7agG$WOpG%p8bFwlNbwA3qM^=973>3I{S&9_jb9`r0HB;jxyN zQ?Hdkwm)-h&#?R_x zJzGPQ6u|BwYwdX12giT=}KtdzqBg>4MGSMEbZc{YR$fQ$kjKk<~B9d{C zMB<#77;Iy3TiXh)rcdMl`mdQ=`wBd&J)q$#4Ke&!DuClF2{im^Vu4&W@vHw)qMl6b z<6A>|a*-F}Yoew1^f-kfd$ z@KpXUhk5n;ZDFYeA%L1Ry@RkR%hYWf!&geVgRgL(GacpUKppXKY_GF>u@HI2x#F{P zJ!CF2QXw}E581Ue!)!OPr^XEUnEt)q1okPB9Axq+5=zPDFG=X7egX427rBufg@{9% zEd}$dCJDkm(6_3OJzrsY4Y=3d2wC`YxLu)kp?UV^4DF|K8Q8osc6*@z^RWOz-DLy@U1nzEq@M)(#a7fNe#y#5Mt1q#D;4|3gYI zg5^b;&#h8dzF%s7NvWSQCcLeJ@l8{;Cf4qXCo#NB*%tn9RPzLH7tV7`#S7rR9*o19 zTEKyUF=S;2@}5<_Ba>ME;%o9uf33_VgptaUOkpbA+{EO`+&qvRXZypwVM%Lm(fpAN z$;r<9L8Au4_|sWf=?Xoe7gIebwtXn4H3H@-ko}Zx%2SoNoljJSmaNGnqmD+`WXVm~ zj*sYs+Kb$AW+ZD>N!D8tr5dG(iP)R%4SIYwAzka2a0kfDp$K*=C|Fd?R*WRWjX!#g=^~%I}PH@w(nCZhPUsb z2^AAqov>}1hFJe;{?pt%8EH9}@Dxd3)!Gh9k(I_)Sl2h^v37tvzK{G0)Cj`2ReK#N zoy4K+Mk+^rq*+Tgg<+AcAL8OsTZH0blD4x4~mQpUbBy4v~QJ#&; zvyHBfoF1$`AMs9LO4XAw{|(_*a0^|d@wpD(J!9X4i|syGy;J+v*V*}19)AnHUi1Mb=1g8^#09} zg@Ex_OQmD3pM#8nIN>XjfFbO5MvmE9^2H|On}F@emVeI>fFYTVhNcS*vzOQ*sIW|J z5j_7Ui77APsY<5@E-1N8fD)eUm62 zb@GH)Tr}A}Ax5ArhU~I616!3_r(%pLHLI<)yIh*>I2ap*SkhW8Q|24%zTaCm$O}@s zwPhjp7Jyf(68GSbo1AOrp?@sd5dZmME@yHb%Aug-v?bttjoGGvc~uEA)_ag%mCcW^ zJZwRBer~N~G}4xv^W7w==m{Yom528*^!0bemk^5Ef~V;NcI`X%D&Ln7{!N*M6?ZH9QYsppDoNrf>EP z#A?vLRdI=n&;)`t#Xhdo#vmV04X%8M_IfE1$_`-*&GNskP%>!gz^e(l{RkB9DWRW_ zikTsx_yV-L%ZjWZ@#AZFKg;*RfUorUJq%1P}g;FMyS~EQg2WRxDD(&;# z8siUL*=}MqxU&HdAL9ORVmk-M+QUUg#gfKxprjy61@8me1x?fmQ^4#HSL9hR#=J;YO_Kg>9YU@`iL< zOb|hlGk{%Y%R^6Te49X)kc4_DL6=hsZFhdzPFJ{i6~>hzw%7-pOg(7N9F zBbkneWIDfO7jh*p*Ttr*68&?Xb)zY7A zEtAflA>-r7f29rMb}WrqEX>;LtYpH&xql?CEevCYv$U{WiKtFn%$C()B6zVth`q_x z{bcGqR>?zIhER3#Ux3v!jROPlLl3VGp;vQ%&@RpjO*1_@R_d;(xpMIQ%Ijr#ycv{B zY#NsCU;2yeNLzeezR^#XYBjab+V^$e%AA1?PAv7wlV6S4Q#PL)b&4D{8z?6+5YJ;I z{UgxleU*L8TXqv(Jhu@w%6&!iD-Je)Fdw=%%5|v;dajRWUjsmRmoHL0ewYhqdP*J# z4XIG&mGP%L@qak__)@Wmdc9}GhXM8WJfTx7rr%4enbYj~FI{Z#kg}c5l2Jmrh3JD; z*r1reT+g8@WC8m^69e&!@Pw@a4D!(A1O-1U5d6a0Jihn) z_6fjyu~-L`#BW>i!pR}?GrC|H=kwCzafEFj1}>iQgD=2=E@ybxz9e7v#tU~NDW=-u zl@9Rnv2&aUz`9!TXv*Yx=(qaq$xuBQ4*@SFIXvJ8ixB*FCTbf1xPgt zX{ZJ=n&{s;D-r#`CQXW%i0?79HgbDfXc#U%7hIn61as;OHDY8WEcbniBqi0lA}vB$ zzcLJ3HK_mO__|U8K3BTqsAStyH19miw-}DX^<4lyWFurzoz@JolA)}w%y?LO>W&ep zZeeYKCekk(E`Eg`+Bhowb?iR7uUC?wFAE(Tda++%1X5#xZc$;0X8|W^cvAaSCD%J= zP-Jyl478)#wABIC2yzSosumkiAUS1#?qXt;TlOLp+y{Im)teDgGp0rOLY1=E*SAmA z1SOqbs6N(R(tQQvhuA&qivGi~5te}{_Tz-J)B=AK|{rVB65NA>2eBNaM(fU%LRssBixoH}oS26N7 zMLp?T1Sv{`EWR7RBA@qN1jeJKd~1#ztM=1gl;VK>B7q z9kbt!untP0U`9x@wBQJLJ$Z{7fM5w*F)q&-2&ouP>-jaY+=3NV0)amK3Ov%e+;9|k*t^GwRWCfF8& zNvkRaD9hqFOs^?VKXYQ7e882uzCFm9C##XQi^4=a;3$cy8?`WP%vjsmVvX0dNRU1(Al1Ig5o+XYyuRN~a7dvFFvvq!>OMH7{Qn5{8lYY8fMv5X_ej-Z69 zxBOaSz;p!W4nj2)P%x0SM!dIoEc>56G#SGi1Ihs4o~%B3mr0_FfdGA-#_ukgUZU>Q zcOBT){H&_A^eF@1*RdJH%8hZJ1~l^P3Li=i$vp&^QO^_4&u#D0fr$akth-dUl>#`n zNgp(Hl1zleC8+BM+=LevW4K&nIeO-}7~Qh`$8Rwa7~cBfau2l<)=JfXXoP0iO?vSI zHVk%ll(ydc*<~&Yt)8wiBC4c=+Tz-=fMIK;>H|Hd1jq-zc&E0z-Dykq#$Oae|8@*DcJnbl9WnFTM{td3a}{_df4Z_yF!E=+bBFwVA7 zy6$B`0!VcOH|wvzFPn=KS|$gOlR`?iWtxIQZK6bis#)bbpYo5XS#ABi?J?zo*IvjD ziM%`xM`0sP8-l{klkW|Rk`(09#S|dUh3aT;M(t3Iep?H_jNBDgliD(*2i@mOdvu9Z z2*6rw94*zxEF7vf^Vy~kydiMx{vpnLD0*46Cvd4ZG@LDSOIJGtS9o+}V{y&fLI94J`)_F3KQ z6c=XC4a>A34T`Zih^}!J?Y0&RaqG6B~)~0E%pg-gypPGLtZR1~;mve_M%{+|BWdcMr=JBTF|In!8`T5-Aa5}HVLaZi*-V;7_6pAYChV@{9W<|D8ZD?TXK9%FOgO$6C?wq~x4e;E5cR&(K>mpw~T86?{ z!W+?bXnm3m&DyeD{AgpLKbgeQyf#t9z3#W_Ww3j%O2TaZlt_BwQ!|}FrQb&?KNge! z$+UI-7K#&vmXHK$H8afO6B*qpRPM0U>vQz~+<&0QslU&qlX|CiiJxDgnUqp=)6ZeT}!mQi@<=YbT3vBKg|~?5x+}8aW;W9_pZc$ zOs5@8Vz#nEQW@c-lD7e?rsPHBe}lIk`SS@EGp~oX$&L({xBj~>znFX zq~aEQRf<}28m3%Yfm<)VmSSFrqAd&n|9GYVN%1v*Hm6j9^H|NW!RK}}F4ZsW*>Fw^ zxA01)tD>qqp(gISo2kZJcIs5<4Y;Y84Vb#5H~6By*Pdo8PV;BQF&|jpYVs*lRqSoM zHoJ`f7|r}aDJ|=@)c~FrrP^vrE64IvVGy69@OEvhdAi7DggS8?`QG9SVq}-b-w+es zI$KN7A3RrvrG=FWDtu2XNXKEfgk*^p97|0}MdQt@<(;`*!`1ZZd@SD9O)k?J-Sfke&H*SiFpjC5`4OUbhdOiXx;2rUZ z7zGulB|e6AeYZ}65Z}G1{nB$sOB-R%8qsCji~4?tVB=&pueldSem|q7VEe-PCaj`M zOOuBGcoVLso=_%vyl5p4(P#s4MOkisR;q|AtL>HusTj;stlVv}f~{|p?6hySD=a5w zUi0CfmYSb!{HR0d#irn|C~}b^=>EM+(YTH9%7=e=ykL1qf4p*K(nMq_! zdVFJXo++A>BVSWlp!cb56)4Lt>ck_C(T#1pBqPJ~Nqg?a!9l`;MB$!uiM{A*|15<( zw@q6;Z__P`u5fJvfV`rL7rp+)SbQ>3MC-_3_LHT3H6j+4ko&2}Ax#SMS0iRmqm7>5 z_AkRQr2yM}QwtFTHion;UEleY^UWaCNRTJZb>+creD6YX_gO=n+X?_+IVN(l6uC;Pt$ysNKy{DSy5aQNRfB?e zvJuDEcZ3ae^eocGZw68hXZC4&5xRW>^;C|5v%YEhCPEll&Hk2izbv zt%9?8nRKD)2Ri+ECrDqHC$--*Dp&H+@LX4G8Q!As0-j4R=rW2jDq zv*U9LZkn}zTh`2WP4TRQtV4QIZ=P(@KD0*m9$D<=`P91-+)dN|0EEJK)(Q#zpf~*X zi5y+&Eq{r6U@0kJBNE+Vy?AT%MsgfW*0vz8^k2W?`00AO**-n>NDo{DSM0hdyX*il@s>+}!t|<#88|1*dGh=7I02(F5~`Mq;~|dJX8!I1iQk zgk^i92w55F2uHAaL@&#)?%^U?SpS%PV9AS2b~bx)xalOJbcs#f!1qsM A)&Kwi diff --git a/antora-ui-camel/public/_/img/support-7219bb2f58.svg b/antora-ui-camel/public/_/img/support-7219bb2f58.svg deleted file mode 100644 index a0edf329677..00000000000 --- a/antora-ui-camel/public/_/img/support-7219bb2f58.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/public/_/img/team-899f1050c2.svg b/antora-ui-camel/public/_/img/team-899f1050c2.svg deleted file mode 100644 index 736e7648cb0..00000000000 --- a/antora-ui-camel/public/_/img/team-899f1050c2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/antora-ui-camel/public/_/partials/head-styles.hbs b/antora-ui-camel/public/_/partials/head-styles.hbs index 76fb23508b4..b816d8f9d1a 100644 --- a/antora-ui-camel/public/_/partials/head-styles.hbs +++ b/antora-ui-camel/public/_/partials/head-styles.hbs @@ -1 +1 @@ - + diff --git a/antora-ui-camel/public/_/rev-manifest b/antora-ui-camel/public/_/rev-manifest index 458bf9caa1f..e9f12253d3f 100644 --- a/antora-ui-camel/public/_/rev-manifest +++ b/antora-ui-camel/public/_/rev-manifest @@ -1,12 +1,9 @@ { - "css/site.css": "css/site-697c9df5c1.css", + "css/site.css": "css/site-5bf9477644.css", "img/algolia.svg": "img/algolia-f4ab98e0de.svg", "img/apache-kafka.svg": "img/apache-kafka-88809b7472.svg", "img/apache-karaf.svg": "img/apache-karaf-7bdb5ce2e3.svg", - "img/articles.svg": "img/articles-88ac404d18.svg", - "img/asf_logo_wide.svg": "img/asf_logo_wide-3982e7e19b.svg", "img/back.svg": "img/back-e8d811f74c.svg", - "img/blog.svg": "img/blog-4c7fa4cb60.svg", "img/books.svg": "img/books-77a59b07e1.svg", "img/brand-logos.svg": "img/brand-logos-a2b35bbdec.svg", "img/bugfix.svg": "img/bugfix-4280bf9490.svg", @@ -17,21 +14,15 @@ "img/cli.svg": "img/cli-9cede0128a.svg", "img/close.svg": "img/close-af0b99e31b.svg", "img/community.svg": "img/community-2ec8a3dc8b.svg", - "img/contributing.svg": "img/contributing-107909992d.svg", "img/copy-checkmark.svg": "img/copy-checkmark-9a4caf1664.svg", "img/copy.svg": "img/copy-d7c1e3194d.svg", "img/docs.svg": "img/docs-7d0adf1156.svg", - "img/documentation.svg": "img/documentation-abb1b7f8b1.svg", - "img/download.svg": "img/download-63cdd75074.svg", "img/examples.svg": "img/examples-07d01f2bc0.svg", "img/github.svg": "img/github-0cae1e39c4.svg", - "img/home-o.svg": "img/home-o-97a33fc02f.svg", - "img/home.svg": "img/home-934e2b15ea.svg", "img/jbang.svg": "img/jbang-e88e00f7fa.svg", "img/karavan.svg": "img/karavan-8621354711.svg", "img/knative.svg": "img/knative-5010ee4773.svg", "img/kubernetes.svg": "img/kubernetes-07ba46aaa2.svg", - "img/logo-camel-medium.png": "img/logo-camel-medium-372cf8688f.png", "img/logo-d.svg": "img/logo-d-a567cee6fa.svg", "img/menu.svg": "img/menu-8775cec4be.svg", "img/quarkus.svg": "img/quarkus-446ffca541.svg", @@ -40,8 +31,6 @@ "img/security.svg": "img/security-06abe157b3.svg", "img/sparkle.svg": "img/sparkle-da54b1f43c.svg", "img/spring-boot.svg": "img/spring-boot-0a7cb95564.svg", - "img/support.svg": "img/support-7219bb2f58.svg", - "img/team.svg": "img/team-899f1050c2.svg", "img/tooling.svg": "img/tooling-f5e235c238.svg", "img/user-stories.svg": "img/user-stories-cccc5f7c8f.svg", "js/site.js": "js/site-354642194b.js", From 0511450a470ad6f2edc6f5c29291e25b1db90f77 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Sat, 5 Sep 2026 13:44:05 -0400 Subject: [PATCH 148/209] refactor(releases): drop the unreachable download-page branches from the downloads partial With the downloads shortcode gone, every caller is a release-page partial that passes Version and none passes Section, so the `eq $.Section "download"` blocks (Version and Note columns) and the no-Version arm could never run. All 482 rendered release pages are unchanged apart from whitespace. Co-Authored-By: Claude Fable 5.1 --- layouts/partials/releases/downloads.html | 67 +++++------------------- 1 file changed, 13 insertions(+), 54 deletions(-) diff --git a/layouts/partials/releases/downloads.html b/layouts/partials/releases/downloads.html index 434586f4025..73e1b46bea5 100644 --- a/layouts/partials/releases/downloads.html +++ b/layouts/partials/releases/downloads.html @@ -50,30 +50,24 @@ {{ end }} {{ end }} -{{/* if the version we're asked to render ($.Version is specifically set) and that version is contained within $versions, i.e. it will be featured on the downloads page, that version is current */}} -{{ if $.Version }} - {{/* when version is specified, this is included from the release page */}} - {{ range $version := $versions }} - {{ range $kind, $v := $version }} - {{ if eq $v $.Version }} - {{ $is_current_versions = true }} - {{ end }} +{{/* if the version we're asked to render ($.Version, always set by the release-page partials that include this one) is contained within $versions, i.e. it is featured on the downloads page, that version is current */}} +{{ range $version := $versions }} + {{ range $kind, $v := $version }} + {{ if eq $v $.Version }} + {{ $is_current_versions = true }} {{ end }} {{ end }} +{{ end }} - {{/* we have determined that the $.Version will not be rendered on the downloads page, so we need to link to archive */}} - {{ if not $is_current_versions }} - {{ $artifact_base_url = "https://archive.apache.org/dist/" }} - {{ $meta_base_url = "https://archive.apache.org/dist/" }} - {{ end }} - - {{/* we're rendering a specific version, we don't need all collected kinds/versions above */}} - {{ $versions = slice (dict "" $.Version) }} -{{ else }} - {{/* no $.Version requested, we're rendering the downloads page, all versions should be current */}} - {{ $is_current_versions = true }} +{{/* we have determined that the $.Version will not be rendered on the downloads page, so we need to link to archive */}} +{{ if not $is_current_versions }} + {{ $artifact_base_url = "https://archive.apache.org/dist/" }} + {{ $meta_base_url = "https://archive.apache.org/dist/" }} {{ end }} +{{/* we're rendering a specific version, we don't need all collected kinds/versions above */}} +{{ $versions = slice (dict "" $.Version) }} + {{/* the same version can be matched by two kinds (say be latest and lts at the same time), this merges the multiple version entries into single */}} {{ $versions_grouped := slice }} {{/* check by cartesian product, we don't have much option with the capabilities we have here */}} @@ -117,10 +111,6 @@

    {

    {{ .Params.cve }} {{ .Params.affected }} {{ .Params.fixed }}{{ .Params.severity }}{{ .Params.severity | lower | title }} {{ .Params.summary }}
    - {{ if eq $.Section "download" }} - - - {{ end }} @@ -144,37 +134,6 @@

    { {{ end }}

    - {{ if eq $.Section "download" }} - {{ if gt (len $downloads) 1 }} - - {{ if gt (len $downloads) 1 }} - - {{ end }} {{ range $idx, $download := $downloads }} {{ if ne $idx 0 }} From f373ba34cbac0c5cd2a72b5866f0c3ec5c4131c6 Mon Sep 17 00:00:00 2001 From: Adriano Machado <60320+ammachado@users.noreply.github.com> Date: Sat, 5 Sep 2026 14:03:45 -0400 Subject: [PATCH 149/209] feat(chrome): adopt the DocSearch v5 launcher from main in both headers Rebased onto main, whose PR #1729 replaced the hand-built Algolia field with DocSearch v5. The redesign had restyled that field in the Hugo header and moved it into the Antora nav panel; both now mount the launcher in the header (div.navbar-search > #docsearch) and header.css dresses it as the 200px field the artboard shows, with a visible keyboard focus ring. docsearch.css themes the modal with the redesign palette instead of the old greys. The nav-panel field, its clear icon, the results styling and the "/" hotkey are gone; below 768px the vendor sheet collapses the launcher to its icon, so search now stays in the bar at phone widths (measured at 390px) and only the GitHub link is dropped. Also from the rebase: yarn.lock regenerated with yarn 4.18 for both sides' dependencies, main's ignore rules restored, and the Antora fixture harness sets NODE_PATH because Antora 3.1.15 resolves helper requires from the playbook directory. The specs record the change. Co-Authored-By: Claude Fable 5.1 --- .gitignore | 3 + antora-ui-camel/src/css/docsearch.css | 88 ++++----- antora-ui-camel/src/css/header.css | 174 ++++-------------- antora-ui-camel/src/css/nav.css | 94 ---------- antora-ui-camel/src/css/vars.css | 1 - antora-ui-camel/src/js/08-search-hotkey.js | 13 -- .../src/partials/header-content.hbs | 3 + antora-ui-camel/src/partials/nav.hbs | 8 - .../plans/2026-09-03-shared-chrome.md | 2 +- .../specs/2026-09-03-antora-docs-ui-design.md | 5 + .../specs/2026-09-04-home-page-design.md | 7 + layouts/partials/header.html | 6 +- tests/antora-ui/build.sh | 6 +- yarn.lock | 24 ++- 14 files changed, 121 insertions(+), 313 deletions(-) delete mode 100644 antora-ui-camel/src/js/08-search-hotkey.js diff --git a/.gitignore b/.gitignore index 469de2aa102..2697c4c4a08 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ antora-playbook.yml /.hugo_build.lock /tests/antora-ui/out +.playwright-cli/ +skills-lock.json +build/unused-media.txt diff --git a/antora-ui-camel/src/css/docsearch.css b/antora-ui-camel/src/css/docsearch.css index a509a45d175..52b99bf6d9a 100644 --- a/antora-ui-camel/src/css/docsearch.css +++ b/antora-ui-camel/src/css/docsearch.css @@ -11,41 +11,45 @@ NOTE the values are literals rather than var(--color-*). postcss-custom-properties substitutes var() in ordinary declarations only, not inside custom property declarations, and the palette it would have resolved against is gone from the built stylesheet. The vars.css token each value - comes from is named alongside it; keep the two in step. */ + comes from is named alongside it; keep the two in step. + + The launch button itself is styled in header.css (.header .navbar-search .DocSearch-Button), + where it is dressed as the field the artboard shows. */ .DocSearch { - --docsearch-font-family: 'Open Sans', sans-serif; /* --body-font-family */ + --docsearch-font-family: 'Open Sans', system-ui, sans-serif; /* --body-font-family */ /* Camel orange takes over the accents the vendor sheet renders in Algolia blue: the magnifier, - the matched-text marks, the focus ring, the footer key hints. Not --docsearch-logo-color: the - Algolia logo hardcodes #003dff in an inline
    VersionNoteDownload Signature and checksum
    - {{ else }} - - {{ end }} - {{ $v }} - {{ with $kind }} -
    - {{ . }} - {{ end }} -
    - {{ else }} - - {{ end }} - Release notes -
    - {{ with (index (where (where (where $.Pages "Section" "releases") ".Params.category" $.Category.id) ".Params.version" $v) 0) }} - - {{ with .Params.jdk }} - Supports Java {{ delimit . ", " " and " }} -
    - {{ end }} - Released in {{ (.Param "date").Format "Jan 2006" }}{{ if .Param "eol" }}, end of life in {{ dateFormat "Jan 2006" (.Param "eol") }} - {{ end }} -
    - {{ end }} -