From ef59ce89d771784e2340a720177d358d5aa720ac Mon Sep 17 00:00:00 2001 From: Jose Alekhinne Date: Mon, 6 Jul 2026 19:53:05 -0700 Subject: [PATCH 1/8] feat: self-healing journal import (Phase JI) Make `ctx journal import` growth-aware: the unit of memory becomes the source transcript (has it grown?) rather than the output file (does it exist?). --all now imports new sessions AND re-renders any whose transcript has grown, skipping only unchanged sources; hand-edited entries are detected via a body render-hash and never clobbered. Wired into a SessionEnd hook and the wrap-up ceremony so it self-heals with no flags to remember. Adversarial-review fixes folded in: - C1: `ctx journal site` refreshes the render-hash after its in-place body normalize (+ persists state); otherwise every site-normalized entry was false-flagged as a foreign edit and stranded. - M1: the source stat is committed by execute only AFTER a clean write (via ImportPlan.Sources), so a failed/partial grown write no longer advances the stat and silently forgets the growth. - M3: resume/multi-file dedup keeps the richest transcript (most messages) and growth compares the source path too, so switching to a larger resume copy counts as growth instead of truncating. - M4: adopting a pre-v2 entry backfills its render-hash so a later growth sweep can self-heal it. - L1: grown re-renders count as GrownCount, not RegenCount, so a routine interactive sweep no longer trips the regenerate prompt; the summary reports "complete N grown". - L3: entry writes are atomic (temp+rename); the SessionEnd hook can be killed mid-write. Regression tests: full New->Unchanged->Grown->ForeignEdit cycle plus a failed-write-does-not-strand test. Spec: specs/journal-import-self-heal.md Signed-off-by: Jose Alekhinne --- docs/cli/journal.md | 69 ++-- docs/home/common-workflows.md | 11 +- docs/recipes/publishing.md | 16 +- docs/reference/session-journal.md | 22 +- internal/assets/claude/hooks/hooks.json | 5 + .../assets/claude/skills/ctx-wrap-up/SKILL.md | 20 ++ internal/assets/commands/commands.yaml | 19 +- internal/assets/commands/flags.yaml | 2 +- internal/assets/commands/text/headings.yaml | 2 + internal/assets/commands/text/write.yaml | 2 + .../copilot-cli/skills/ctx-wrap-up/SKILL.md | 20 ++ .../opencode/skills/ctx-wrap-up/SKILL.md | 10 +- internal/cli/journal/cmd/importer/run.go | 5 +- internal/cli/journal/cmd/site/run.go | 28 +- internal/cli/journal/core/confirm/confirm.go | 3 +- .../cli/journal/core/execute/cycle_test.go | 244 ++++++++++++++ internal/cli/journal/core/execute/execute.go | 41 ++- internal/cli/journal/core/plan/growth.go | 81 +++++ internal/cli/journal/core/plan/plan.go | 66 +++- internal/cli/journal/core/plan/plan_test.go | 300 ++++++++++++++++++ internal/config/embed/text/import.go | 3 + internal/config/embed/text/label_reason.go | 3 + internal/entity/import.go | 31 +- internal/journal/parser/parser_test.go | 35 ++ internal/journal/parser/query.go | 28 +- internal/journal/state/hash.go | 31 ++ internal/journal/state/state.go | 84 ++++- internal/journal/state/state_test.go | 117 +++++++ internal/journal/state/types.go | 36 ++- internal/write/journal/source.go | 8 +- specs/journal-import-self-heal.md | 188 +++++++++++ 31 files changed, 1460 insertions(+), 70 deletions(-) create mode 100644 internal/cli/journal/core/execute/cycle_test.go create mode 100644 internal/cli/journal/core/plan/growth.go create mode 100644 internal/cli/journal/core/plan/plan_test.go create mode 100644 internal/journal/state/hash.go create mode 100644 specs/journal-import-self-heal.md diff --git a/docs/cli/journal.md b/docs/cli/journal.md index 28f8b3f31..81388b269 100644 --- a/docs/cli/journal.md +++ b/docs/cli/journal.md @@ -29,12 +29,14 @@ ctx journal source [flags] **Flags**: -| Flag | Short | Description | -|------------------|-------|-------------------------------------------| -| `--limit` | `-n` | Maximum sessions to display (default: 20) | -| `--project` | `-p` | Filter by project name | -| `--tool` | `-t` | Filter by tool (e.g., `claude-code`) | -| `--all-projects` | | Include sessions from all projects | +| Flag | Short | Description | +|------------------|-------|---------------------------------------------------| +| `--limit` | `-M` | Maximum sessions to display (default: 20) | +| `--project` | `-p` | Filter by project name | +| `--tool` | `-t` | Filter by tool (e.g., `claude-code`) | +| `--since` | | Show sessions on or after this date (YYYY-MM-DD) | +| `--until` | | Show sessions on or before this date (YYYY-MM-DD) | +| `--all-projects` | | Include sessions from all projects | Sessions are sorted by date (newest first) and display slug, project, start time, duration, turn count, and token usage. @@ -87,23 +89,46 @@ ctx journal import [session-id] [flags] | Flag | Description | |----------------------|-------------------------------------------------------------------------| -| `--all` | Import all sessions (only new files by default) | +| `--all` | Import new sessions and complete any whose transcript has grown | | `--all-projects` | Import from all projects | -| `--regenerate` | Re-import existing files (preserves YAML frontmatter by default) | +| `--regenerate` | Edge case: force a full re-render of existing entries | | `--keep-frontmatter` | Preserve enriched YAML frontmatter during regeneration (default: true) | | `--yes`, `-y` | Skip confirmation prompt | | `--dry-run` | Show what would be imported without writing files | -**Safe by default**: `--all` only imports new sessions. Existing files are -skipped. Use `--regenerate` to re-import existing files (conversation content -is regenerated, YAML frontmatter from enrichment is preserved by default). -Use `--keep-frontmatter=false` to discard enriched frontmatter during -regeneration. - -Locked entries (via `ctx journal lock`) are always skipped, regardless of flags. - -Single-session import (`ctx journal import `) always writes without -prompting, since you are explicitly targeting one session. +**Self-healing, no flags required.** Import's unit of memory is the *source +transcript*, not the output file. A sweep (`--all`) automatically: + +- **imports new sessions** it has never seen; +- **completes grown sessions** — any whose transcript gained messages since the + last import (for example, a session imported while it was still running) is + re-rendered up to its current end. Claude Code transcripts are append-only, + so "it grew" is detected from the file's size and mtime alone; a partial + import is just an intermediate state the next sweep finishes; +- **skips unchanged sessions**, byte-for-byte, writing nothing. + +So you never have to remember to re-import or time it: importing a live session +mid-flight is safe and the next sweep heals it. That "no new flags" is the +feature — it is why import is wired into `/ctx-wrap-up` and a `SessionEnd` hook, +where it runs on the way out of every session (idempotent; one `stat` per +session when there is nothing to do). + +**Your edits are never clobbered.** Journal entries are meant to be edited (add +notes, clean up the transcript). Before re-rendering a grown entry, import +checks whether the file's body is still exactly what ctx last wrote; if you +edited it, ctx leaves the file untouched and warns, pointing you at +`ctx journal lock` (permanent protection) or an explicit `--regenerate` +(deliberate discard). Locked entries are never rewritten under any flag. + +**`--regenerate` is an edge-case tool**, not the routine path. Reach for it to +(a) mass-re-render after a change to the render format, or (b) one-time heal a +*pre-self-heal* entry that an old mid-session import truncated — its source will +never grow again, so the automatic path cannot heal it, and `--regenerate` +re-renders it from the full transcript. `--keep-frontmatter=false` additionally +discards enriched frontmatter during that re-render. + +Single-session import (`ctx journal import `) always re-renders the targeted +session without prompting, since you are explicitly targeting it. The `journal/` directory should be gitignored (like `sessions/`) since it contains raw conversation data. @@ -111,11 +136,11 @@ contains raw conversation data. **Example**: ```bash -ctx journal import abc123 # Import one session -ctx journal import --all # Import only new sessions +ctx journal import abc123 # Import (or re-render) one session +ctx journal import --all # Import new + complete grown sessions ctx journal import --all --dry-run # Preview what would be imported -ctx journal import --all --regenerate # Re-import existing (prompts) -ctx journal import --all --regenerate -y # Re-import without prompting +ctx journal import --all --regenerate # Edge case: force full re-render (prompts) +ctx journal import --all --regenerate -y # Force full re-render without prompting ctx journal import --all --regenerate --keep-frontmatter=false -y # Discard frontmatter ``` diff --git a/docs/home/common-workflows.md b/docs/home/common-workflows.md index a2f459d0c..c9fca5fe8 100644 --- a/docs/home/common-workflows.md +++ b/docs/home/common-workflows.md @@ -130,7 +130,7 @@ pipx install zensical Then, **import and serve**: ```bash -# Import all sessions to .context/journal/ (only new files) +# Import to .context/journal/ (new sessions + any that have grown; self-healing) ctx journal import --all # Generate and serve the journal site @@ -141,11 +141,14 @@ Open [http://localhost:8000](http://localhost:8000) to browse. To update after new sessions, run the same two commands again. -### Safe by Default +### Self-Healing by Default -`ctx journal import --all` is **safe by default**: +`ctx journal import --all` is **self-healing by default**: -* It only imports new sessions and **skips existing files**. +* It imports new sessions and **completes any whose source transcript has + grown** since the last import, skipping only sessions whose source is + unchanged. Hand-edited entries are detected and left untouched, never + clobbered. See [`ctx journal import`](../cli/journal.md) for details. * Locked entries (*via `ctx journal lock`*) are **always skipped** by both import and enrichment skills. * If you add `locked: true` to frontmatter during enrichment, run diff --git a/docs/recipes/publishing.md b/docs/recipes/publishing.md index 9e4d2ec4b..8eaadd543 100644 --- a/docs/recipes/publishing.md +++ b/docs/recipes/publishing.md @@ -71,10 +71,13 @@ ctx journal import gleaming-wobbling-sutherland Imported files land in `.context/journal/` as individual Markdown files with session metadata and the full conversation transcript. -`--all` is safe by default: Only new sessions are imported. Existing files -are skipped. Use `--regenerate` to re-import existing files (YAML frontmatter -is preserved). Use `--regenerate --keep-frontmatter=false -y` to regenerate -everything including frontmatter. +`--all` is self-healing: it imports new sessions and completes any whose +transcript has grown since the last import, skipping unchanged ones and never +clobbering an entry you have hand-edited. You do not need `--regenerate` for +routine re-imports; it is an edge-case tool for forcing a full re-render (after +a format change, or to heal a pre-self-heal truncated entry). Add +`--keep-frontmatter=false -y` to discard enriched frontmatter during that +re-render. ### Step 2: Enrich Entries with Metadata @@ -283,8 +286,9 @@ as you want. ## Tips * Import regularly. Run `ctx journal import --all` after each session to keep - your journal current. Only new sessions are imported: Existing files are - skipped by default. + your journal current. It is self-healing: new sessions are imported and any + whose transcript has grown are completed, while unchanged sources are + skipped. * Use batch enrichment. `/ctx-journal-enrich-all` filters noise (suggestion sessions, trivial sessions, multipart continuations) so you do not have to decide what is worth enriching. diff --git a/docs/reference/session-journal.md b/docs/reference/session-journal.md index 0d95e8bf1..c6205cfd4 100644 --- a/docs/reference/session-journal.md +++ b/docs/reference/session-journal.md @@ -67,7 +67,7 @@ Each session page includes the following sections: ### 1. Import Sessions ```bash -# Import all sessions from current project (only new files) +# Import new sessions and complete any whose transcript has grown ctx journal import --all # Import sessions from all projects @@ -129,14 +129,18 @@ After editing, regenerate the site: ctx journal site --serve ``` -??? info "Safe by Default" - Running `ctx journal import --all` **only imports new sessions**. Existing - files are skipped entirely (*your edits and enrichments are never touched*). +??? info "Self-Healing by Default" + Running `ctx journal import --all` imports new sessions **and completes any + whose source transcript has grown** since the last import, re-rendering them + up to the current end. Sessions whose source is unchanged are skipped, and + hand-edited entries are detected and left untouched with a warning + (*your edits and enrichments are never clobbered*). - Use `--regenerate` to re-import existing files. Conversation content is - regenerated, but YAML frontmatter (*topics, type, outcome, etc.*) is - preserved. You'll be prompted before any existing files are overwritten; - add `-y` to skip the prompt. + `--regenerate` is an edge-case full re-render, not the routine way to update. + Reach for it after a render-format change or to heal a pre-self-heal + truncated entry. Conversation content is regenerated, but YAML frontmatter + (*topics, type, outcome, etc.*) is preserved. You'll be prompted before any + existing files are overwritten; add `-y` to skip the prompt. Use `--keep-frontmatter=false` to discard enriched frontmatter during regeneration. @@ -392,7 +396,7 @@ import → enrich → rebuild | Stage | Command / Skill | What it does | Skips if | |--------------|----------------------------|-----------------------------------------|------------------------------------| -| **Import** | `ctx journal import --all` | Converts session JSONL to Markdown | File already exists (safe default) | +| **Import** | `ctx journal import --all` | Converts session JSONL to Markdown | Source unchanged since last import | | **Enrich** | `/ctx-journal-enrich` | Adds frontmatter, summaries, topics | Frontmatter already present | | **Rebuild** | `ctx journal site --build` | Generates static HTML site | *(never)* | | **Obsidian** | `ctx journal obsidian` | Generates Obsidian vault with wikilinks | *(never)* | diff --git a/internal/assets/claude/hooks/hooks.json b/internal/assets/claude/hooks/hooks.json index 74ca2f82b..db63bbf91 100644 --- a/internal/assets/claude/hooks/hooks.json +++ b/internal/assets/claude/hooks/hooks.json @@ -54,6 +54,11 @@ {"type": "command", "command": "cd \"${CLAUDE_PROJECT_DIR:?CLAUDE_PROJECT_DIR unset; cannot anchor ctx}\" && ctx system heartbeat"} ] } + ], + "SessionEnd": [ + { + "hooks": [{"type": "command", "command": "cd \"${CLAUDE_PROJECT_DIR:?CLAUDE_PROJECT_DIR unset; cannot anchor ctx}\" && ctx journal import --all -y >/dev/null 2>&1 || true"}] + } ] } } diff --git a/internal/assets/claude/skills/ctx-wrap-up/SKILL.md b/internal/assets/claude/skills/ctx-wrap-up/SKILL.md index e782fd497..2b469333d 100644 --- a/internal/assets/claude/skills/ctx-wrap-up/SKILL.md +++ b/internal/assets/claude/skills/ctx-wrap-up/SKILL.md @@ -171,6 +171,26 @@ Do not auto-commit; the user decides. But always run the `git status` check and always surface non-empty output. Do not skip this phase silently when the working tree is dirty. +### Phase 4.5: Capture the session journal (best-effort) + +Before handing over, sweep this session — and any others that +have grown since their last import — into the journal so the +next session can read it: + +```bash +ctx journal import --all -y +``` + +This is growth-aware and idempotent: it imports the live +session as far as it has progressed today and self-heals on the +next run, so running it mid-wrap-up is safe and needs no flags +beyond `-y`. Treat it as **non-blocking** — if it errors, note +the error and continue to the handover anyway; a failed import +must never block the handover. (A `SessionEnd` hook runs the +same sweep automatically; this ceremony step is belt-and- +suspenders.) Enrichment is a separate LLM pass +(`/ctx-journal-enrich-all`) and is not part of wrap-up. + ### Phase 5: Delegate to `/ctx-handover` (mandatory) `/ctx-wrap-up` always ends here. Drafting the handover reuses diff --git a/internal/assets/commands/commands.yaml b/internal/assets/commands/commands.yaml index 06e484922..c0bff465b 100644 --- a/internal/assets/commands/commands.yaml +++ b/internal/assets/commands/commands.yaml @@ -1002,17 +1002,24 @@ journal.import: By default, only sessions from the current project are imported. Use --all-projects to include sessions from all projects. - Safe by default: --all only imports new sessions. Existing files are - skipped. Use --regenerate to re-import existing files (preserves YAML - frontmatter by default). Use --keep-frontmatter=false to discard - enriched frontmatter during regeneration. + Self-healing by default: --all imports new sessions and completes any + whose source transcript has grown since the last import (re-rendering + them up to the current end), skipping only sessions whose source is + unchanged. Hand-edited entries are detected via a body render-hash and + left untouched with a warning, never clobbered. + + --regenerate is an edge-case full re-render, not the routine way to + update: reach for it after a render-format change or to heal a + pre-self-heal truncated entry (preserves YAML frontmatter by default). + Use --keep-frontmatter=false to discard enriched frontmatter during + regeneration. Locked entries (via "ctx journal lock") are always skipped, regardless of flags. Examples: - ctx journal import abc123 # Import one session - ctx journal import --all # Import only new + ctx journal import abc123 # Import (or re-render) one session + ctx journal import --all # Import new + complete grown ctx journal import --all --dry-run # Preview changes ctx journal import --all --regenerate # Re-import (prompts) ctx journal import --all --regenerate -y # Re-import, no prompt diff --git a/internal/assets/commands/flags.yaml b/internal/assets/commands/flags.yaml index ca903042f..7303a3af9 100644 --- a/internal/assets/commands/flags.yaml +++ b/internal/assets/commands/flags.yaml @@ -188,7 +188,7 @@ pad.tag.json: pause.session-id: short: Session ID (overrides stdin) journal.import.all: - short: Import all sessions from current project + short: Import new sessions and complete any whose transcript has grown journal.import.all-projects: short: Include sessions from all projects journal.import.dry-run: diff --git a/internal/assets/commands/text/headings.yaml b/internal/assets/commands/text/headings.yaml index 896b626c5..47ecf089a 100644 --- a/internal/assets/commands/text/headings.yaml +++ b/internal/assets/commands/text/headings.yaml @@ -168,6 +168,8 @@ label.reason-exists: short: exists label.reason-updated: short: 'updated, frontmatter preserved' +label.reason-edited: + short: 'edited outside ctx — left as-is (lock it, or re-import with --regenerate to discard)' label.loop-complete: short: '=== Loop Complete ===' diff --git a/internal/assets/commands/text/write.yaml b/internal/assets/commands/text/write.yaml index c3655cb23..76ff970cc 100644 --- a/internal/assets/commands/text/write.yaml +++ b/internal/assets/commands/text/write.yaml @@ -71,6 +71,8 @@ write.journal-import-nothing: short: Nothing to import. write.journal-import-part-new: short: import %d new +write.journal-import-part-grown: + short: complete %d grown write.journal-import-part-regen: short: regenerate %d existing write.journal-import-part-skip: diff --git a/internal/assets/integrations/copilot-cli/skills/ctx-wrap-up/SKILL.md b/internal/assets/integrations/copilot-cli/skills/ctx-wrap-up/SKILL.md index b1ba937be..ee581fea7 100644 --- a/internal/assets/integrations/copilot-cli/skills/ctx-wrap-up/SKILL.md +++ b/internal/assets/integrations/copilot-cli/skills/ctx-wrap-up/SKILL.md @@ -170,6 +170,26 @@ Do not auto-commit; the user decides. But always run the `git status` check and always surface non-empty output. Do not skip this phase silently when the working tree is dirty. +### Phase 4.5: Capture the session journal (best-effort) + +Before handing over, sweep this session — and any others that +have grown since their last import — into the journal so the +next session can read it: + +```bash +ctx journal import --all -y +``` + +This is growth-aware and idempotent: it imports the live +session as far as it has progressed today and self-heals on the +next run, so running it mid-wrap-up is safe and needs no flags +beyond `-y`. Treat it as **non-blocking** — if it errors, note +the error and continue to the handover anyway; a failed import +must never block the handover. (A `SessionEnd` hook runs the +same sweep automatically; this ceremony step is belt-and- +suspenders.) Enrichment is a separate LLM pass +(`/ctx-journal-enrich-all`) and is not part of wrap-up. + ### Phase 5: Delegate to `/ctx-handover` (mandatory) `/ctx-wrap-up` always ends here. Drafting the handover reuses diff --git a/internal/assets/integrations/opencode/skills/ctx-wrap-up/SKILL.md b/internal/assets/integrations/opencode/skills/ctx-wrap-up/SKILL.md index b33112964..9684d2e97 100644 --- a/internal/assets/integrations/opencode/skills/ctx-wrap-up/SKILL.md +++ b/internal/assets/integrations/opencode/skills/ctx-wrap-up/SKILL.md @@ -20,14 +20,20 @@ Run the end-of-session context persistence ceremony. 4. Capture any new conventions to `.context/CONVENTIONS.md` 5. Update task status in `.context/TASKS.md` 6. Save a session summary to `.context/sessions/` -7. If `.context/kb/` exists, list pending closeouts under +7. Sweep this session — and any others that grew since their + last import — into the journal: `ctx journal import --all + -y`. It is growth-aware and idempotent, so running it + mid-wrap-up is safe. Best-effort and **non-blocking**: if + it errors, note it and continue; never let it block the + handover. +8. If `.context/kb/` exists, list pending closeouts under `.context/ingest/closeouts/` and count `open` rows in `.context/kb/outstanding-questions.md`; surface both counts so the operator sees what editorial residue is pending. The handover step's fold pass consumes the closeouts. Skip this step entirely when `.context/kb/` does not exist. -8. **Mandatory final step:** delegate to `/ctx-handover` so +9. **Mandatory final step:** delegate to `/ctx-handover` so the next session has something to read. Draft: - **Title**: short noun phrase naming the session arc (becomes the slug in `-.md`). diff --git a/internal/cli/journal/cmd/importer/run.go b/internal/cli/journal/cmd/importer/run.go index 33866e8f3..ac527d718 100644 --- a/internal/cli/journal/cmd/importer/run.go +++ b/internal/cli/journal/cmd/importer/run.go @@ -134,8 +134,9 @@ func Run(cmd *cobra.Command, args []string, opts entity.ImportOpts) error { // 8. Dry-run → print summary and return. if opts.DryRun { writeRecall.ImportSummary( - cmd, importPlan.NewCount, importPlan.RegenCount, - importPlan.SkipCount, importPlan.LockedCount, true, + cmd, importPlan.NewCount, importPlan.GrownCount, + importPlan.RegenCount, importPlan.SkipCount, + importPlan.LockedCount, true, ) return nil } diff --git a/internal/cli/journal/cmd/site/run.go b/internal/cli/journal/cmd/site/run.go index 4d0cf908a..6d30cf889 100644 --- a/internal/cli/journal/cmd/site/run.go +++ b/internal/cli/journal/cmd/site/run.go @@ -15,6 +15,7 @@ import ( readJournal "github.com/ActiveMemory/ctx/internal/assets/read/journal" "github.com/ActiveMemory/ctx/internal/cli/journal/core/collapse" "github.com/ActiveMemory/ctx/internal/cli/journal/core/consolidate" + "github.com/ActiveMemory/ctx/internal/cli/journal/core/extract" "github.com/ActiveMemory/ctx/internal/cli/journal/core/format" "github.com/ActiveMemory/ctx/internal/cli/journal/core/generate" "github.com/ActiveMemory/ctx/internal/cli/journal/core/normalize" @@ -25,6 +26,7 @@ import ( "github.com/ActiveMemory/ctx/internal/config/dir" "github.com/ActiveMemory/ctx/internal/config/file" "github.com/ActiveMemory/ctx/internal/config/fs" + cfgJournal "github.com/ActiveMemory/ctx/internal/config/journal" "github.com/ActiveMemory/ctx/internal/config/zensical" "github.com/ActiveMemory/ctx/internal/entity" errFs "github.com/ActiveMemory/ctx/internal/err/fs" @@ -142,14 +144,31 @@ func Run( ), ), ) + writeOK := true if normalized != string(content) { - if writeErr := ctxIo.SafeWriteFile( + // Atomic: this rewrites the source entry body in place, so a + // torn write must never truncate a journal entry. + if writeErr := ctxIo.SafeWriteFileAtomic( src, []byte(normalized), fs.PermFile, ); writeErr != nil { err.WarnFile(cmd, entry.Filename, writeErr) + writeOK = false } } + // The in-place normalize is a body-authoring write, so refresh the + // entry's render hash to match what is now on disk. Do this on + // every non-failed entry — not only when a write happened — so an + // idempotent normalize still re-syncs the hash. Without this, + // growth-aware import would read a site-normalized body as a hand + // edit and refuse to self-heal (see plan.bodyEdited). + if writeOK { + jState.SetRenderHash( + entry.Filename, + state.HashRender(extract.StripFrontmatter(normalized)), + ) + } + // Generate site copy with Markdown fixes fv := jState.FencesVerified(entry.Filename) withLinks := generate.InjectedSourceLink(normalized, src) @@ -165,6 +184,13 @@ func Run( } } + // Persist the render hashes refreshed by the in-place normalize + // above, so growth-aware import can prove these entries are still + // ctx-owned. Best-effort: a save failure must not fail site build. + if saveErr := jState.Save(journalDir); saveErr != nil { + err.WarnFile(cmd, cfgJournal.File, saveErr) + } + // Remove orphan site files: entries whose source was renamed or deleted. knownFiles := make(map[string]bool, len(entries)+1) knownFiles[file.Index] = true diff --git a/internal/cli/journal/core/confirm/confirm.go b/internal/cli/journal/core/confirm/confirm.go index 3518ae7d7..527619c25 100644 --- a/internal/cli/journal/core/confirm/confirm.go +++ b/internal/cli/journal/core/confirm/confirm.go @@ -33,7 +33,8 @@ import ( func Import(cmd *cobra.Command, plan entity.ImportPlan) (bool, error) { writeRecall.ImportSummary( cmd, - plan.NewCount, plan.RegenCount, plan.SkipCount, plan.LockedCount, false, + plan.NewCount, plan.GrownCount, plan.RegenCount, + plan.SkipCount, plan.LockedCount, false, ) writeRecall.ConfirmPrompt(cmd) reader := bufio.NewReader(os.Stdin) diff --git a/internal/cli/journal/core/execute/cycle_test.go b/internal/cli/journal/core/execute/cycle_test.go new file mode 100644 index 000000000..71d9995ba --- /dev/null +++ b/internal/cli/journal/core/execute/cycle_test.go @@ -0,0 +1,244 @@ +// / ctx: https://ctx.ist +// ,'`./ do you remember? +// `.,'\ +// \ Copyright 2026-present Context contributors. +// SPDX-License-Identifier: Apache-2.0 + +package execute_test + +import ( + "io" + "os" + "path/filepath" + "testing" + "time" + + "github.com/spf13/cobra" + + "github.com/ActiveMemory/ctx/internal/cli/journal/core/execute" + "github.com/ActiveMemory/ctx/internal/cli/journal/core/plan" + "github.com/ActiveMemory/ctx/internal/config/fs" + "github.com/ActiveMemory/ctx/internal/entity" + "github.com/ActiveMemory/ctx/internal/journal/state" +) + +// TestImportCycle_SelfHealAndForeignEdit drives the real import +// pipeline (plan.Import → execute.Import → state round-trip) through +// the full self-healing lifecycle: a New import, an Unchanged no-op, a +// Grown re-render that self-heals, and a hand-edited entry that a later +// growth must never clobber. This is the integration seam the planner +// unit tests do not cover: execute's write, render-hash stamping, and +// state persistence across sweeps. +func TestImportCycle_SelfHealAndForeignEdit(t *testing.T) { + jdir := t.TempDir() + srcDir := t.TempDir() + src := filepath.Join(srcDir, "sess.jsonl") + writeAll(t, src, "line one\n") + + s := &entity.Session{ + ID: "cycle-1", + Tool: "claude-code", + Project: "proj", + SourceFile: src, + StartTime: time.Date(2026, 1, 15, 10, 30, 0, 0, time.UTC), + EndTime: time.Date(2026, 1, 15, 11, 0, 0, 0, time.UTC), + Messages: []entity.Message{ + {Role: "user", Text: "first message"}, + }, + } + opts := entity.ImportOpts{All: true, KeepFrontmatter: true} + cmd := discardCmd() + idx := map[string]string{} + + load := func() *state.State { + st, err := state.Load(jdir) + if err != nil { + t.Fatalf("state load: %v", err) + } + return st + } + save := func(st *state.State) { + if err := st.Save(jdir); err != nil { + t.Fatalf("state save: %v", err) + } + } + + // --- 1. New import: renders the entry, records source + render hash. + st := load() + p := plan.Import([]*entity.Session{s}, jdir, idx, st, opts, false) + if p.Actions[0].Action != entity.ActionNew { + t.Fatalf("first run action = %v, want ActionNew", p.Actions[0].Action) + } + execute.Import(cmd, p, st, opts) + entryPath := p.Actions[0].Path + filename := p.Actions[0].Filename + if !fileExists(entryPath) { + t.Fatal("New import should have written the entry file") + } + if st.RenderHash(filename) == "" { + t.Error("New import should record a render hash") + } + if _, ok := st.SessionSource("cycle-1"); !ok { + t.Error("New import should record the source stats") + } + save(st) + + // --- 2. Unchanged: source untouched → skip, byte-identical file. + before := readAll(t, entryPath) + st = load() + p = plan.Import([]*entity.Session{s}, jdir, idx, st, opts, false) + if p.Actions[0].Action != entity.ActionSkip { + t.Fatalf("unchanged action = %v, want ActionSkip", p.Actions[0].Action) + } + execute.Import(cmd, p, st, opts) + if readAll(t, entryPath) != before { + t.Error("Unchanged sweep must leave the entry byte-identical") + } + + // --- 3. Grown, ctx-owned: source grows (size changes) and the + // transcript now parses to more messages → re-render, self-heal. + writeAll(t, src, "line one\nline two\nline three\n") + s.Messages = append(s.Messages, + entity.Message{Role: "assistant", Text: "a reply that grows the entry"}, + ) + st = load() + p = plan.Import([]*entity.Session{s}, jdir, idx, st, opts, false) + if p.Actions[0].Action != entity.ActionRegenerate { + t.Fatalf("grown action = %v, want ActionRegenerate", p.Actions[0].Action) + } + // A grown re-render is counted as Grown, not Regen, so a routine + // interactive sweep never trips the regenerate confirmation prompt. + if p.GrownCount != 1 || p.RegenCount != 0 { + t.Errorf("grown sweep: GrownCount=%d RegenCount=%d, want 1 and 0", + p.GrownCount, p.RegenCount) + } + execute.Import(cmd, p, st, opts) + grown := readAll(t, entryPath) + if grown == before { + t.Error("Grown re-render should update the entry body") + } + if st.RenderHash(filename) == "" { + t.Error("Grown re-render should refresh the render hash") + } + save(st) + + // --- 4. Foreign edit: a human edits the body, then the source grows + // again. The grown sweep must detect the edit and leave it untouched. + edited := grown + "\n\n> hand-written note the next sweep must preserve\n" + writeAll(t, entryPath, edited) + writeAll(t, src, "line one\nline two\nline three\nline four\n") + s.Messages = append(s.Messages, + entity.Message{Role: "user", Text: "a third message"}, + ) + st = load() + p = plan.Import([]*entity.Session{s}, jdir, idx, st, opts, false) + if p.Actions[0].Action != entity.ActionForeignEdit { + t.Fatalf("foreign-edit action = %v, want ActionForeignEdit", + p.Actions[0].Action) + } + execute.Import(cmd, p, st, opts) + if readAll(t, entryPath) != edited { + t.Error("a hand-edited entry must survive a Grown sweep byte-identical") + } +} + +// TestImportCycle_FailedWriteDoesNotAdvanceSource locks in the M1 +// invariant: if a grown session's write fails, its recorded source stat +// must NOT advance. Otherwise the next sweep sees grown=false and +// silently forgets the un-rendered growth (permanent for a completed +// session). The stat is committed by execute only after a clean write. +func TestImportCycle_FailedWriteDoesNotAdvanceSource(t *testing.T) { + jdir := t.TempDir() + srcDir := t.TempDir() + src := filepath.Join(srcDir, "sess.jsonl") + writeAll(t, src, "line one\n") + + s := &entity.Session{ + ID: "cycle-fail", Tool: "claude-code", Project: "proj", + SourceFile: src, + StartTime: time.Date(2026, 1, 15, 10, 30, 0, 0, time.UTC), + Messages: []entity.Message{{Role: "user", Text: "first message"}}, + } + opts := entity.ImportOpts{All: true, KeepFrontmatter: true} + cmd := discardCmd() + idx := map[string]string{} + + // New import establishes the entry and records the source stat. + st, err := state.Load(jdir) + if err != nil { + t.Fatalf("state load: %v", err) + } + p := plan.Import([]*entity.Session{s}, jdir, idx, st, opts, false) + execute.Import(cmd, p, st, opts) + entryPath := p.Actions[0].Path + recBefore, ok := st.SessionSource("cycle-fail") + if !ok { + t.Fatal("New import should record the source stat") + } + if saveErr := st.Save(jdir); saveErr != nil { + t.Fatalf("state save: %v", saveErr) + } + + // Grow the source so the next plan is a Regenerate. + writeAll(t, src, "line one\nline two\nline three\n") + s.Messages = append(s.Messages, + entity.Message{Role: "assistant", Text: "a reply that grows the entry"}, + ) + st, err = state.Load(jdir) + if err != nil { + t.Fatalf("state reload: %v", err) + } + p = plan.Import([]*entity.Session{s}, jdir, idx, st, opts, false) + if p.Actions[0].Action != entity.ActionRegenerate { + t.Fatalf("grown action = %v, want ActionRegenerate", p.Actions[0].Action) + } + + // Sabotage the write: replace the entry file with a directory so + // SafeWriteFile fails deterministically. + if rmErr := os.Remove(entryPath); rmErr != nil { + t.Fatalf("remove entry: %v", rmErr) + } + if mkErr := os.Mkdir(entryPath, fs.PermExec); mkErr != nil { + t.Fatalf("mkdir entry: %v", mkErr) + } + + execute.Import(cmd, p, st, opts) + + recAfter, ok := st.SessionSource("cycle-fail") + if !ok { + t.Fatal("source record should still exist after a failed write") + } + if recAfter.SourceMtime != recBefore.SourceMtime || + recAfter.SourceSize != recBefore.SourceSize { + t.Errorf("failed write advanced the source stat: before=%+v after=%+v", + recBefore, recAfter) + } +} + +func discardCmd() *cobra.Command { + cmd := &cobra.Command{} + cmd.SetOut(io.Discard) + cmd.SetErr(io.Discard) + return cmd +} + +func writeAll(t *testing.T, path, content string) { + t.Helper() + if err := os.WriteFile(path, []byte(content), fs.PermFile); err != nil { + t.Fatal(err) + } +} + +func readAll(t *testing.T, path string) string { + t.Helper() + data, err := os.ReadFile(filepath.Clean(path)) + if err != nil { + t.Fatal(err) + } + return string(data) +} + +func fileExists(path string) bool { + _, err := os.Stat(path) + return err == nil +} diff --git a/internal/cli/journal/core/execute/execute.go b/internal/cli/journal/core/execute/execute.go index daea9b844..29fd5aca9 100644 --- a/internal/cli/journal/core/execute/execute.go +++ b/internal/cli/journal/core/execute/execute.go @@ -44,6 +44,13 @@ func Import( jstate *state.State, opts entity.ImportOpts, ) (imported, updated, skipped int) { + // Track per-session outcomes so the recorded source stat is advanced + // only for sessions that fully caught up to their transcript. A write + // failure or a foreign-edited part leaves the entry behind the + // source, so its stat must not move — the next sweep has to retry. + failed := make(map[string]bool) + foreign := make(map[string]bool) + for _, fa := range plan.Actions { if fa.Action == entity.ActionLocked { skipped++ @@ -58,6 +65,15 @@ func Import( ) continue } + if fa.Action == entity.ActionForeignEdit { + skipped++ + foreign[fa.Session.ID] = true + writeRecall.SkipFile( + cmd, fa.Filename, + desc.Text(text.DescKeyLabelReasonEdited), + ) + continue + } // Generate content, sanitizing any invalid UTF-8. content := strings.ToValidUTF8( @@ -89,16 +105,26 @@ func Import( imported++ } - // Write file. - if writeErr := io.SafeWriteFile( + // Write the entry atomically (temp + rename). Import is wired into + // a SessionEnd hook that can be killed during teardown; a torn + // write would leave a truncated entry that the next sweep records + // as unchanged and never repairs. + if writeErr := io.SafeWriteFileAtomic( fa.Path, []byte(content), fs.PermFile, ); writeErr != nil { err.WarnFile(cmd, fa.Filename, writeErr) + failed[fa.Session.ID] = true continue } jstate.MarkImported(fa.Filename) + // Record the hash of the body ctx just wrote, so a later growth + // sweep can prove the file is still ctx-owned before re-rendering. + jstate.SetRenderHash( + fa.Filename, state.HashRender(extract.StripFrontmatter(content)), + ) + if fileExists && !discard { writeRecall.ImportedFile( cmd, fa.Filename, desc.Text(text.DescKeyLabelReasonUpdated), @@ -108,5 +134,16 @@ func Import( } } + // Commit the observed source stats for sessions that caught up. A + // session with any failed write or foreign-edited part is skipped, so + // its recorded stat stays behind and the next sweep re-detects the + // growth instead of silently forgetting it. + for sid, obs := range plan.Sources { + if failed[sid] || foreign[sid] { + continue + } + jstate.MarkSource(sid, obs.SourceFile, obs.Mtime, obs.Size) + } + return imported, updated, skipped } diff --git a/internal/cli/journal/core/plan/growth.go b/internal/cli/journal/core/plan/growth.go new file mode 100644 index 000000000..c576073f2 --- /dev/null +++ b/internal/cli/journal/core/plan/growth.go @@ -0,0 +1,81 @@ +// / ctx: https://ctx.ist +// ,'`./ do you remember? +// `.,'\ +// \ Copyright 2026-present Context contributors. +// SPDX-License-Identifier: Apache-2.0 + +package plan + +import ( + "os" + "path/filepath" + + "github.com/ActiveMemory/ctx/internal/cli/journal/core/extract" + "github.com/ActiveMemory/ctx/internal/io" + "github.com/ActiveMemory/ctx/internal/journal/state" +) + +// sourceStat returns the mtime (Unix seconds) and byte size of a +// session's source transcript, and whether the stat succeeded. A +// missing or unreadable source disables growth detection for that +// session, which then degrades to skip-existing. +// +// Parameters: +// - path: absolute path to the source transcript +// +// Returns: +// - mtime: Unix mtime in seconds (0 when ok is false) +// - size: byte size (0 when ok is false) +// - ok: true if the file was stat-able +func sourceStat(path string) (mtime, size int64, ok bool) { + if path == "" { + return 0, 0, false + } + info, err := os.Stat(path) + if err != nil { + return 0, 0, false + } + return info.ModTime().Unix(), info.Size(), true +} + +// adoptRenderHash computes the render hash of an existing entry's body, +// used to adopt a session imported before source tracking existed (v1). +// Recording this hash at adoption time lets a later growth sweep prove +// the entry is still ctx-owned and re-render it, instead of treating +// the empty recorded hash as a hand edit and stranding the growth. +// +// Parameters: +// - path: absolute path to the existing entry file +// +// Returns: +// - string: render hash of the body, or "" if the file is unreadable +func adoptRenderHash(path string) string { + data, err := io.SafeReadUserFile(filepath.Clean(path)) + if err != nil { + return "" + } + return state.HashRender(extract.StripFrontmatter(string(data))) +} + +// bodyEdited reports whether an existing entry's body differs from the +// hash ctx recorded for its last authored write. An entry with no +// recorded hash (pre-v2, or never written under v2) is treated as +// edited: ctx cannot prove it owns the body, so it must not clobber it. +// +// Parameters: +// - path: absolute path to the existing entry file +// - recordedHash: the render hash ctx recorded for this entry +// +// Returns: +// - bool: true if the body was edited outside ctx (or cannot be read) +func bodyEdited(path, recordedHash string) bool { + if recordedHash == "" { + return true + } + data, err := io.SafeReadUserFile(filepath.Clean(path)) + if err != nil { + return true + } + body := extract.StripFrontmatter(string(data)) + return state.HashRender(body) != recordedHash +} diff --git a/internal/cli/journal/core/plan/plan.go b/internal/cli/journal/core/plan/plan.go index bd8ad1770..bec68376c 100644 --- a/internal/cli/journal/core/plan/plan.go +++ b/internal/cli/journal/core/plan/plan.go @@ -94,6 +94,24 @@ func Import( } } + // Growth detection (session-level). The unit of memory is the + // source transcript, not the output file: a session whose + // recorded mtime/size still match is Unchanged (skip); one that + // grew is re-rendered part by part, guarded so a hand-edited + // body is never clobbered. + mtime, size, statOK := sourceStat(s.SourceFile) + rec, seen := jstate.SessionSource(s.ID) + forceRegen := singleSession || opts.Regenerate || + opts.DiscardFrontmatter() + // Growth is any divergence from the recorded source: a different + // transcript file (a richer resume copy was picked), a newer + // mtime, or a larger size. Comparing the file path too means a + // switch to a larger resume transcript counts as growth even if + // its mtime/size happen not to differ from the old record. + grown := seen && statOK && + (rec.SourceFile != s.SourceFile || + rec.SourceMtime != mtime || rec.SourceSize != size) + // Plan each part. for part := 1; part <= numParts; part++ { filename := baseFilename @@ -125,10 +143,39 @@ func Import( jstate.Mark(filename, session.FrontmatterLocked) action = entity.ActionLocked plan.LockedCount++ - case singleSession || opts.Regenerate || opts.DiscardFrontmatter(): + case forceRegen: action = entity.ActionRegenerate plan.RegenCount++ + case grown: + // The source grew. Re-render only if the existing body is + // provably still ctx's last write; otherwise a human + // edited it, so leave it untouched and warn. A grown + // re-render is counted as GrownCount, not RegenCount, so it + // does not trip the regenerate confirmation prompt: it is a + // non-destructive splice that preserves frontmatter. + if bodyEdited(path, jstate.RenderHash(filename)) { + action = entity.ActionForeignEdit + plan.SkipCount++ + } else { + action = entity.ActionRegenerate + plan.GrownCount++ + } default: + // Unchanged (recorded stats match), adopted (file exists + // but the session predates source tracking), or an + // unreadable source: leave the file as-is. + // + // Adoption: a file that exists for a session never tracked + // under source tracking (a pre-v2 import) is taken as + // ctx-owned. Record its body hash now so a later growth + // sweep can re-render it, instead of reading the absent + // hash as a hand edit and stranding the growth (a + // still-live session imported across the v1→v2 upgrade). + if !seen && jstate.RenderHash(filename) == "" { + if h := adoptRenderHash(path); h != "" { + jstate.SetRenderHash(filename, h) + } + } action = entity.ActionSkip plan.SkipCount++ } @@ -148,6 +195,23 @@ func Import( BaseName: baseName, }) } + + // Stash the observed source stats in the plan, keyed by session. + // execute commits them to journal state only AFTER the session's + // writes succeed (see execute.Import): recording the stat at plan + // time would advance it even when the write later fails, silently + // forgetting the un-rendered growth. Adopted/unchanged sessions + // have no write and are committed unconditionally by execute. + if statOK { + if plan.Sources == nil { + plan.Sources = make(map[string]entity.SourceObservation) + } + plan.Sources[s.ID] = entity.SourceObservation{ + SourceFile: s.SourceFile, + Mtime: mtime, + Size: size, + } + } } return plan diff --git a/internal/cli/journal/core/plan/plan_test.go b/internal/cli/journal/core/plan/plan_test.go new file mode 100644 index 000000000..a4c3d4d86 --- /dev/null +++ b/internal/cli/journal/core/plan/plan_test.go @@ -0,0 +1,300 @@ +// / ctx: https://ctx.ist +// ,'`./ do you remember? +// `.,'\ +// \ Copyright 2026-present Context contributors. +// SPDX-License-Identifier: Apache-2.0 + +package plan + +import ( + "os" + "testing" + "time" + + "github.com/ActiveMemory/ctx/internal/config/fs" + "github.com/ActiveMemory/ctx/internal/entity" + "github.com/ActiveMemory/ctx/internal/journal/state" +) + +// session builds a minimal, non-empty session pointing at a real +// source transcript so growth detection can stat it. +func buildSession(t *testing.T, id, sourceFile string) *entity.Session { + t.Helper() + return &entity.Session{ + ID: id, + Tool: "claude-code", + Project: "proj", + SourceFile: sourceFile, + StartTime: time.Date(2026, 1, 15, 10, 30, 0, 0, time.UTC), + EndTime: time.Date(2026, 1, 15, 11, 0, 0, 0, time.UTC), + Duration: 30 * time.Minute, + TurnCount: 1, + FirstUserMsg: "Hello there", + Messages: []entity.Message{ + { + Role: "user", Text: "Hello there", + Timestamp: time.Date(2026, 1, 15, 10, 30, 0, 0, time.UTC), + }, + }, + } +} + +// writeSource writes a transcript file and returns its path and stat. +func writeSource(t *testing.T, path, content string) (mtime, size int64) { + t.Helper() + if err := os.WriteFile(path, []byte(content), fs.PermFile); err != nil { + t.Fatal(err) + } + info, err := os.Stat(path) + if err != nil { + t.Fatal(err) + } + return info.ModTime().Unix(), info.Size() +} + +func emptyIndex() map[string]string { return map[string]string{} } + +func keepOpts() entity.ImportOpts { + return entity.ImportOpts{All: true, KeepFrontmatter: true} +} + +// planOnce runs Import and returns the single-part plan (sessions here +// have one message, so exactly one action). +func planOnce( + s *entity.Session, journalDir string, st *state.State, +) entity.FileAction { + p := Import( + []*entity.Session{s}, journalDir, emptyIndex(), st, keepOpts(), false, + ) + return p.Actions[0] +} + +func TestImport_NewSession(t *testing.T) { + dir := t.TempDir() + src := dir + "/sess-new.jsonl" + writeSource(t, src, "line one\n") + s := buildSession(t, "sess-new", src) + + st := &state.State{ + Version: state.CurrentVersion, + Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + } + + p := Import( + []*entity.Session{s}, dir, emptyIndex(), st, keepOpts(), false, + ) + fa := p.Actions[0] + if fa.Action != entity.ActionNew { + t.Errorf("Action = %v, want ActionNew", fa.Action) + } + // Plan stashes the source observation so execute can commit it after + // the write succeeds; it must NOT be committed to state at plan time + // (a failed write would then strand the un-rendered growth). + if _, ok := p.Sources["sess-new"]; !ok { + t.Error("source observation should be stashed in the plan") + } + if _, ok := st.SessionSource("sess-new"); ok { + t.Error("plan must not commit source stats to state; execute does") + } +} + +func TestImport_Unchanged(t *testing.T) { + dir := t.TempDir() + src := dir + "/sess-u.jsonl" + mtime, size := writeSource(t, src, "line one\n") + s := buildSession(t, "sess-u", src) + + // First: discover the output filename/path via a New plan. + st := &state.State{ + Version: state.CurrentVersion, + Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + } + fa := planOnce(s, dir, st) + + // Simulate the entry existing and the source already recorded. + if err := os.WriteFile(fa.Path, []byte("body"), fs.PermFile); err != nil { + t.Fatal(err) + } + st.Sessions["sess-u"] = state.Source{ + SourceFile: src, SourceMtime: mtime, SourceSize: size, + } + + got := planOnce(s, dir, st) + if got.Action != entity.ActionSkip { + t.Errorf("Action = %v, want ActionSkip (unchanged)", got.Action) + } +} + +func TestImport_GrownCtxOwned(t *testing.T) { + dir := t.TempDir() + src := dir + "/sess-g.jsonl" + mtime, size := writeSource(t, src, "line one\nline two\n") + s := buildSession(t, "sess-g", src) + + st := &state.State{ + Version: state.CurrentVersion, + Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + } + fa := planOnce(s, dir, st) + + // The file exists with a body ctx wrote (matching render hash), and + // the recorded source stats are older than the current source. + body := "the rendered body" + if err := os.WriteFile(fa.Path, []byte(body), fs.PermFile); err != nil { + t.Fatal(err) + } + st.Entries[fa.Filename] = state.File{ + Exported: "2026-01-15", RenderHash: state.HashRender(body), + } + st.Sessions["sess-g"] = state.Source{ + SourceFile: src, SourceMtime: mtime - 100, SourceSize: size - 5, + } + + got := planOnce(s, dir, st) + if got.Action != entity.ActionRegenerate { + t.Errorf("Action = %v, want ActionRegenerate (grown, ctx-owned)", + got.Action) + } +} + +func TestImport_GrownForeignEdit(t *testing.T) { + dir := t.TempDir() + src := dir + "/sess-f.jsonl" + mtime, size := writeSource(t, src, "line one\nline two\n") + s := buildSession(t, "sess-f", src) + + st := &state.State{ + Version: state.CurrentVersion, + Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + } + fa := planOnce(s, dir, st) + + // The body on disk does NOT match the recorded hash: a human edited it. + if err := os.WriteFile( + fa.Path, []byte("HAND EDITED body"), fs.PermFile, + ); err != nil { + t.Fatal(err) + } + st.Entries[fa.Filename] = state.File{ + Exported: "2026-01-15", RenderHash: state.HashRender("original body"), + } + st.Sessions["sess-f"] = state.Source{ + SourceFile: src, SourceMtime: mtime - 100, SourceSize: size - 5, + } + + got := planOnce(s, dir, st) + if got.Action != entity.ActionForeignEdit { + t.Errorf("Action = %v, want ActionForeignEdit (grown, edited)", + got.Action) + } +} + +func TestImport_GrownNoHashTreatedAsEdited(t *testing.T) { + dir := t.TempDir() + src := dir + "/sess-p.jsonl" + mtime, size := writeSource(t, src, "line one\nline two\n") + s := buildSession(t, "sess-p", src) + + st := &state.State{ + Version: state.CurrentVersion, + Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + } + fa := planOnce(s, dir, st) + + // Existing file, but no recorded render hash (pre-v2 entry). + if err := os.WriteFile(fa.Path, []byte("body"), fs.PermFile); err != nil { + t.Fatal(err) + } + st.Entries[fa.Filename] = state.File{Exported: "2026-01-15"} + st.Sessions["sess-p"] = state.Source{ + SourceFile: src, SourceMtime: mtime - 100, SourceSize: size - 5, + } + + got := planOnce(s, dir, st) + if got.Action != entity.ActionForeignEdit { + t.Errorf("Action = %v, want ActionForeignEdit (no hash → treat edited)", + got.Action) + } +} + +func TestImport_AdoptV1Session(t *testing.T) { + dir := t.TempDir() + src := dir + "/sess-a.jsonl" + writeSource(t, src, "line one\n") + s := buildSession(t, "sess-a", src) + + st := &state.State{ + Version: state.CurrentVersion, + Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + } + fa := planOnce(s, dir, st) + + // File exists (imported under v1) but the session is untracked. + if err := os.WriteFile(fa.Path, []byte("body"), fs.PermFile); err != nil { + t.Fatal(err) + } + // Fresh state: session NOT in Sessions map. + st2 := &state.State{ + Version: state.CurrentVersion, + Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + } + + p := Import( + []*entity.Session{s}, dir, emptyIndex(), st2, keepOpts(), false, + ) + got := p.Actions[0] + if got.Action != entity.ActionSkip { + t.Errorf("Action = %v, want ActionSkip (adopt)", got.Action) + } + // Adoption stashes the source observation in the plan (execute commits + // it) without re-rendering. + if _, ok := p.Sources["sess-a"]; !ok { + t.Error("adoption should stash source stats in the plan") + } + // A pre-v2 entry is adopted as ctx-owned: its render hash is + // backfilled now so a later growth sweep can self-heal it instead of + // mistaking the absent hash for a hand edit. + if st2.RenderHash(got.Filename) == "" { + t.Error("adoption should backfill the render hash") + } +} + +func TestImport_UnreadableSourceDegradesToSkip(t *testing.T) { + dir := t.TempDir() + src := dir + "/gone.jsonl" // never created + s := buildSession(t, "sess-x", src) + + st := &state.State{ + Version: state.CurrentVersion, + Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + } + // Discover filename with a throwaway source so the plan can run. + tmpSrc := dir + "/tmp.jsonl" + writeSource(t, tmpSrc, "x\n") + probe := buildSession(t, "sess-x", tmpSrc) + fa := planOnce(probe, dir, &state.State{ + Version: state.CurrentVersion, Entries: map[string]state.File{}, + Sessions: map[string]state.Source{}, + }) + + // The entry exists and the session is "seen", but the source is gone. + if err := os.WriteFile(fa.Path, []byte("body"), fs.PermFile); err != nil { + t.Fatal(err) + } + st.Sessions["sess-x"] = state.Source{ + SourceFile: src, SourceMtime: 1, SourceSize: 1, + } + + got := planOnce(s, dir, st) + if got.Action != entity.ActionSkip { + t.Errorf("Action = %v, want ActionSkip (unreadable source)", got.Action) + } +} diff --git a/internal/config/embed/text/import.go b/internal/config/embed/text/import.go index 30dcef79b..2ac0ef272 100644 --- a/internal/config/embed/text/import.go +++ b/internal/config/embed/text/import.go @@ -67,6 +67,9 @@ const ( // DescKeyWriteJournalImportPartNew is the text key for write journal import // part new messages. DescKeyWriteJournalImportPartNew = "write.journal-import-part-new" + // DescKeyWriteJournalImportPartGrown is the text key for the count of + // grown sessions completed by a growth-aware import sweep. + DescKeyWriteJournalImportPartGrown = "write.journal-import-part-grown" // DescKeyWriteJournalImportPartRegen is the text key for write journal import // part regen messages. DescKeyWriteJournalImportPartRegen = "write.journal-import-part-regen" diff --git a/internal/config/embed/text/label_reason.go b/internal/config/embed/text/label_reason.go index 748911762..4f41be502 100644 --- a/internal/config/embed/text/label_reason.go +++ b/internal/config/embed/text/label_reason.go @@ -12,4 +12,7 @@ const ( DescKeyLabelReasonExists = "label.reason-exists" // DescKeyLabelReasonUpdated is the text key for label reason updated messages. DescKeyLabelReasonUpdated = "label.reason-updated" + // DescKeyLabelReasonEdited is the text key for the reason shown when a + // grown session's entry was edited outside ctx and is left untouched. + DescKeyLabelReasonEdited = "label.reason-edited" ) diff --git a/internal/entity/import.go b/internal/entity/import.go index 9624b3900..db5c95ce2 100644 --- a/internal/entity/import.go +++ b/internal/entity/import.go @@ -18,6 +18,9 @@ const ( ActionSkip // ActionLocked means the file is locked and never overwritten. ActionLocked + // ActionForeignEdit means the source grew but the file's body was + // edited outside ctx, so it is left untouched and the user is warned. + ActionForeignEdit ) // ImportOpts holds all flag values for the import command. @@ -76,17 +79,43 @@ type FileAction struct { // Fields: // - Actions: Per-file planned actions // - NewCount: Files that will be created -// - RegenCount: Files that will be regenerated +// - RegenCount: Files that will be regenerated on explicit request +// (--regenerate, --discard-frontmatter, or single-session import) +// - GrownCount: Files re-rendered because their source transcript +// grew. Counted separately from RegenCount so a routine +// growth-aware sweep does not trip the regenerate confirmation +// prompt: growth is a non-destructive, frontmatter-preserving +// splice, not a discard. // - SkipCount: Files that will be skipped // - LockedCount: Files that are locked // - RenameOps: Dedup renames to execute before import +// - Sources: Per-session source-transcript stats observed at plan +// time, keyed by session ID. execute stamps these into journal +// state only after a session's writes succeed, so a failed or +// partial render never advances the recorded source stat (which +// would strand the un-rendered growth). type ImportPlan struct { Actions []FileAction NewCount int RegenCount int + GrownCount int SkipCount int LockedCount int RenameOps []RenameOp + Sources map[string]SourceObservation +} + +// SourceObservation records a session's source-transcript stats as +// observed at plan time. +// +// Fields: +// - SourceFile: Absolute path to the transcript planned from +// - Mtime: Unix mtime (seconds) of the transcript at plan time +// - Size: Byte size of the transcript at plan time +type SourceObservation struct { + SourceFile string + Mtime int64 + Size int64 } // RenameOp describes a dedup rename (old slug → new slug). diff --git a/internal/journal/parser/parser_test.go b/internal/journal/parser/parser_test.go index 7c6cbe7e5..8632f2259 100644 --- a/internal/journal/parser/parser_test.go +++ b/internal/journal/parser/parser_test.go @@ -49,6 +49,41 @@ func TestClaudeCodeParser_Matches(t *testing.T) { } } +func TestClaudeCodeParser_PartialTrailingLine(t *testing.T) { + // A transcript read mid-write can end in a half-written JSONL line. + // Growth-aware import relies on the parser treating that partial line + // as end-of-input: the complete lines import now and the missing + // record is captured losslessly on the next sweep. This pins that + // tolerance — no error, no dropped complete messages. + parser := NewClaudeCode() + dir := t.TempDir() + + jsonlFile := filepath.Join(dir, "live.jsonl") + full := `{"uuid":"m1","sessionId":"live-1","slug":"live","type":"user","timestamp":"2026-01-20T10:00:00Z","cwd":"/home/test/project","version":"2.1.0","message":{"role":"user","content":[{"type":"text","text":"first"}]}} +{"uuid":"m2","sessionId":"live-1","slug":"live","type":"assistant","timestamp":"2026-01-20T10:00:05Z","cwd":"/home/test/project","version":"2.1.0","message":{"role":"assistant","content":[{"type":"text","text":"reply"}]}} +` + // A torn final line: valid JSON prefix, no closing brace, no newline. + partial := `{"uuid":"m3","sessionId":"live-1","type":"user","timestamp":"2026-01-20T10:00:1` + if err := os.WriteFile( + jsonlFile, []byte(full+partial), 0600, + ); err != nil { + t.Fatal(err) + } + + sessions, err := parser.ParseFile(jsonlFile) + if err != nil { + t.Fatalf("ParseFile on a live transcript should not error: %v", err) + } + if len(sessions) != 1 { + t.Fatalf("expected 1 session, got %d", len(sessions)) + } + // The two complete messages import; the partial one is skipped until + // the next sweep. + if got := len(sessions[0].Messages); got != 2 { + t.Errorf("expected 2 complete messages, got %d", got) + } +} + func TestClaudeCodeParser_ParseFile(t *testing.T) { parser := NewClaudeCode() dir := t.TempDir() diff --git a/internal/journal/parser/query.go b/internal/journal/parser/query.go index 6d76cc338..91116c955 100644 --- a/internal/journal/parser/query.go +++ b/internal/journal/parser/query.go @@ -90,14 +90,30 @@ func findSessionsWithFilter( } } - // Deduplicate by session ID - seen := make(map[string]bool) - var unique []*entity.Session + // Deduplicate by session ID, keeping the richest transcript (most + // messages) for each. One session can span multiple transcript files + // — a resume copies prior history into a new, larger file — and that + // largest copy is the authoritative source. Picking it here (rather + // than first-seen by walk order) means a partial early copy never + // wins over the complete one, so import cannot truncate a resumed + // session; switching to a larger copy is treated as growth downstream + // (plan.Import compares the recorded source path, mtime, and size). + richest := make(map[string]*entity.Session) + var order []string for _, s := range filtered { - if !seen[s.ID] { - seen[s.ID] = true - unique = append(unique, s) + existing, ok := richest[s.ID] + if !ok { + order = append(order, s.ID) + richest[s.ID] = s + continue } + if len(s.Messages) > len(existing.Messages) { + richest[s.ID] = s + } + } + unique := make([]*entity.Session, 0, len(order)) + for _, id := range order { + unique = append(unique, richest[id]) } // Sort by start time (newest first) diff --git a/internal/journal/state/hash.go b/internal/journal/state/hash.go new file mode 100644 index 000000000..b8ee3792a --- /dev/null +++ b/internal/journal/state/hash.go @@ -0,0 +1,31 @@ +// / ctx: https://ctx.ist +// ,'`./ do you remember? +// `.,'\ +// \ Copyright 2026-present Context contributors. +// SPDX-License-Identifier: Apache-2.0 + +package state + +import ( + "crypto/sha256" + "encoding/hex" +) + +// HashRender returns a stable hex digest of a rendered journal-entry +// body, used to prove a file is still exactly what ctx last wrote. +// +// Callers hash the entry BODY (frontmatter stripped), so agent-side +// enrichment — which only touches frontmatter — leaves the digest +// unchanged, while a hand edit to the transcript body changes it. A +// mismatch on a later growth sweep means the file was edited outside +// ctx and must not be clobbered. +// +// Parameters: +// - body: the rendered entry content with any YAML frontmatter removed +// +// Returns: +// - string: lowercase hex SHA-256 of the body +func HashRender(body string) string { + sum := sha256.Sum256([]byte(body)) + return hex.EncodeToString(sum[:]) +} diff --git a/internal/journal/state/state.go b/internal/journal/state/state.go index e9610c4fe..25a06b4e1 100644 --- a/internal/journal/state/state.go +++ b/internal/journal/state/state.go @@ -20,7 +20,13 @@ import ( ) // CurrentVersion is the schema version for the state file. -const CurrentVersion = 1 +// +// v2 adds the per-session Sessions map (source tracking for +// growth-aware import) and the per-entry RenderHash field. v1 files +// load tolerantly: the new maps initialise empty and the in-memory +// version normalises to CurrentVersion, so the file becomes v2 on the +// next Save. +const CurrentVersion = 2 // Load reads the state file from the journal directory. // @@ -38,8 +44,9 @@ func Load(journalDir string) (*State, error) { data, readErr := ctxIo.SafeReadUserFile(filepath.Clean(path)) if os.IsNotExist(readErr) { return &State{ - Version: CurrentVersion, - Entries: make(map[string]File), + Version: CurrentVersion, + Entries: make(map[string]File), + Sessions: make(map[string]Source), }, nil } if readErr != nil { @@ -53,6 +60,13 @@ func Load(journalDir string) (*State, error) { if s.Entries == nil { s.Entries = make(map[string]File) } + // v1 files carry no Sessions map; initialise it empty so growth + // tracking starts cleanly, and normalise the version so the file + // round-trips as v2 on the next Save. + if s.Sessions == nil { + s.Sessions = make(map[string]Source) + } + s.Version = CurrentVersion return &s, nil } @@ -203,6 +217,70 @@ func (s *State) Rename(oldName, newName string) { delete(s.Entries, oldName) } +// SessionSource returns the recorded source stats for a session, and +// whether the session has been seen before. +// +// A session absent from the map has never been imported under schema +// v2 (either genuinely new, or imported under v1 before source +// tracking existed). +// +// Parameters: +// - id: session ID +// +// Returns: +// - Source: recorded source stats (zero value if absent) +// - bool: true if the session id is present in the map +func (s *State) SessionSource(id string) (Source, bool) { + src, ok := s.Sessions[id] + return src, ok +} + +// MarkSource records the transcript stats a session was last rendered +// from. Called after a successful render (or during adoption of an +// already-imported v1 session) so the next sweep can detect growth. +// +// Parameters: +// - id: session ID +// - sourceFile: absolute path to the transcript rendered from +// - mtime: Unix mtime (seconds) of the transcript +// - size: byte size of the transcript +func (s *State) MarkSource(id, sourceFile string, mtime, size int64) { + if s.Sessions == nil { + s.Sessions = make(map[string]Source) + } + s.Sessions[id] = Source{ + SourceFile: sourceFile, + SourceMtime: mtime, + SourceSize: size, + } +} + +// RenderHash returns the recorded hash of the last ctx-authored write +// of a file, or "" if none is recorded (pre-v2 entries, or entries +// never written under v2). +// +// Parameters: +// - filename: journal entry filename +// +// Returns: +// - string: recorded render hash, or "" if absent +func (s *State) RenderHash(filename string) string { + return s.Entries[filename].RenderHash +} + +// SetRenderHash records the hash of a file as ctx just wrote it. Every +// ctx-authored write of an entry must refresh this so growth-aware +// import can later distinguish a ctx-owned file from a hand-edited one. +// +// Parameters: +// - filename: journal entry filename +// - hash: digest from HashRender over the written body +func (s *State) SetRenderHash(filename, hash string) { + ff := s.Entries[filename] + ff.RenderHash = hash + s.Entries[filename] = ff +} + // ClearEnriched removes the enriched date for a file, resetting it to // unenriched. Used when --force re-export discards frontmatter. // diff --git a/internal/journal/state/state_test.go b/internal/journal/state/state_test.go index deb369560..e7ee2a962 100644 --- a/internal/journal/state/state_test.go +++ b/internal/journal/state/state_test.go @@ -66,6 +66,123 @@ func TestRoundTrip(t *testing.T) { } } +func TestLoad_V1Tolerant(t *testing.T) { + dir := t.TempDir() + + // A raw v1 state file: version 1, entries only, no sessions map. + v1 := `{"version":1,"entries":{"2026-01-21-old.md":{"exported":"2026-01-21"}}}` + statePath := filepath.Join(dir, journal.File) + if err := os.WriteFile(statePath, []byte(v1), fs.PermFile); err != nil { + t.Fatal(err) + } + + loaded, err := Load(dir) + if err != nil { + t.Fatalf("Load v1: %v", err) + } + + // Version normalises to current on load. + if loaded.Version != CurrentVersion { + t.Errorf("Version = %d, want %d", loaded.Version, CurrentVersion) + } + // Sessions map is initialised (non-nil) but empty. + if loaded.Sessions == nil { + t.Error("Sessions should be initialised, not nil") + } + if len(loaded.Sessions) != 0 { + t.Errorf("Sessions should be empty, got %d", len(loaded.Sessions)) + } + // Existing entries are preserved untouched. + if !loaded.Exported("2026-01-21-old.md") { + t.Error("v1 entry should be preserved after load") + } +} + +func TestSourceRoundTrip(t *testing.T) { + dir := t.TempDir() + + s := &State{ + Version: CurrentVersion, + Entries: map[string]File{ + "2026-01-21-test.md": { + Exported: "2026-01-21", + RenderHash: "deadbeef", + }, + }, + Sessions: map[string]Source{ + "sess-abc": { + SourceFile: "/transcripts/sess-abc.jsonl", + SourceMtime: 1234567890, + SourceSize: 4096, + }, + }, + } + + if err := s.Save(dir); err != nil { + t.Fatalf("Save: %v", err) + } + loaded, err := Load(dir) + if err != nil { + t.Fatalf("Load: %v", err) + } + + src, ok := loaded.SessionSource("sess-abc") + if !ok { + t.Fatal("session not found after round-trip") + } + if src.SourceFile != "/transcripts/sess-abc.jsonl" { + t.Errorf("SourceFile = %q, want preserved", src.SourceFile) + } + if src.SourceMtime != 1234567890 { + t.Errorf("SourceMtime = %d, want 1234567890", src.SourceMtime) + } + if src.SourceSize != 4096 { + t.Errorf("SourceSize = %d, want 4096", src.SourceSize) + } + if got := loaded.Entries["2026-01-21-test.md"].RenderHash; got != "deadbeef" { + t.Errorf("RenderHash = %q, want %q", got, "deadbeef") + } +} + +func TestSessionSourceAndMark(t *testing.T) { + s := &State{ + Version: CurrentVersion, + Entries: make(map[string]File), + Sessions: make(map[string]Source), + } + + if _, ok := s.SessionSource("nope"); ok { + t.Error("unknown session should report not found") + } + + s.MarkSource("sess-1", "/t/sess-1.jsonl", 100, 200) + src, ok := s.SessionSource("sess-1") + if !ok { + t.Fatal("session should be found after MarkSource") + } + if src.SourceFile != "/t/sess-1.jsonl" || src.SourceMtime != 100 || + src.SourceSize != 200 { + t.Errorf("unexpected source stats: %+v", src) + } + + // MarkSource overwrites with the latest stats. + s.MarkSource("sess-1", "/t/sess-1.jsonl", 150, 300) + src, _ = s.SessionSource("sess-1") + if src.SourceMtime != 150 || src.SourceSize != 300 { + t.Errorf("MarkSource should overwrite, got %+v", src) + } +} + +func TestMarkSource_NilMap(t *testing.T) { + // A State with a nil Sessions map (e.g. hand-constructed) must not + // panic on MarkSource. + s := &State{Version: CurrentVersion, Entries: make(map[string]File)} + s.MarkSource("sess-1", "/t/sess-1.jsonl", 1, 2) + if _, ok := s.SessionSource("sess-1"); !ok { + t.Error("MarkSource should initialise a nil Sessions map") + } +} + func TestCountUnenriched(t *testing.T) { dir := t.TempDir() diff --git a/internal/journal/state/types.go b/internal/journal/state/types.go index 0ca080060..933a3d02a 100644 --- a/internal/journal/state/types.go +++ b/internal/journal/state/types.go @@ -11,9 +11,15 @@ package state // Fields: // - Version: Schema version for forward compatibility // - Entries: Per-file processing state keyed by filename +// - Sessions: Per-session source tracking keyed by session ID +// (schema v2). Records the transcript each session was last +// rendered from so growth-aware import can detect when the +// source has changed. Absent in v1 files; initialised empty on +// load. type State struct { - Version int `json:"version"` - Entries map[string]File `json:"entries"` + Version int `json:"version"` + Entries map[string]File `json:"entries"` + Sessions map[string]Source `json:"sessions,omitempty"` } // File tracks processing stages for a single journal entry. @@ -25,10 +31,36 @@ type State struct { // - Normalized: Date formatting was cleaned up // - FencesVerified: Date fence balance was checked // - Locked: Date the entry was locked from regeneration +// - RenderHash: Hash of the last ctx-authored write of the file +// (schema v2). Lets growth-aware import prove a file is +// unedited before splicing fresh transcript into it; a mismatch +// means a human edited the file and it must not be clobbered. +// Empty in v1 files and for entries never written under v2. type File struct { Exported string `json:"exported,omitempty"` Enriched string `json:"enriched,omitempty"` Normalized string `json:"normalized,omitempty"` FencesVerified string `json:"fences_verified,omitempty"` Locked string `json:"locked,omitempty"` + RenderHash string `json:"render_hash,omitempty"` +} + +// Source records the transcript a session was last rendered from, so +// growth-aware import can detect when the source has changed. +// +// Claude Code JSONL transcripts are append-only, so a change in mtime +// or size is sufficient to detect growth — no content hashing of the +// source is needed. Keyed by session ID (not source path) because one +// session can span multiple transcript files: a resume copies prior +// history into a new file, and switching to that larger copy also +// counts as growth. +// +// Fields: +// - SourceFile: Absolute path to the transcript last rendered from +// - SourceMtime: Unix mtime (seconds) of that transcript at render time +// - SourceSize: Byte size of that transcript at render time +type Source struct { + SourceFile string `json:"source_file"` + SourceMtime int64 `json:"source_mtime"` + SourceSize int64 `json:"source_size"` } diff --git a/internal/write/journal/source.go b/internal/write/journal/source.go index eab580e35..4248ac7ff 100644 --- a/internal/write/journal/source.go +++ b/internal/write/journal/source.go @@ -61,13 +61,14 @@ func ImportedFile(cmd *cobra.Command, filename, suffix string) { // Parameters: // - cmd: Cobra command for output. Nil is a no-op. // - newCount: number of new files to import. +// - grownCount: number of grown sessions completed (self-heal). // - regenCount: number of existing files to regenerate. // - skipCount: number of existing files to skip. // - lockedCount: number of locked files to skip. // - dryRun: when true, uses "Would" instead of "Will". func ImportSummary( cmd *cobra.Command, - newCount, regenCount, skipCount, lockedCount int, + newCount, grownCount, regenCount, skipCount, lockedCount int, dryRun bool, ) { if cmd == nil { @@ -84,6 +85,11 @@ func ImportSummary( desc.Text(text.DescKeyWriteJournalImportPartNew), newCount)) } + if grownCount > 0 { + parts = append(parts, fmt.Sprintf( + desc.Text(text.DescKeyWriteJournalImportPartGrown), + grownCount)) + } if regenCount > 0 { parts = append(parts, fmt.Sprintf( desc.Text(text.DescKeyWriteJournalImportPartRegen), diff --git a/specs/journal-import-self-heal.md b/specs/journal-import-self-heal.md new file mode 100644 index 000000000..18f6f5720 --- /dev/null +++ b/specs/journal-import-self-heal.md @@ -0,0 +1,188 @@ +# Spec: self-healing journal import + +## Problem + +`ctx journal import --all` skips any session whose journal file +already exists. That default is safe for static archives but wrong +for the one thing transcripts actually do: grow. + +Two concrete failures fall out of it: + +1. **Permanent truncation.** Import a session while it is still + running (or before its final messages flush) and the journal + entry freezes at whatever prefix existed at import time. The + skip-existing default guarantees it never completes; the only + cure is remembering `--regenerate`, which reintroduces exactly + the "remember to run this" burden the journal pipeline exists + to remove. +2. **No safe ceremony hook.** Because a mid-session import + poisons the entry forever, journal import cannot be wired into + `/ctx-wrap-up` or a session-end hook without special-casing + the active session — an exclusion flag the user must know + about, one more thing to think about. + +The root cause is that import's unit of memory is the *output +file* ("does it exist?") when it should be the *source +transcript* ("has it changed since I last rendered it?"). + +## Key observation + +Claude Code JSONL transcripts are **append-only**. A transcript +never rewrites history; it only gains lines. Therefore: + +- "source grew" is detectable from mtime + size alone — no + hashing, no diffing; +- a partial import is not a mistake to avoid but an intermediate + state that a later import completes; +- re-rendering a grown session reproduces everything the earlier + render produced, plus the new tail. + +Truncation stops being a hazard the moment import becomes +growth-aware. No active-session exclusion is needed anywhere — +the live session imports as far as it goes today and self-heals +on the next sweep. + +## Design + +### 1. Source tracking in journal state (schema v2) + +`internal/journal/state` gains a per-session map alongside the +existing per-file stage entries: + +```json +{ + "version": 2, + "entries": { ".md": { "exported": "…", "render_hash": "…" } }, + "sessions": { + "": { + "source_file": "", + "source_mtime": 1234567890, + "source_size": 123456 + } + } +} +``` + +- Keyed by **session id**, not source path: one session can span + multiple JSONL files (resume copies prior history into a new + file). The import unit is the session, rendered from the + richest contributing transcript; the chosen file switching to + a larger resume copy also counts as growth. +- v1 files load tolerantly (missing maps initialise empty). The + first v2 run performs a one-time adoption pass: record current + source stats for already-imported sessions *without* + re-rendering, so growth detection starts from the next real + change. + +### 2. Growth-aware planning: New / Grown / Unchanged + +`plan.Import` replaces its exists-check with a three-way decision +from state: + +| Decision | Condition | Action | +|-----------|------------------------------------------|---------------------| +| New | session id absent from state.sessions | render all parts | +| Grown | recorded mtime or size differs | re-render affected | +| Unchanged | recorded mtime and size match | skip | + +Part-awareness makes Grown cheap: growth only *appends* messages, +so earlier parts' message ranges are unchanged by construction — +re-render only the last part plus any newly created parts. + +`--regenerate` survives as an explicit edge-case tool (mass +re-render after a render-format change, healing pre-v2 truncated +entries whose sources will never grow again). It stops being the +routine healing path. **No new flags.** + +### 3. Foreign-edit safety: the render hash + +Journal entries are deliberately editable ("add notes, highlight +key moments, clean up the transcript"), and enrichment / +normalization legitimately rewrite them after import. Auto-updates +must never clobber a hand-edited file. + +Invariant: **`render_hash` always reflects the last ctx-authored +write of the file.** Every pipeline stage that writes the entry +(import, enrich, normalize, fence-verify) refreshes the hash in +state. On Grown: + +- hash matches file → the file is provably ctx-owned → splice the + fresh transcript (preserving enriched frontmatter via the + existing keep-frontmatter machinery); +- hash differs → someone edited it → leave the file untouched, + warn, and suggest `ctx journal lock` (permanent protection) or + an explicit `--regenerate` (deliberate discard). + +Locked entries are never rewritten (existing invariant, unchanged). +Files with no recorded hash (pre-v2) are treated as edited — +warn, never clobber. + +### 4. Live-transcript parse tolerance + +A transcript read mid-write may end in a partial JSONL line. The +parser treats a trailing incomplete line as end-of-input (truncate +to the last complete line) rather than an error or warning. The +missing record is captured on the next sweep — growth-awareness +makes the cut lossless. + +### 5. Delivery: hook first, ceremony as backup + +- `/ctx-wrap-up` runs `ctx journal import --all -y` as a + best-effort, non-blocking step before delegating to + `/ctx-handover`. A failed import never blocks the handover. +- A **SessionEnd hook** in hooks.json fires the same import + automatically on the way out of every session. It wires + `ctx journal import --all -y` directly (output discarded, + `|| true` so a failure never blocks session teardown), + mirroring the existing `ctx agent` hook rather than adding a + redundant `ctx system` passthrough verb: the hooks-wiring + compliance guard resolves any `ctx `, so + `ctx journal import` is covered without a new command, and + the ceremony and hook then share one code path. The ceremony + step stays as belt-and-suspenders: the import is idempotent, + so redundancy costs one stat per session. +- Enrichment stays out of both paths: it is an LLM pass and + belongs to `/ctx-journal-enrich-all`. + +## Decisions + +- **No active-session exclusion.** Growth-awareness makes the + live session safe to import at any moment; an exclusion flag + would be a workaround for a problem this design removes. One + less flag to think about. +- **Render hash over owned-region markers.** Marker-delimited + machine-owned regions were considered and rejected: ctx's + journal contract invites free-form edits anywhere in the file, + and a marker scheme would require migrating the existing corpus + and narrowing that contract. The hash gives the same guarantee + (never clobber human work) with zero file-format change; `lock` + remains the explicit protection for curated entries. +- **mtime+size, no content hashing of sources.** Append-only + sources make byte-level comparison redundant; stat is free and + runs on every sweep. +- **Pre-v2 truncated entries do not auto-heal.** Their sources + will never grow again, so adoption records current stats and + moves on; a documented one-time `--regenerate` heals them. + Silent mass-regeneration on upgrade was rejected as a clobber + risk (no render hash exists yet to prove the files unedited). + +## Acceptance criteria + +- Importing a live session, then importing again after it grows, + yields a complete entry with no flags involved. +- `ctx journal import --all` twice in a row: second run reports + all Unchanged, writes nothing (byte-identical journal dir). +- A hand-edited entry whose session grows is left byte-identical, + with a warning naming the file and both escape hatches. +- Locked entries are never rewritten under any decision. +- Enriched frontmatter survives a Grown re-render. +- A transcript ending in a half-written JSONL line imports its + complete lines without error or warning. +- v1 state files load, adopt, and round-trip to v2 losslessly. +- `/ctx-wrap-up` and the SessionEnd hook both trigger the sweep; + hook wiring passes the shipped-hooks compliance guard. + +## Tasks + +Tracked in TASKS.md under **Phase JI: Self-Healing Journal +Import**. From b3754fb6bc7f46027523431a85b00f67b4df16bc Mon Sep 17 00:00:00 2001 From: Jose Alekhinne Date: Mon, 6 Jul 2026 19:53:22 -0700 Subject: [PATCH 2/8] feat: promote runtime constants to .ctxrc Expose six previously-hardcoded knobs as .ctxrc keys: auto_prune_days, agent_cooldown_minutes, task_budget_pct, convention_budget_pct, title_slug_max_len, recall_list_limit. Absent keys keep prior behavior. Adversarial-review fixes folded in: - C2: auto_prune_days guards <=0 (getter + health.AutoPrune); a negative day count moved the prune cutoff into the future and deleted every session-state file. - C3: title_slug_max_len guards <=0; a negative reached the slice bound in slug.FromTitle and panicked. - M2: agent_cooldown_minutes/task_budget_pct/convention_budget_pct are pointer types, so an explicit 0 (disable / zero-allocation) is distinct from unset (default) rather than being coerced back. - L5: budget percentages clamp to [0,1] and each tier caps at the remaining budget, so percentages summing past 1.0 can't overrun. - L9: the schema-vs-struct bijection test reflects over the real rc.CtxRC (homed in package rc to avoid the assets->rc import cycle), so it can no longer drift from a hand-maintained copy. - L10: slug/doc.go concurrency note corrected (FromTitle is not pure; Reset races the cache). Regression tests: negative-value fallbacks, 0-disables-cooldown, budget clamp, explicit-zero allocation. Spec: specs/ctxrc-constant-promotion.md Signed-off-by: Jose Alekhinne --- docs/cli/index.md | 12 ++ docs/home/configuration.md | 13 ++ internal/assets/schema/ctxrc.schema.json | 32 ++++ internal/assets/schema_test.go | 79 +-------- internal/cli/agent/cmd/root/cmd.go | 3 +- internal/cli/agent/core/budget/assemble.go | 13 +- internal/cli/journal/cmd/source/cmd.go | 4 +- .../cli/system/cmd/contextloadgate/run.go | 2 +- internal/cli/system/core/health/prune.go | 8 + internal/rc/clamp.go | 27 +++ internal/rc/rc.go | 110 ++++++++++++ internal/rc/rc_test.go | 161 ++++++++++++++++++ internal/rc/schema_test.go | 67 ++++++++ internal/rc/types.go | 89 ++++++---- internal/slug/doc.go | 16 +- internal/slug/slug.go | 9 +- 16 files changed, 525 insertions(+), 120 deletions(-) create mode 100644 internal/rc/clamp.go create mode 100644 internal/rc/schema_test.go diff --git a/docs/cli/index.md b/docs/cli/index.md index 5a9cf2ff2..b1bd41fe2 100644 --- a/docs/cli/index.md +++ b/docs/cli/index.md @@ -166,6 +166,12 @@ injection_token_warn: 15000 # Oversize injection warning (0 = disable) context_window: 200000 # Auto-detected for Claude Code; override for other tools billing_token_warn: 0 # One-shot billing warning at this token count (0 = disabled) key_rotation_days: 90 # Days before key rotation nudge +auto_prune_days: 7 # Days before stale session-state files are pruned on load (0/neg = default) +agent_cooldown_minutes: 10 # Minutes between repeated `ctx agent` emissions (0 = disable) +task_budget_pct: 0.40 # Fraction of the agent token budget for tasks (0-1; 0 = none) +convention_budget_pct: 0.20 # Fraction of the agent token budget for conventions (0-1; 0 = none) +title_slug_max_len: 50 # Max characters in journal filename slugs (0/neg = default) +recall_list_limit: 20 # Default `ctx journal source` list size (0/neg = default) session_prefixes: # Recognized session header prefixes (extend for i18n) - "Session:" # English (default) # - "Oturum:" # Turkish (add as needed) @@ -226,6 +232,12 @@ dream: # ctx-dream config (opt-in; off by default) | `hooks.dir` | `string` | `.context/hooks` | Hook scripts directory | | `hooks.timeout` | `int` | `10` | Per-hook execution timeout in seconds | | `hooks.enabled` | `bool` | `true` | Whether hook execution is enabled | +| `auto_prune_days` | `int` | `7` | Days before stale session-state files are auto-pruned on load (non-positive falls back to the default) | +| `agent_cooldown_minutes`| `int` | `10` | Minutes between repeated `ctx agent` emissions; an explicit `0` disables the cooldown | +| `task_budget_pct` | `number` | `0.40` | Fraction of the `ctx agent` token budget for tasks (clamped `0`–`1`; explicit `0` = none) | +| `convention_budget_pct` | `number` | `0.20` | Fraction of the `ctx agent` token budget for conventions (clamped `0`–`1`; explicit `0` = none) | +| `title_slug_max_len` | `int` | `50` | Maximum characters in title-derived journal filename slugs (non-positive falls back to the default) | +| `recall_list_limit` | `int` | `20` | Default `ctx journal source` list size when `--limit` is omitted (non-positive falls back to the default) | **Priority order:** CLI flags > Environment variables > `.ctxrc` > Defaults diff --git a/docs/home/configuration.md b/docs/home/configuration.md index 0448e5b6c..649b359c7 100644 --- a/docs/home/configuration.md +++ b/docs/home/configuration.md @@ -84,6 +84,13 @@ A commented `.ctxrc` showing all options and their defaults: # key_rotation_days: 90 # task_nudge_interval: 5 # Edit/Write calls between task completion nudges # +# auto_prune_days: 7 # days before stale session-state files are pruned on load (0/negative = default) +# agent_cooldown_minutes: 10 # minutes between repeated `ctx agent` emissions (0 = disable the cooldown) +# task_budget_pct: 0.40 # fraction of the `ctx agent` token budget for tasks (0-1; 0 = none) +# convention_budget_pct: 0.20 # fraction of the `ctx agent` token budget for conventions (0-1; 0 = none) +# title_slug_max_len: 50 # max characters in title-derived journal filename slugs (0/negative = default) +# recall_list_limit: 20 # default `ctx journal source` list size when --limit is omitted (0/negative = default) +# # notify: # requires: ctx hook notify setup # events: # required: no events sent unless listed # - loop @@ -155,6 +162,12 @@ A commented `.ctxrc` showing all options and their defaults: | `provenance_required.session_id` | `bool` | `true` | Require `--session-id` on `ctx add` for tasks, decisions, learnings | | `provenance_required.branch` | `bool` | `true` | Require `--branch` on `ctx add` for tasks, decisions, learnings | | `provenance_required.commit` | `bool` | `true` | Require `--commit` on `ctx add` for tasks, decisions, learnings | +| `auto_prune_days` | `int` | `7` | Days before stale session-state files are auto-pruned on context load. Non-positive values fall back to the default (never prunes on `0` or negative) | +| `agent_cooldown_minutes` | `int` | `10` | Minutes between repeated `ctx agent` context-packet emissions. An explicit `0` disables the cooldown (matches `--cooldown 0`); unset uses the default | +| `task_budget_pct` | `number` | `0.40` | Fraction of the `ctx agent` token budget reserved for tasks (clamped to `0`–`1`; explicit `0` allocates none; unset uses the default) | +| `convention_budget_pct` | `number` | `0.20` | Fraction of the `ctx agent` token budget reserved for conventions (clamped to `0`–`1`; explicit `0` allocates none; unset uses the default) | +| `title_slug_max_len` | `int` | `50` | Maximum characters in title-derived journal filename slugs. Non-positive values fall back to the default | +| `recall_list_limit` | `int` | `20` | Default number of sessions `ctx journal source` lists when `--limit` is omitted. Non-positive values fall back to the default | **Default priority order** (*used when `priority_order` is not set*): diff --git a/internal/assets/schema/ctxrc.schema.json b/internal/assets/schema/ctxrc.schema.json index ea7ad13ad..5718c053f 100644 --- a/internal/assets/schema/ctxrc.schema.json +++ b/internal/assets/schema/ctxrc.schema.json @@ -304,6 +304,38 @@ "description": "Executor command template. Empty uses the reference claude -p invocation." } } + }, + "auto_prune_days": { + "type": "integer", + "description": "Days after which session state files are eligible for auto-pruning during context load. Default: 7.", + "minimum": 0 + }, + "agent_cooldown_minutes": { + "type": "integer", + "description": "Minutes to suppress repeated `ctx agent` context packet emissions. Default: 10.", + "minimum": 0 + }, + "task_budget_pct": { + "type": "number", + "description": "Fraction of the token budget allocated to tasks in the agent context packet. Default: 0.40.", + "minimum": 0, + "maximum": 1 + }, + "convention_budget_pct": { + "type": "number", + "description": "Fraction of the token budget allocated to conventions in the agent context packet. Default: 0.20.", + "minimum": 0, + "maximum": 1 + }, + "title_slug_max_len": { + "type": "integer", + "description": "Maximum character length for title-derived slugs used in journal filenames. Default: 50.", + "minimum": 0 + }, + "recall_list_limit": { + "type": "integer", + "description": "Default number of sessions listed by `ctx journal source` when --limit is omitted. Default: 20.", + "minimum": 0 } } } diff --git a/internal/assets/schema_test.go b/internal/assets/schema_test.go index 864b72694..89dfea1cf 100644 --- a/internal/assets/schema_test.go +++ b/internal/assets/schema_test.go @@ -7,12 +7,9 @@ package assets import ( - "encoding/json" "strings" "testing" - "gopkg.in/yaml.v3" - "github.com/ActiveMemory/ctx/internal/config/asset" ) @@ -30,73 +27,9 @@ func TestSchema(t *testing.T) { } } -func TestSchemaCoversCtxRC(t *testing.T) { - // Parse the schema to get its property keys. - schemaData, readErr := FS.ReadFile(asset.PathCtxrcSchema) - if readErr != nil { - t.Fatalf("read schema: %v", readErr) - } - var schema struct { - Properties map[string]json.RawMessage `json:"properties"` - } - if parseErr := json.Unmarshal(schemaData, &schema); parseErr != nil { - t.Fatalf("parse schema: %v", parseErr) - } - - // Parse a zero-value CtxRC to YAML then back to a map to get yaml tags. - // We marshal a struct with all fields set to get every key emitted. - type ctxRC struct { - Profile string `yaml:"profile"` - TokenBudget int `yaml:"token_budget"` - PriorityOrder []int `yaml:"priority_order"` - AutoArchive bool `yaml:"auto_archive"` - ArchiveAfterDays int `yaml:"archive_after_days"` - ScratchpadEncrypt *bool `yaml:"scratchpad_encrypt"` - EntryCountLearnings int `yaml:"entry_count_learnings"` - EntryCountDecisions int `yaml:"entry_count_decisions"` - ConventionLineCount int `yaml:"convention_line_count"` - InjectionTokenWarn int `yaml:"injection_token_warn"` - ContextWindow int `yaml:"context_window"` - BillingTokenWarn int `yaml:"billing_token_warn"` - EventLog bool `yaml:"event_log"` - KeyRotationDays int `yaml:"key_rotation_days"` - TaskNudgeInterval int `yaml:"task_nudge_interval"` - KeyPathOverride string `yaml:"key_path"` - StaleAgeDays int `yaml:"stale_age_days"` - SessionPrefixes []int `yaml:"session_prefixes"` - CompanionCheck *bool `yaml:"companion_check"` - ClassifyRules []int `yaml:"classify_rules"` - SpecSignalWords []int `yaml:"spec_signal_words"` - SpecNudgeMinLen int `yaml:"spec_nudge_min_len"` - Placeholders []int `yaml:"placeholders"` - Notify *int `yaml:"notify"` - FreshnessFiles []int `yaml:"freshness_files"` - Tool string `yaml:"tool"` - Steering *int `yaml:"steering"` - Hooks *int `yaml:"hooks"` - Statusline *int `yaml:"statusline"` - ProvenanceRequired *int `yaml:"provenance_required"` - Dream *int `yaml:"dream"` - } - yamlBytes, marshalErr := yaml.Marshal(ctxRC{}) - if marshalErr != nil { - t.Fatalf("marshal: %v", marshalErr) - } - var structKeys map[string]any - if unmarshalErr := yaml.Unmarshal(yamlBytes, &structKeys); unmarshalErr != nil { - t.Fatalf("unmarshal: %v", unmarshalErr) - } - - // Every struct field must appear in schema. - for key := range structKeys { - if _, ok := schema.Properties[key]; !ok { - t.Errorf("CtxRC field %q has no schema property", key) - } - } - // Every schema property must appear in struct. - for key := range schema.Properties { - if _, ok := structKeys[key]; !ok { - t.Errorf("schema property %q has no CtxRC field", key) - } - } -} +// The .ctxrc schema-vs-struct bijection guard lives in +// internal/rc/schema_test.go (TestSchemaCoversCtxRC): it reflects over +// the real rc.CtxRC so it cannot silently drift from a hand-maintained +// copy. It cannot live here — internal/assets is imported (via +// assets/read/placeholders) by internal/rc, so a package-assets test +// importing rc would form an import cycle. diff --git a/internal/cli/agent/cmd/root/cmd.go b/internal/cli/agent/cmd/root/cmd.go index 44099c2c5..24dae45f8 100644 --- a/internal/cli/agent/cmd/root/cmd.go +++ b/internal/cli/agent/cmd/root/cmd.go @@ -14,7 +14,6 @@ import ( "github.com/ActiveMemory/ctx/internal/assets/read/desc" coreHub "github.com/ActiveMemory/ctx/internal/cli/agent/core/hub" coreSteering "github.com/ActiveMemory/ctx/internal/cli/agent/core/steering" - "github.com/ActiveMemory/ctx/internal/config/agent" "github.com/ActiveMemory/ctx/internal/config/embed/cmd" "github.com/ActiveMemory/ctx/internal/config/embed/flag" cFlag "github.com/ActiveMemory/ctx/internal/config/flag" @@ -108,7 +107,7 @@ func Cmd() *cobra.Command { ) flagbind.DurationFlag( c, &cooldown, - cFlag.Cooldown, agent.DefaultCooldown, + cFlag.Cooldown, time.Duration(rc.AgentCooldownMinutes())*time.Minute, flag.DescKeyAgentCooldown, ) flagbind.StringFlag( diff --git a/internal/cli/agent/core/budget/assemble.go b/internal/cli/agent/core/budget/assemble.go index b2c4b7681..0698dd6bb 100644 --- a/internal/cli/agent/core/budget/assemble.go +++ b/internal/cli/agent/core/budget/assemble.go @@ -13,11 +13,11 @@ import ( "github.com/ActiveMemory/ctx/internal/cli/agent/core/extract" "github.com/ActiveMemory/ctx/internal/cli/agent/core/score" "github.com/ActiveMemory/ctx/internal/cli/agent/core/sort" - "github.com/ActiveMemory/ctx/internal/config/agent" cfgCtx "github.com/ActiveMemory/ctx/internal/config/ctx" "github.com/ActiveMemory/ctx/internal/config/embed/text" ctxToken "github.com/ActiveMemory/ctx/internal/context/token" "github.com/ActiveMemory/ctx/internal/entity" + "github.com/ActiveMemory/ctx/internal/rc" ) // AssemblePacket builds a context packet respecting the token budget. @@ -67,8 +67,10 @@ func AssemblePacket( return pkt } - // Tier 2: Tasks (up to 40% of the original budget) - taskCap := int(float64(budget) * agent.TaskBudgetPct) + // Tier 2: Tasks (up to 40% of the original budget, but never more + // than what is left — clamping to remaining keeps task + convention + // percentages that sum past 1.0 from overrunning the budget). + taskCap := min(int(float64(budget)*rc.TaskBudgetPct()), remaining) allTasks := extract.ActiveTasks(ctx) pkt.Tasks = FitItems(allTasks, taskCap) taskTokens := EstimateSliceTokens(pkt.Tasks) @@ -79,8 +81,9 @@ func AssemblePacket( return pkt } - // Tier 3: Conventions (up to 20% of the original budget) - convCap := int(float64(budget) * agent.ConventionBudgetPct) + // Tier 3: Conventions (up to 20% of the original budget, clamped to + // remaining for the same overrun-prevention reason as Tier 2). + convCap := min(int(float64(budget)*rc.ConventionBudgetPct()), remaining) allConventions := ExtractAllConventions(ctx) pkt.Conventions = FitItems(allConventions, convCap) convTokens := EstimateSliceTokens(pkt.Conventions) diff --git a/internal/cli/journal/cmd/source/cmd.go b/internal/cli/journal/cmd/source/cmd.go index dce783c3d..c57780196 100644 --- a/internal/cli/journal/cmd/source/cmd.go +++ b/internal/cli/journal/cmd/source/cmd.go @@ -14,8 +14,8 @@ import ( "github.com/ActiveMemory/ctx/internal/config/embed/cmd" "github.com/ActiveMemory/ctx/internal/config/embed/flag" cFlag "github.com/ActiveMemory/ctx/internal/config/flag" - "github.com/ActiveMemory/ctx/internal/config/journal" "github.com/ActiveMemory/ctx/internal/flagbind" + "github.com/ActiveMemory/ctx/internal/rc" ) // Cmd returns the journal source subcommand. @@ -94,7 +94,7 @@ func Cmd() *cobra.Command { flagbind.IntFlagP( c, &limit, cFlag.Limit, cFlag.ShortMaxIterations, - journal.DefaultRecallListLimit, + rc.RecallListLimit(), flag.DescKeyJournalSourceLimit, ) diff --git a/internal/cli/system/cmd/contextloadgate/run.go b/internal/cli/system/cmd/contextloadgate/run.go index a01928e3c..81e2330e3 100644 --- a/internal/cli/system/cmd/contextloadgate/run.go +++ b/internal/cli/system/cmd/contextloadgate/run.go @@ -88,7 +88,7 @@ func Run(cmd *cobra.Command, stdin *os.File) error { // Auto-prune stale session state files (best-effort, silent). // Runs once per session at startup - fast directory scan. - health.AutoPrune(loadgate.AutoPruneStaleDays) + health.AutoPrune(rc.AutoPruneDays()) // Unreachable under normal flow: state.Initialized() above already // proved ContextDir succeeds. Kept defensive so a future ContextDir diff --git a/internal/cli/system/core/health/prune.go b/internal/cli/system/core/health/prune.go index f15ff1a32..276a146dc 100644 --- a/internal/cli/system/core/health/prune.go +++ b/internal/cli/system/core/health/prune.go @@ -30,6 +30,14 @@ import ( // Returns: // - int: Number of files pruned func AutoPrune(days int) int { + // Safety guard: a non-positive day count would put the cutoff at + // or after now, matching (and deleting) every state file. Never + // prune on a non-positive threshold — callers pass rc.AutoPruneDays, + // which already coerces this, but AutoPrune must be safe alone. + if days <= 0 { + return 0 + } + // Best-effort: this runs from contextloadgate as fire-and-forget // and must never block session startup. Any state.Dir failure // (including the ErrNoCtxHere bail signal) is swallowed diff --git a/internal/rc/clamp.go b/internal/rc/clamp.go new file mode 100644 index 000000000..ca44e8baa --- /dev/null +++ b/internal/rc/clamp.go @@ -0,0 +1,27 @@ +// / ctx: https://ctx.ist +// ,'`./ do you remember? +// `.,'\ +// \ Copyright 2026-present Context contributors. +// SPDX-License-Identifier: Apache-2.0 + +package rc + +// clampFraction bounds a budget fraction to the closed interval [0, 1]; +// out-of-range configuration is coerced rather than trusted. Used by +// the budget-percentage getters so a hand-edited .ctxrc cannot push an +// allocation above the whole budget or below zero. +// +// Parameters: +// - v: candidate fraction +// +// Returns: +// - float64: v clamped to [0, 1] +func clampFraction(v float64) float64 { + if v < 0 { + return 0 + } + if v > 1 { + return 1 + } + return v +} diff --git a/internal/rc/rc.go b/internal/rc/rc.go index 3c9522aad..4e743190d 100644 --- a/internal/rc/rc.go +++ b/internal/rc/rc.go @@ -12,12 +12,16 @@ import ( "path/filepath" "strings" "sync" + "time" "github.com/ActiveMemory/ctx/internal/assets/read/placeholders" + cfgAgent "github.com/ActiveMemory/ctx/internal/config/agent" "github.com/ActiveMemory/ctx/internal/config/asset" "github.com/ActiveMemory/ctx/internal/config/ctx" "github.com/ActiveMemory/ctx/internal/config/dir" cfgEntry "github.com/ActiveMemory/ctx/internal/config/entry" + cfgJournal "github.com/ActiveMemory/ctx/internal/config/journal" + cfgLoadgate "github.com/ActiveMemory/ctx/internal/config/loadgate" cfgMemory "github.com/ActiveMemory/ctx/internal/config/memory" "github.com/ActiveMemory/ctx/internal/config/parser" "github.com/ActiveMemory/ctx/internal/config/token" @@ -621,6 +625,112 @@ func StatuslineShowCost() bool { return true } +// AutoPruneDays returns the number of days after which session state +// files are eligible for auto-pruning during context load. +// +// Falls back to the default (7) when the key is absent, zero, or +// negative: only a positive value is a real threshold. Guarding +// non-positive values is a safety invariant — a negative day count +// moves the prune cutoff into the future and would delete every +// session-state file (see health.AutoPrune, which guards again). +// +// Returns: +// - int: Days threshold before state files are pruned +func AutoPruneDays() int { + n := RC().AutoPruneDays + if n <= 0 { + return cfgLoadgate.AutoPruneStaleDays + } + return n +} + +// AgentCooldownMinutes returns the cooldown, in minutes, between +// repeated `ctx agent` context packet emissions. Consumers convert +// this to a time.Duration. +// +// The field is a pointer so an unset key (nil → default 10) is +// distinguishable from an explicit 0, which disables the cooldown +// (parity with the `--cooldown 0` flag; cooldown.Active treats any +// value <= 0 as "off"). +// +// Returns: +// - int: Cooldown in minutes +func AgentCooldownMinutes() int { + p := RC().AgentCooldownMinutes + if p == nil { + return int(cfgAgent.DefaultCooldown / time.Minute) + } + return *p +} + +// TaskBudgetPct returns the fraction of the token budget allocated to +// tasks in the agent context packet. +// +// The field is a pointer so an unset key (nil → default 0.40) is +// distinguishable from an explicit 0, which zeroes the section. +// Values are clamped to [0, 1]. +// +// Returns: +// - float64: Task budget fraction +func TaskBudgetPct() float64 { + p := RC().TaskBudgetPct + if p == nil { + return cfgAgent.TaskBudgetPct + } + return clampFraction(*p) +} + +// ConventionBudgetPct returns the fraction of the token budget +// allocated to conventions in the agent context packet. +// +// The field is a pointer so an unset key (nil → default 0.20) is +// distinguishable from an explicit 0, which zeroes the section. +// Values are clamped to [0, 1]. +// +// Returns: +// - float64: Convention budget fraction +func ConventionBudgetPct() float64 { + p := RC().ConventionBudgetPct + if p == nil { + return cfgAgent.ConventionBudgetPct + } + return clampFraction(*p) +} + +// TitleSlugMaxLen returns the maximum character length for +// title-derived slugs used in journal filenames. +// +// Falls back to the default (50) when the key is absent, zero, or +// negative: only a positive length is meaningful. Guarding +// non-positive values prevents a negative from reaching the slice +// bound in slug.FromTitle (which would panic). +// +// Returns: +// - int: Maximum slug length in characters +func TitleSlugMaxLen() int { + n := RC().TitleSlugMaxLen + if n <= 0 { + return cfgJournal.TitleSlugMaxLen + } + return n +} + +// RecallListLimit returns the default number of sessions listed by +// `ctx journal source` when --limit is omitted. +// +// Falls back to the default (20) when the key is absent, zero, or +// negative: only a positive limit is meaningful. +// +// Returns: +// - int: Default session-list limit +func RecallListLimit() int { + n := RC().RecallListLimit + if n <= 0 { + return cfgJournal.DefaultRecallListLimit + } + return n +} + // Reset clears the cached configuration, forcing // reload on the next access. func Reset() { diff --git a/internal/rc/rc_test.go b/internal/rc/rc_test.go index 9bfb1debc..25bdfb763 100644 --- a/internal/rc/rc_test.go +++ b/internal/rc/rc_test.go @@ -11,10 +11,14 @@ import ( "os" "path/filepath" "testing" + "time" + cfgAgent "github.com/ActiveMemory/ctx/internal/config/agent" "github.com/ActiveMemory/ctx/internal/config/ctx" "github.com/ActiveMemory/ctx/internal/config/dir" "github.com/ActiveMemory/ctx/internal/config/env" + cfgJournal "github.com/ActiveMemory/ctx/internal/config/journal" + cfgLoadgate "github.com/ActiveMemory/ctx/internal/config/loadgate" errCtx "github.com/ActiveMemory/ctx/internal/err/context" "github.com/ActiveMemory/ctx/internal/i18n" ) @@ -679,3 +683,160 @@ func TestPlaceholders_UserDuplicateOfDefaultDedupes(t *testing.T) { t.Errorf("set missing %q", "new-marker") } } + +func TestAutoPruneDays_Default(t *testing.T) { + declareContext(t, "") + if got := AutoPruneDays(); got != cfgLoadgate.AutoPruneStaleDays { + t.Errorf("AutoPruneDays() = %d, want %d", got, cfgLoadgate.AutoPruneStaleDays) + } +} + +func TestAutoPruneDays_Custom(t *testing.T) { + declareContext(t, `auto_prune_days: 14`) + if got := AutoPruneDays(); got != 14 { + t.Errorf("AutoPruneDays() = %d, want %d", got, 14) + } +} + +func TestAgentCooldownMinutes_Default(t *testing.T) { + declareContext(t, "") + want := int(cfgAgent.DefaultCooldown / time.Minute) + if got := AgentCooldownMinutes(); got != want { + t.Errorf("AgentCooldownMinutes() = %d, want %d", got, want) + } +} + +func TestAgentCooldownMinutes_Custom(t *testing.T) { + declareContext(t, `agent_cooldown_minutes: 30`) + if got := AgentCooldownMinutes(); got != 30 { + t.Errorf("AgentCooldownMinutes() = %d, want %d", got, 30) + } +} + +func TestTaskBudgetPct_Default(t *testing.T) { + declareContext(t, "") + if got := TaskBudgetPct(); got != cfgAgent.TaskBudgetPct { + t.Errorf("TaskBudgetPct() = %v, want %v", got, cfgAgent.TaskBudgetPct) + } +} + +func TestTaskBudgetPct_Custom(t *testing.T) { + declareContext(t, `task_budget_pct: 0.5`) + if got := TaskBudgetPct(); got != 0.5 { + t.Errorf("TaskBudgetPct() = %v, want %v", got, 0.5) + } +} + +func TestConventionBudgetPct_Default(t *testing.T) { + declareContext(t, "") + if got := ConventionBudgetPct(); got != cfgAgent.ConventionBudgetPct { + t.Errorf("ConventionBudgetPct() = %v, want %v", got, cfgAgent.ConventionBudgetPct) + } +} + +func TestConventionBudgetPct_Custom(t *testing.T) { + declareContext(t, `convention_budget_pct: 0.25`) + if got := ConventionBudgetPct(); got != 0.25 { + t.Errorf("ConventionBudgetPct() = %v, want %v", got, 0.25) + } +} + +func TestTitleSlugMaxLen_Default(t *testing.T) { + declareContext(t, "") + if got := TitleSlugMaxLen(); got != cfgJournal.TitleSlugMaxLen { + t.Errorf("TitleSlugMaxLen() = %d, want %d", got, cfgJournal.TitleSlugMaxLen) + } +} + +func TestTitleSlugMaxLen_Custom(t *testing.T) { + declareContext(t, `title_slug_max_len: 80`) + if got := TitleSlugMaxLen(); got != 80 { + t.Errorf("TitleSlugMaxLen() = %d, want %d", got, 80) + } +} + +func TestRecallListLimit_Default(t *testing.T) { + declareContext(t, "") + if got := RecallListLimit(); got != cfgJournal.DefaultRecallListLimit { + t.Errorf("RecallListLimit() = %d, want %d", + got, cfgJournal.DefaultRecallListLimit) + } +} + +func TestRecallListLimit_Custom(t *testing.T) { + declareContext(t, `recall_list_limit: 50`) + if got := RecallListLimit(); got != 50 { + t.Errorf("RecallListLimit() = %d, want %d", got, 50) + } +} + +// TestAutoPruneDays_NegativeFallsBack guards the data-loss fix: a +// negative day count must fall back to the default, never reach +// health.AutoPrune (where it would move the cutoff into the future and +// delete every state file). +func TestAutoPruneDays_NegativeFallsBack(t *testing.T) { + declareContext(t, `auto_prune_days: -7`) + if got := AutoPruneDays(); got != cfgLoadgate.AutoPruneStaleDays { + t.Errorf("AutoPruneDays() = %d, want default %d", + got, cfgLoadgate.AutoPruneStaleDays) + } +} + +// TestTitleSlugMaxLen_NegativeFallsBack guards the panic fix: a +// negative cap must fall back to the default, never reach the slice +// bound in slug.FromTitle. +func TestTitleSlugMaxLen_NegativeFallsBack(t *testing.T) { + declareContext(t, `title_slug_max_len: -5`) + if got := TitleSlugMaxLen(); got != cfgJournal.TitleSlugMaxLen { + t.Errorf("TitleSlugMaxLen() = %d, want default %d", + got, cfgJournal.TitleSlugMaxLen) + } +} + +// TestRecallListLimit_NegativeFallsBack: a non-positive limit is unset. +func TestRecallListLimit_NegativeFallsBack(t *testing.T) { + declareContext(t, `recall_list_limit: -1`) + if got := RecallListLimit(); got != cfgJournal.DefaultRecallListLimit { + t.Errorf("RecallListLimit() = %d, want default %d", + got, cfgJournal.DefaultRecallListLimit) + } +} + +// TestAgentCooldownMinutes_ZeroDisables: an explicit 0 is distinct from +// unset and disables the cooldown (parity with --cooldown 0), rather +// than being coerced back to the default. +func TestAgentCooldownMinutes_ZeroDisables(t *testing.T) { + declareContext(t, `agent_cooldown_minutes: 0`) + if got := AgentCooldownMinutes(); got != 0 { + t.Errorf("AgentCooldownMinutes() = %d, want 0 (disabled)", got) + } +} + +// TestTaskBudgetPct_ZeroAllowed: an explicit 0 zeroes the section +// rather than falling back to the default. +func TestTaskBudgetPct_ZeroAllowed(t *testing.T) { + declareContext(t, `task_budget_pct: 0.0`) + if got := TaskBudgetPct(); got != 0 { + t.Errorf("TaskBudgetPct() = %v, want 0", got) + } +} + +// TestTaskBudgetPct_ClampsOutOfRange: values outside [0,1] are coerced. +func TestTaskBudgetPct_ClampsOutOfRange(t *testing.T) { + declareContext(t, `task_budget_pct: 1.5`) + if got := TaskBudgetPct(); got != 1 { + t.Errorf("TaskBudgetPct() = %v, want 1 (clamped)", got) + } + declareContext(t, `task_budget_pct: -0.5`) + if got := TaskBudgetPct(); got != 0 { + t.Errorf("TaskBudgetPct() = %v, want 0 (clamped)", got) + } +} + +// TestConventionBudgetPct_ZeroAllowed mirrors the task-pct case. +func TestConventionBudgetPct_ZeroAllowed(t *testing.T) { + declareContext(t, `convention_budget_pct: 0.0`) + if got := ConventionBudgetPct(); got != 0 { + t.Errorf("ConventionBudgetPct() = %v, want 0", got) + } +} diff --git a/internal/rc/schema_test.go b/internal/rc/schema_test.go new file mode 100644 index 000000000..1ab6e8b01 --- /dev/null +++ b/internal/rc/schema_test.go @@ -0,0 +1,67 @@ +// / ctx: https://ctx.ist +// ,'`./ do you remember? +// `.,'\ +// \ Copyright 2026-present Context contributors. +// SPDX-License-Identifier: Apache-2.0 + +package rc + +import ( + "encoding/json" + "reflect" + "strings" + "testing" + + "github.com/ActiveMemory/ctx/internal/assets" + "github.com/ActiveMemory/ctx/internal/config/asset" +) + +// TestSchemaCoversCtxRC asserts a bijection between the yaml tags of +// the real rc.CtxRC struct and the properties declared in the embedded +// .ctxrc JSON schema. It reflects over the live struct (not a +// hand-maintained copy) so a field added to CtxRC without a matching +// schema property — or vice versa — fails the build's tests. +func TestSchemaCoversCtxRC(t *testing.T) { + schemaData, readErr := assets.FS.ReadFile(asset.PathCtxrcSchema) + if readErr != nil { + t.Fatalf("read schema: %v", readErr) + } + var schema struct { + Properties map[string]json.RawMessage `json:"properties"` + } + if parseErr := json.Unmarshal(schemaData, &schema); parseErr != nil { + t.Fatalf("parse schema: %v", parseErr) + } + + structKeys := make(map[string]bool) + rt := reflect.TypeOf(CtxRC{}) + for i := 0; i < rt.NumField(); i++ { + tag := rt.Field(i).Tag.Get("yaml") + if tag == "" || tag == "-" { + continue + } + // Strip options like ",omitempty" to get the bare key. + name := strings.Split(tag, ",")[0] + if name == "" { + continue + } + structKeys[name] = true + } + + if len(structKeys) == 0 { + t.Fatal("reflected zero yaml-tagged fields from CtxRC") + } + + // Every struct field must appear in the schema. + for key := range structKeys { + if _, ok := schema.Properties[key]; !ok { + t.Errorf("CtxRC field %q has no schema property", key) + } + } + // Every schema property must map to a struct field. + for key := range schema.Properties { + if _, ok := structKeys[key]; !ok { + t.Errorf("schema property %q has no CtxRC field", key) + } + } +} diff --git a/internal/rc/types.go b/internal/rc/types.go index 47af54682..6aba0ff5a 100644 --- a/internal/rc/types.go +++ b/internal/rc/types.go @@ -66,38 +66,65 @@ import cfgMemory "github.com/ActiveMemory/ctx/internal/config/memory" // - Hooks: Hook system configuration overrides // - ProvenanceRequired: Per-project relaxation of // provenance flags for ctx add (default: all required) +// - AutoPruneDays: Days after which session state files +// are eligible for auto-pruning during context load +// (default 7; zero or negative means "unset" → default) +// - AgentCooldownMinutes: Minutes to suppress repeated +// `ctx agent` context packet emissions. Pointer type +// distinguishes unset (nil → default 10) from an explicit +// 0, which disables the cooldown (matches `--cooldown 0`). +// - TaskBudgetPct: Fraction of the token budget allocated +// to tasks in the agent context packet. Pointer type: nil +// → default 0.40; an explicit 0 zeroes the section; +// values clamp to [0, 1]. +// - ConventionBudgetPct: Fraction of the token budget +// allocated to conventions in the agent context packet. +// Pointer type: nil → default 0.20; explicit 0 zeroes the +// section; values clamp to [0, 1]. +// - TitleSlugMaxLen: Maximum character length for +// title-derived slugs used in journal filenames +// (default 50; zero or negative means "unset" → default) +// - RecallListLimit: Default number of sessions listed by +// `ctx journal source` when --limit is omitted +// (default 20; zero or negative means "unset" → default) type CtxRC struct { - Profile string `yaml:"profile"` - Tool string `yaml:"tool"` - TokenBudget int `yaml:"token_budget"` - PriorityOrder []string `yaml:"priority_order"` - AutoArchive bool `yaml:"auto_archive"` - ArchiveAfterDays int `yaml:"archive_after_days"` - ScratchpadEncrypt *bool `yaml:"scratchpad_encrypt"` - EntryCountLearnings int `yaml:"entry_count_learnings"` - EntryCountDecisions int `yaml:"entry_count_decisions"` - ConventionLineCount int `yaml:"convention_line_count"` - InjectionTokenWarn int `yaml:"injection_token_warn"` - ContextWindow int `yaml:"context_window"` - BillingTokenWarn int `yaml:"billing_token_warn"` - EventLog bool `yaml:"event_log"` - KeyRotationDays int `yaml:"key_rotation_days"` - TaskNudgeInterval int `yaml:"task_nudge_interval"` - KeyPathOverride string `yaml:"key_path"` - StaleAgeDays int `yaml:"stale_age_days"` - SessionPrefixes []string `yaml:"session_prefixes"` - FreshnessFiles []FreshnessFile `yaml:"freshness_files"` - CompanionCheck *bool `yaml:"companion_check"` - ClassifyRules []cfgMemory.ClassifyRule `yaml:"classify_rules"` - SpecSignalWords []string `yaml:"spec_signal_words"` - SpecNudgeMinLen int `yaml:"spec_nudge_min_len"` - Placeholders []string `yaml:"placeholders"` - Notify *NotifyConfig `yaml:"notify"` - Steering *SteeringRC `yaml:"steering"` - Hooks *HooksRC `yaml:"hooks"` - Statusline *StatuslineRC `yaml:"statusline"` - ProvenanceRequired *ProvenanceConfig `yaml:"provenance_required"` - Dream *DreamRC `yaml:"dream"` + Profile string `yaml:"profile"` + Tool string `yaml:"tool"` + TokenBudget int `yaml:"token_budget"` + PriorityOrder []string `yaml:"priority_order"` + AutoArchive bool `yaml:"auto_archive"` + ArchiveAfterDays int `yaml:"archive_after_days"` + ScratchpadEncrypt *bool `yaml:"scratchpad_encrypt"` + EntryCountLearnings int `yaml:"entry_count_learnings"` + EntryCountDecisions int `yaml:"entry_count_decisions"` + ConventionLineCount int `yaml:"convention_line_count"` + InjectionTokenWarn int `yaml:"injection_token_warn"` + ContextWindow int `yaml:"context_window"` + BillingTokenWarn int `yaml:"billing_token_warn"` + EventLog bool `yaml:"event_log"` + KeyRotationDays int `yaml:"key_rotation_days"` + TaskNudgeInterval int `yaml:"task_nudge_interval"` + KeyPathOverride string `yaml:"key_path"` + StaleAgeDays int `yaml:"stale_age_days"` + SessionPrefixes []string `yaml:"session_prefixes"` + FreshnessFiles []FreshnessFile `yaml:"freshness_files"` + CompanionCheck *bool `yaml:"companion_check"` + ClassifyRules []cfgMemory.ClassifyRule `yaml:"classify_rules"` + SpecSignalWords []string `yaml:"spec_signal_words"` + SpecNudgeMinLen int `yaml:"spec_nudge_min_len"` + Placeholders []string `yaml:"placeholders"` + Notify *NotifyConfig `yaml:"notify"` + Steering *SteeringRC `yaml:"steering"` + Hooks *HooksRC `yaml:"hooks"` + Statusline *StatuslineRC `yaml:"statusline"` + ProvenanceRequired *ProvenanceConfig `yaml:"provenance_required"` + Dream *DreamRC `yaml:"dream"` + AutoPruneDays int `yaml:"auto_prune_days"` + AgentCooldownMinutes *int `yaml:"agent_cooldown_minutes"` + TaskBudgetPct *float64 `yaml:"task_budget_pct"` + ConventionBudgetPct *float64 `yaml:"convention_budget_pct"` + TitleSlugMaxLen int `yaml:"title_slug_max_len"` + RecallListLimit int `yaml:"recall_list_limit"` } // StatuslineRC holds status line configuration from .ctxrc. diff --git a/internal/slug/doc.go b/internal/slug/doc.go index 05e64bec6..1ec61f47c 100644 --- a/internal/slug/doc.go +++ b/internal/slug/doc.go @@ -14,7 +14,8 @@ // - **[FromTitle](title)**: strict kebab-case slug. // Lowercases, replaces every non-alphanumeric run with // a single hyphen, trims, and truncates on a word -// boundary at [journal.TitleSlugMaxLen]. Idempotent. +// boundary at [rc.TitleSlugMaxLen] (configurable via +// .ctxrc title_slug_max_len; default 50). Idempotent. // - **[CleanTitle](title)**: normalises a display title // for storage in YAML frontmatter (whitespace // collapsing + length cap). Pairs with FromTitle. @@ -37,6 +38,15 @@ // // # Concurrency // -// All functions are pure. Concurrent callers never -// race. +// FromTitle is not pure: it reads the cached .ctxrc +// slug-length setting via [rc.TitleSlugMaxLen], which is +// backed by a process-global singleton. Concurrent +// FromTitle calls are safe against each other — the cache +// is populated once via sync.Once and only read +// thereafter — and every other function in the package is +// pure. The one caveat is [rc.Reset], which clears the +// cache (a test-only affordance): running it concurrently +// with slug generation races the cache pointer, so tests +// that call Reset must not do so while a FromTitle call is +// in flight. package slug diff --git a/internal/slug/slug.go b/internal/slug/slug.go index fcc4e91b9..314f25162 100644 --- a/internal/slug/slug.go +++ b/internal/slug/slug.go @@ -15,6 +15,7 @@ import ( "github.com/ActiveMemory/ctx/internal/config/token" "github.com/ActiveMemory/ctx/internal/entity" "github.com/ActiveMemory/ctx/internal/i18n" + "github.com/ActiveMemory/ctx/internal/rc" ) // Path returns a slug that preserves `/` so vendor-namespaced @@ -41,7 +42,8 @@ func Path(s string) string { // // Lowercases the input, replaces non-alphanumeric characters with hyphens, // collapses consecutive hyphens, trims leading/trailing hyphens, and -// truncates on a word boundary at journal.TitleSlugMaxLen characters. +// truncates on a word boundary at rc.TitleSlugMaxLen() characters +// (configurable via .ctxrc title_slug_max_len; default 50). // // Parameters: // - title: Human-readable title string @@ -72,12 +74,13 @@ func FromTitle(title string) string { slug := strings.TrimRight(sb.String(), token.Dash) - if len(slug) <= journal.TitleSlugMaxLen { + maxLen := rc.TitleSlugMaxLen() + if len(slug) <= maxLen { return slug } // Truncate on a word (hyphen) boundary. - truncated := slug[:journal.TitleSlugMaxLen] + truncated := slug[:maxLen] if idx := strings.LastIndex(truncated, token.Dash); idx > 0 { truncated = truncated[:idx] } From 3da1bac6aa0a26b405385e8585373500b9322986 Mon Sep 17 00:00:00 2001 From: Jose Alekhinne Date: Mon, 6 Jul 2026 19:53:39 -0700 Subject: [PATCH 3/8] chore: remove experimental spec-kit skills; add spec-driven recipe Delete the three EXPERIMENTAL (discardable) project skills ctx-experimental-plan / -spec / -handoff. Their only reason to exist was bridging ctx to spec-kit, which this project does not use (zero speckit references outside the trio). ctx-experimental-plan duplicated /ctx-plan and -spec was a lesser /ctx-spec; content is preserved in git history. Add the operator-facing docs/recipes/spec-driven-development.md, the full design->spec->implement pipeline narrative (/ctx-brainstorm, /ctx-plan, /ctx-spec, /ctx-task-out, /ctx-implement), and register it in the recipe index and design-before-coding cross-links. Review fix: the "load-bearing rules" prose said four, the section lists five. Spec: specs/remove-experimental-spec-kit-chain.md Signed-off-by: Jose Alekhinne --- .../skills/ctx-experimental-handoff/SKILL.md | 102 ----- .claude/skills/ctx-experimental-plan/SKILL.md | 114 ------ .claude/skills/ctx-experimental-spec/SKILL.md | 166 --------- docs/recipes/design-before-coding.md | 3 + docs/recipes/index.md | 15 + docs/recipes/spec-driven-development.md | 352 ++++++++++++++++++ specs/remove-experimental-spec-kit-chain.md | 57 +++ 7 files changed, 427 insertions(+), 382 deletions(-) delete mode 100644 .claude/skills/ctx-experimental-handoff/SKILL.md delete mode 100644 .claude/skills/ctx-experimental-plan/SKILL.md delete mode 100644 .claude/skills/ctx-experimental-spec/SKILL.md create mode 100644 docs/recipes/spec-driven-development.md create mode 100644 specs/remove-experimental-spec-kit-chain.md diff --git a/.claude/skills/ctx-experimental-handoff/SKILL.md b/.claude/skills/ctx-experimental-handoff/SKILL.md deleted file mode 100644 index 39ab6f606..000000000 --- a/.claude/skills/ctx-experimental-handoff/SKILL.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -name: ctx-experimental-handoff -description: "EXPERIMENTAL (discardable). Hand a loose intent spec (.context/specs/intent-.md) off to spec-kit's /speckit-specify with a prose synopsis. Optional and graceful — warns and continues if spec-kit is not installed; the intent spec stands either way. Third step of the experimental chain." -allowed-tools: Bash(specify:*), Read, Glob ---- - -# Hand off an intent spec to spec-kit — experimental - -> **Experimental / discardable.** ctx-native port of an external -> spec-handoff skill. It is the delegation seam canonical ctx does -> not have: ctx's chain terminates at `/ctx-implement`, whereas this one -> hands the intent spec to spec-kit. Trial it; if the seam is worth -> keeping, promote it to a real `/ctx-handoff`. - -This skill delegates a loose **intent spec** -(`.context/specs/intent-.md`, written by `/ctx-experimental-spec`) -to a downstream spec-driven pipeline (spec-kit) by invoking its -**`/speckit-specify`** skill with a prose synopsis that points at the -intent spec. ctx owns the pre-spec debate; spec-kit owns -`specify → plan → tasks → implement` and owns REQ-ID numbering. - -**This delegation is OPTIONAL and GRACEFUL:** if spec-kit is not -installed, the skill **warns and continues** — the intent spec still -stands and the user can run `/speckit-specify` themselves later. It -never hard-depends on spec-kit and never calls it over a network; the -handoff is on-disk + slash-command only. - -## When to use this skill - -- After `/ctx-experimental-spec` has written an - `intent-.md` and you want to start spec-kit's build-out from it. -- User says: "hand this off to spec-kit", "kick off speckit", "pipe the - spec onward". - -## When NOT to use this skill - -- The intent spec isn't written yet — run `/ctx-experimental-plan` → - `/ctx-experimental-spec` first. -- The project doesn't use spec-kit — there's nothing to hand off to; the - intent spec is already the deliverable. - -## Procedure - -1. **Resolve the intent spec.** Determine the slug (from the spec just - written, or ask). Check whether `.context/specs/intent-.md` - exists: - - exists → continue with that path. - - missing → it isn't written yet. Tell the user to run - `/ctx-experimental-spec` first, and **stop**. - -2. **Detect spec-kit (graceful gate).** Check whether spec-kit is - present: the `/speckit-specify` skill is available, or the `specify` - binary is on PATH, or a `.specify/` directory exists. If **absent**, - say plainly: - - > Spec-kit not detected. The intent spec stands at `` — run - > `/speckit-specify` with it when spec-kit is set up. - - …and **stop cleanly** (this is success, not failure — graceful - degradation). - -3. **Compose the seed.** Read the intent spec and lift a **2–4 sentence - synopsis** from its one-line promise + Goals — the spec's own words, - not invented. `/speckit-specify` re-derives its own structured - `spec.md` and REQ-IDs from this prose; do **not** pre-shape the - synopsis into spec-kit's template. - -4. **Delegate.** Invoke `/speckit-specify` with: - - > Implement ``. Per the intent spec at ``: - > `` - - Optionally export `SPECIFY_FEATURE_DIRECTORY` if the user wants to pin - a specific `specs/`; otherwise let spec-kit auto-number. - -5. **Close the loop.** After spec-kit mints `REQ--NNN`, remind the - user to thread them back into ctx memory so the chain - `intent spec → task → commit` stays traceable: capture the REQ-IDs in - a task via `/ctx-task-add` (referencing this intent spec), and use - `/ctx-decision-add` for any architectural call. ctx stores REQ-IDs; it - never generates them. - -## Ownership boundary - -ctx owns everything up to and including the intent spec; spec-kit owns -`specify → plan → tasks → implement` and REQ-ID numbering. The two keep -independent on-disk trees (`.context/specs/intent-*.md` vs repo-root -`specs//`); the boundary is crossed only by the prose argument -to `/speckit-specify`, never by spec-kit reading `.context/`. - -## Anti-patterns - -- **Hard-failing when spec-kit is absent** — it's optional; warn and - continue, leaving the intent spec as the standing deliverable. -- **Passing the intent-spec FILE as the seed** — `/speckit-specify` reads - a prose `$ARGUMENTS` description, not a file path. -- **Pre-minting REQ-IDs** in ctx — spec-kit owns numbering; ctx only - stores them after the fact. -- **Pre-shaping the synopsis** into spec-kit's spec-template — it - duplicates spec-kit's own derivation and splits REQ-ID authority. -- **Calling spec-kit over a network** — composition is on-disk + - slash-command only. diff --git a/.claude/skills/ctx-experimental-plan/SKILL.md b/.claude/skills/ctx-experimental-plan/SKILL.md deleted file mode 100644 index f0a22d8d4..000000000 --- a/.claude/skills/ctx-experimental-plan/SKILL.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -name: ctx-experimental-plan -description: "EXPERIMENTAL (discardable). Stress-test a plan through adversarial interview, then write a debated brief to .context/briefs/-.md. First step of the experimental spec-kit delegation chain: /ctx-experimental-plan → /ctx-experimental-spec → /ctx-experimental-handoff." -allowed-tools: Read, Write, Glob, Grep, Bash(date:*) ---- - -# Plan scrutiny (adversarial interview) — experimental - -> **Experimental / discardable.** This is a ctx-native port of an -> external plan-scrutiny skill, kept as a project-level skill so it can -> be trialed and deleted without touching ctx's canonical -> `/ctx-plan`. It feeds the experimental spec-kit delegation chain -> `/ctx-experimental-plan → /ctx-experimental-spec → -> /ctx-experimental-handoff`. If it earns its keep, fold the good parts -> into the real skills; otherwise `rm -rf` this directory. - -You are a skeptical collaborator. The user has a plan and wants it -attacked. Your job is to surface what's weak, missing, or unexamined — -not to help them feel ready. - -State the plan as you understand it and proceed. Only pause if your -restatement exposes a material ambiguity or contradiction. - -Ask one question at a time. Each question must test something specific: -an assumption, a tradeoff, or a failure mode. No fishing. No clarifying -questions asked merely to reduce your own workload. - -After the user answers, push back, agree, narrow the question, or move -on — don't just accumulate. Walk the tree depth-first: settle decisions -that constrain others before opening siblings. - -Don't ask the user what the code, `docs/`, or existing `.context/` -files can answer. Read first. Reserve questions for intent, priorities, -tradeoffs, and context that lives only in the user's head. - -Cycle through these angles; don't dwell on one: - -- Scope: what's NOT in this plan, and why? -- Failure modes: what breaks this? How would you notice? -- Alternatives: what did you reject, and what would change your mind? -- Sequencing: why this order? What if step 2 fails? -- Reversibility: if you're wrong in 3 months, how expensive is the unwind? -- Hidden assumptions: what must be true for this to work that isn't yet? - -Offer your take after the user answers — not before. The exception is -when the user is genuinely stuck; then propose a concrete possibility -and ask them to react. - -If the user drifts into implementation mechanics before the main bet is -clear, pull the conversation back to the unresolved bet. - -If a core assumption collapses mid-debate, say so plainly. Don't keep -politely working through the checklist on a plan that's already rotten. - -Do not produce an implementation plan. The deliverable is a debated -brief, not a task list. - -Stop when the user can describe, without your help: - -- what they're betting on -- what they rejected -- the top three failure modes -- the cheapest way to validate the bet -- what becomes expensive to unwind - -## Write the debated brief - -After the interview concludes, offer to write the debated brief to -`.context/briefs/-.md` (create `.context/briefs/` if absent; -`` is a short kebab-case handle for this plan). Match the existing -brief convention: `` is `YYYYMMDDTHHMMSSZ` from -`date -u +%Y%m%dT%H%M%SZ`, so experimental briefs sort alongside real -ones. There is no CLI mint — write the file directly. - -Reuse the **same ``** downstream: `/ctx-experimental-spec` derives -its intent spec name from it, so the brief and the spec share one -identity. - -The brief is not a paraphrase of the conversation. It is a written -record of the *bet, the rejections, the failure modes, the validation -route, and the unwind cost* — in the user's words, lightly compressed -for clarity. New facts are not added. A typical shape: - -1. **The bet** — what this plan commits to. -2. **Rejected alternatives** — and what would change the user's mind. -3. **Top failure modes** — at least three, with how you'd notice each. -4. **Cheapest validation** — the smallest experiment that tests the bet. -5. **Unwind cost** — what becomes expensive if this is wrong in 3 months. -6. **Open questions** — anything still unresolved. - -If the user declines to save, do not push. The bet still lives in their -head; the brief is for the next session and the handoff to -`/ctx-experimental-spec`, and they may not need one. - -## When to use this skill - -- User explicitly invokes `/ctx-experimental-plan`. -- User wants to stress-test, red-team, or sanity-check a plan before - locking scope — and intends to feed it onward to spec-kit via the - experimental chain. - -## Edge cases - -- **No `.context/` yet:** suggest `ctx init` before treating project - memory as authoritative. -- **User wants a task breakdown, not scrutiny:** say this skill stops at - a debated brief; offer `/ctx-task-add` for capture, or - `/ctx-experimental-spec` if they want the intent doc next. - -## Anti-patterns - -- Do not produce milestone charts or implementation checklists — that - violates the deliverable above. -- Do not fabricate user intent; ask when the bet is unclear. diff --git a/.claude/skills/ctx-experimental-spec/SKILL.md b/.claude/skills/ctx-experimental-spec/SKILL.md deleted file mode 100644 index 7baa4ac2d..000000000 --- a/.claude/skills/ctx-experimental-spec/SKILL.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -name: ctx-experimental-spec -description: "EXPERIMENTAL (discardable). Turn a debated brief into a LOOSE intent spec at .context/specs/intent-.md — deliberately not pre-shaped into spec-kit's template. Second step of the experimental chain: /ctx-experimental-plan → /ctx-experimental-spec → /ctx-experimental-handoff." -allowed-tools: Read, Edit, Write, Glob, Grep ---- - -# Write an intent spec from a debrief — experimental - -> **Experimental / discardable.** ctx-native port of an external -> intent-spec skill. It deliberately writes a **loose intent spec** in -> a ctx-namespaced location (`.context/specs/`), separate from -> spec-kit's repo-root `specs//`, so the two trees never -> collide. This differs from canonical `/ctx-spec`, which walks the full -> `specs/tpl/spec-template.md` and writes a complete spec to repo-root -> `specs/`. The point of *this* skill is to seed spec-kit, not to -> double-specify. Trial it, then decide what to fold into `/ctx-spec`. - -This skill **creates or extends a Markdown intent spec** under -`.context/specs/` from material produced by `/ctx-experimental-plan` (a -debated brief) or **equivalent notes** — meaning a **file path or -user-provided paste** only, not the agent's memory of a prior -conversation. It is **not** a second adversarial interview — it is -**structuring intent for a downstream spec-kit handoff**, without -replacing frozen contracts in `docs/`. - -Separation of concerns: - -- **`/ctx-experimental-plan`** — stress-test the bet; output is a - **debated brief** (no milestone task list as the primary deliverable). -- **`/ctx-experimental-spec`** — turn agreed content into a **loose - intent spec** that `/ctx-experimental-handoff` hands to spec-kit. - -## When to use this skill - -- User invokes `/ctx-experimental-spec`. -- User says: "write the intent spec", "formalize the debrief", "turn the - plan into something we can hand to spec-kit." -- Immediately after saving a brief under `.context/briefs/`. - -## Input contract (pick one path) - -1. **Preferred:** User gives a **path** to an existing brief, e.g. - `.context/briefs/-.md`. **Read that file first** and treat - it as authoritative source text. - -2. **Paste:** User pastes the brief inline. Use their text verbatim - where it matters; do not invent decisions they did not state. - -3. **Missing input:** If neither path nor paste exists, **ask once:** - "Where is the brief — path under `.context/briefs/`, or paste here?" - If they have only run `/ctx-experimental-plan` in chat, ask them to - **save** the brief first — do not fabricate a debrief from memory. - -## Authority order (do not invert) - -When `docs/`, `DECISIONS.md`, and the brief could conflict, treat -sources in this order: - -1. **Frozen contracts** under `docs/` (release notes, public CLI docs) -2. **Recorded decisions** in `.context/DECISIONS.md` -3. **The supplied brief** or pasted notes (this skill's input) -4. **Agent inference** — only when explicitly labeled **`TBD`** in the - spec body, never as silent fact - -Specs are where accidental authority inversion happens; follow this -stack. If the brief contradicts a frozen contract, surface the -contradiction to the user; do not silently follow the brief. - -## Procedure - -1. **Confirm scope.** One sentence: what feature or problem this spec - covers. If the brief mixes multiple unrelated bets, ask which - **single** spec to write first (or split into multiple files with - explicit user choice). - -2. **Name the file deterministically.** Write to - `.context/specs/intent-.md`, where `` is the **same slug** - as the brief this spec derives from — so the brief - `-.md` and the intent spec `intent-.md` share one - identity (the handle `/ctx-experimental-handoff` resolves against). - **List `.context/specs/`** first (create it if absent); if - `intent-.md` already exists you are extending it, not creating a - second. Only ask the user about the slug when there is no brief to - inherit it from. - -3. **Draft the spec** (adapt sections to the problem — not all sections - apply every time). A typical shape: - - - `# Intent spec: ` — one-line promise of what "done" means for - *this* doc (not the whole product). - - **Context / problem** — why this exists (pull from brief). - - **Goals and non-goals** — in scope / explicitly out. - - **Proposed approach** — high-level design or behavior (no code dump - unless the brief already had it). - - **User-visible contract** — CLI flags, errors, file paths, if - relevant. - - **Risks and failure modes** — from the brief; extend from code - reading **only** when the brief names **concrete** files, commands, - packages, or existing behavior to inspect. Do **not** perform a - broad architecture review as part of this skill. - - **Open questions** — what still needs a decision or spike. - - **References** — link to the brief path, related `TASKS.md` lines, - `DECISIONS.md` headings, `docs/` specs if any. - - Keep it **loose**. Inspired by strong specs (problem → solution → - concepts → edge cases) but shape is flexible; omit sections that add - noise. - -4. **Write the file** at `.context/specs/intent-<slug>.md`. End with a - **Source** line (path to the brief or `"inline paste from user"`) and - a single **Handoff** reference line naming the downstream pickup: - `Handoff: /ctx-experimental-handoff → /speckit-specify`. Keep the spec - body project-defined — **do not** pre-shape it into spec-kit's - `spec-template.md` (User Scenarios P1/P2/P3, Functional Requirements, - Success Criteria). `/speckit-specify` re-derives that structure and - mints its own REQ-IDs from prose; pre-shaping duplicates its job and - splits REQ-ID authority. That single Handoff line is the only - downstream-aware element. - -5. **Suggest follow-ups** (do not act without consent): e.g. - `/ctx-task-add` to add a TASKS.md item pointing at this spec, - `/ctx-decision-add` if a new architectural commitment was stated, or - `/ctx-experimental-handoff` to seed `/speckit-specify` from this - intent spec (optional; it warns and continues if spec-kit is absent). - -## Response contract - -After writing the spec file, reply with: - -- **Path written** (one line). -- **2–4 bullets** summarizing what the spec commits to (not a wall of - text). -- **Open questions**, if any remain. -- **Suggested next action** — usually `/ctx-experimental-handoff` to seed - spec-kit, `/ctx-task-add`, or `/ctx-decision-add` when a trade-off - needs recording. - -Do **not** paste the full spec into chat unless the user asks. - -## Edge cases - -- **No `.context/`:** suggest `ctx init` first; `specs/` is meaningless - without project memory. -- **Conflict with `docs/`:** if the user wants to change a **frozen** - contract, say so plainly — `.context/specs/` is for **intent**; - changing `docs/` may need a recorded decision via `/ctx-decision-add`. -- **User asks for implementation tasks inside the spec:** a short - **Suggested milestones** subsection is OK if the brief already implies - order; otherwise keep the spec intent-level and point them to - `/ctx-task-add`. Suggested milestones must not become the primary - artifact — if the list would exceed **five** items, stop and recommend - `/ctx-task-add` for the rest. - -## Anti-patterns - -- Do not copy-paste proprietary specs from other products verbatim; - **rephrase** for this repo. -- Do not invent `--flag` names or file paths the brief did not imply; - mark as **TBD** instead. -- Do not pre-shape the intent spec into spec-kit's template — that is the - whole reason this skill is separate from `/ctx-spec`. -- Do not treat this file as `DECISIONS.md`; record **approved** trade-offs - there via `/ctx-decision-add` when the user commits. -- Do not use this skill as permission to **infer** scope, silently - override `docs/` or `DECISIONS.md`, or **re-open** broad discovery — the - **Authority order** and **Risks** bounds above are hard limits. diff --git a/docs/recipes/design-before-coding.md b/docs/recipes/design-before-coding.md index f19043431..89b723b80 100644 --- a/docs/recipes/design-before-coding.md +++ b/docs/recipes/design-before-coding.md @@ -246,6 +246,9 @@ You don't need skill names. Natural language works: step-by-step execution with verification * [Scrutinizing a Plan](scrutinizing-a-plan.md): the adversarial interview that belongs between brainstorm and spec +* [Spec-Driven Development](spec-driven-development.md): the full + operator's manual for the chain — the debated brief, per-milestone + tasking, and the gates — when a feature spans several milestones * [Tracking Work Across Sessions](task-management.md): task lifecycle and archival * [Importing Claude Code Plans](import-plans.md): turning ephemeral plans diff --git a/docs/recipes/index.md b/docs/recipes/index.md index 746ed752a..22f0150b4 100644 --- a/docs/recipes/index.md +++ b/docs/recipes/index.md @@ -376,6 +376,21 @@ plans, this attacks them. --- +### [Spec-Driven Development](spec-driven-development.md) + +The full design-to-implementation pipeline from the operator's seat: +**debate** the bet into a brief, **spec** all milestones once, **task +out** each milestone just-in-time behind the rolling-wave gate, then +**implement**. Covers the load-bearing mechanics a newcomer has to +reverse-engineer otherwise — altitude, blocking-TBD gates, and the +plan-as-ledger vs. TASKS.md-as-projection split — with a worked +multi-milestone example. + +**Uses**: `/ctx-plan`, `/ctx-spec`, `/ctx-task-out`, `/ctx-implement`, +`/ctx-decision-add` + +--- + ## Agents and Automation ### [Building Project Skills](building-skills.md) diff --git a/docs/recipes/spec-driven-development.md b/docs/recipes/spec-driven-development.md new file mode 100644 index 000000000..c13f00c2b --- /dev/null +++ b/docs/recipes/spec-driven-development.md @@ -0,0 +1,352 @@ +--- +title: "Spec-Driven Development" +icon: lucide/milestone +--- + +![ctx](../images/ctx-banner.png) + +## The Problem + +A feature big enough to span several milestones doesn't fail at the +keyboard. It fails at the *seams*: the bet gets re-argued halfway +through implementation, a "plan" for milestone three turns out to be +fiction by the time you reach it, a decision the code silently assumed +was never written down, and two different files each claim to be the +authoritative list of what's done. + +The five skills that make up the design-to-implementation pipeline each +solve one seam. But the pipeline only holds together if you understand +*which skill owns which decision, and at what altitude*. Read the skill +texts in isolation and the chain looks like five ways to write a +Markdown file. Run them without the mental model and you end up +reverse-engineering the whole thing from error messages. + +**This recipe is that mental model, from the operator's seat.** It +walks one invented-but-realistic feature — a weekly context digest — +through all five stages, and calls out the five load-bearing rules that +aren't obvious from any single skill. + +!!! note "Relationship to *Design Before Coding*" + [Design Before Coding](design-before-coding.md) is the gentle + on-ramp: brainstorm → spec → task-out → implement, four skills, one + small feature. This recipe is the full chain **including the + debated-brief step** (`/ctx-plan`), aimed at multi-milestone work + where the seams actually bite. If you only ever ship + single-session features, the on-ramp is enough. + +## TL;DR + +```text +/ctx-brainstorm # shape the vague idea +/ctx-plan # debate the bet → a brief +/ctx-spec --brief .context/briefs/<TS>-<slug>.md # commit the whole spec +/ctx-task-out --spec specs/<feature>.md --milestone m0 # decompose ONE milestone +/ctx-implement specs/plans/m0.md # execute, verify, checkpoint +``` + +Five skills, one direction. The canonical chain, with the altitude each +step works at: + +```text +/ctx-brainstorm → /ctx-plan → /ctx-spec → /ctx-task-out → /ctx-implement + (vague) (contested) (committed) (decomposed) (execution) +``` + +`/ctx-plan` is not optional decoration. It is where the bet is +*attacked* and written down as a debated brief, before the spec commits +to it. Skip it and the spec inherits an unexamined bet; the argument you +avoided resurfaces mid-implementation, where it is most expensive. + +## Commands and Skills Used + +| Tool | Type | Purpose | +|---------------------|-------|----------------------------------------------------------------| +| `/ctx-brainstorm` | Skill | Turn a vague idea into a validated design (conversation only) | +| `/ctx-plan` | Skill | Attack the bet; write a *debated brief* to `.context/briefs/` | +| `/ctx-spec` | Skill | Absorb the brief into a committed spec covering all milestones | +| `/ctx-task-out` | Skill | Decompose **one** milestone into `specs/plans/<milestone>.md` | +| `/ctx-implement` | Skill | Execute the plan step-by-step, updating the execution ledger | +| `/ctx-decision-add` | Skill | Record a blocking decision the milestone forces into the open | + +## The Running Example + +Every stage below moves the same feature forward. Follow it end to end +rather than reading the stages as isolated commands. + +> **Weekly Context Digest** (`ctx digest`). Over dozens of sessions, +> `DECISIONS.md` and `LEARNINGS.md` pile up and nobody re-reads them. A +> periodic rollup resurfaces *what changed this week* so it doesn't rot. + +The feature has four milestones. Only the first is planned in detail +right now; the rest exist in the spec as boundaries, not task lists. + +| Milestone | Scope | +|-----------|--------------------------------------------------------| +| **m0** | Render: `ctx digest --since <date>` prints a Markdown rollup to stdout | +| **m1** | Schedule: surface the digest at session start, at most weekly | +| **m2** | Deliver: push the digest through the `ctx hook notify` webhook | +| **m3** | *(deferred)* Roll up across projects via `ctx hub` | + +## Stage 1 — Debate the bet (`/ctx-plan`) + +You have a rough shape (`/ctx-brainstorm` got you here) but you have not +committed. `/ctx-plan` is a skeptical collaborator: it attacks the bet +one question at a time — scope, failure modes, rejected alternatives, +sequencing, reversibility — and stops when *you* can state the bet, what +you rejected, the top failure modes, the cheapest validation, and the +unwind cost, without help. + +```text +You: /ctx-plan + I want a weekly digest that summarizes what changed in the + context files. + +Agent: One question at a time. Generated from the structured files, or + summarized by an LLM from free text? + +You: ...generated. An LLM summary would drift and I couldn't cite it. + +Agent: Then the cheapest thing that proves the bet is m0 render-only — + no schedule, no delivery. What would tell you the digest is + worth building delivery for? + +You: Whether I actually read it. Ship m0, live with it a week, then + decide on m1. +``` + +The deliverable is **not** a task list. It is a *debated brief* at +`.context/briefs/<TS>-context-digest.md`: the bet (render from +structured files, not LLM summary), the rejections (LLM summary; a +separate digest datastore), the failure modes (empty window, giant +window, digest nobody reads), the validation route (ship m0, measure +readership), and the unwind cost. + +The bet is debated **once, here, for the whole feature.** Not once per +milestone. That is the altitude rule — see below. + +## Stage 2 — Commit the spec (`/ctx-spec --brief`) + +`/ctx-spec --brief <path>` treats the brief as authoritative and skips +the interactive Q&A. It lifts the brief into the spec template +verbatim where the brief speaks, and writes `TBD` where the brief is +silent — it does not invent. The result is `specs/context-digest.md`, +covering **all four milestones**, plus the open questions the bet left +unresolved: + +```text +Open Questions + TBD-1 Default digest window — 7 days, or "since last run"? + TBD-2 Delivery transport — webhook only, or email too? + TBD-3 Cross-project identity/dedup for the hub rollup +``` + +Note what the spec is *not*: it is not a task breakdown, and it does not +resolve the TBDs. It commits the what/why at spec altitude and hands the +TBDs downstream, each to be forced open at the milestone that actually +embeds it. A small, single-session spec would stop here and go straight +to `/ctx-implement`. This one spans milestones, so it goes to +`/ctx-task-out`. + +## Stage 3 — Task out one milestone (`/ctx-task-out`) + +This is the step the other four skills leave unowned: `/ctx-plan` +disclaims implementation planning, `/ctx-spec` stops at spec altitude, +and `/ctx-implement` opens with "use when you have a plan document." +`/ctx-task-out` produces that plan — for **one** milestone at a time. + +```text +You: /ctx-task-out --spec specs/context-digest.md --milestone m0 + +Agent: Blocking-TBD gate for m0: + TBD-1 (default window) — DEFERRABLE. m0 takes an explicit + --since; no task assumes a default. Blocking at m1. + TBD-2 (transport) — DEFERRABLE. m0 prints to stdout. + Blocking at m2. + TBD-3 (hub identity) — DEFERRABLE. Blocking at m3. + No blocker for m0. Decomposing. + + Wrote specs/plans/m0.md: data model, CLI contract, test matrix, + 10 tasks (T01–T10) with falsifiable acceptance criteria and an + `st` column. TASKS.md gained one epic anchor: + "Digest m0: render — Plan: specs/plans/m0.md (T01–T10)". +``` + +Two gates run here, and both are refusals, not warnings: + +- **Blocking-TBD gate.** Every open question is classified *blocking or + deferrable for this milestone*. A TBD is blocking if any task in the + milestone would embed an assumption about its answer. The skill + refuses to decompose past a blocker — it lists them, names who can + resolve them, and stops. Resolution lands as a spec edit or a + `DECISIONS.md` entry **first**; the plan only points at that record. A + decision that exists nowhere but the plan is *minting*, and the gate + exists to stop it. +- **Rolling-wave gate.** If a prior milestone's plan exists and its + definition of done (DoD) is not checked off, the skill refuses to + decompose the next one. Tasking a distant milestone produces fiction: + the current milestone's measurements are allowed to reshape everything + downstream. + +## Stage 4 — Implement the milestone (`/ctx-implement`) + +`/ctx-implement specs/plans/m0.md` breaks the plan into atomic steps, +verifies each (build, test, or the task's own acceptance criterion, +run verbatim), and checkpoints every 3–5 steps. Its bookkeeping is what +keeps the two surfaces honest: + +- It flips a task's `st` cell to `[x]` **only** when the acceptance + criterion demonstrably passed — the command ran, the test is green, + the behavior was observed. `st` never moves backward silently. +- When every id in an epic's range is `[x]` (or `[o]`, obsoleted by + amendment), it marks that TASKS.md epic `[x]`. Sync is one-way, plan → + TASKS.md. +- It leaves the **DoD boxes alone.** DoD is confirmed by measurement or + by you — never derived from the tasks that "cover" it being done. + +For the digest, m0's DoD is not "T01–T10 are all `[x]`." It is: *you +ran `ctx digest --since <date>` against a real project and confirmed the +output is readable and correct.* You check that box after reading a real +digest — because the whole bet was "is this worth reading?" and only +measurement answers it. + +## Stage 5 — Roll the wave (the next milestone) + +A week later you have read a few digests and decided m1 is worth +building. Now — and only now — you check m0's DoD box. That single act +opens the rolling-wave gate for m1: + +```text +You: /ctx-task-out --spec specs/context-digest.md --milestone m1 + +Agent: Rolling-wave gate: m0 DoD is checked. Proceeding. + Blocking-TBD gate for m1: + TBD-1 (default window) — NOW BLOCKING. m1 schedules, so a task + must assume a default window. Resolve before I decompose. + Stopping. Resolve TBD-1 (spec edit or DECISIONS.md), then re-run. + +You: /ctx-decision-add "Digest default window is 'since last run', + falling back to 7 days on first run" + +Agent: Recorded D-014. Re-run /ctx-task-out --milestone m1 when ready. +``` + +The debate that would have been a *per-milestone re-litigation of the +bet* is instead a single, scoped decision — exactly the one m1 embeds — +forced into `DECISIONS.md` before any task can silently assume an +answer. That is the blocking-TBD gate doing the job per-milestone +debates used to do, without reopening the bet. + +## The Rules the Diagram Doesn't Show + +The arrows tell you the *order*. These five rules tell you *why the +order holds* — and they are what a newcomer has to reverse-engineer. + +### 1. Altitude: the bet is debated once + +The brief is **per-bet, never per-milestone.** `/ctx-plan` debates the +bet one time; `/ctx-spec` commits it across every milestone; +`/ctx-task-out` decomposes — it *does not redesign the bet*. If +decomposition makes you want to re-argue scope or behavior, that is a +signal to route back up to `/ctx-plan`, not to quietly change course in +the plan. Milestones are altitudes of *execution*, not fresh betting +opportunities. + +### 2. Plans are just-in-time, behind the rolling-wave gate + +You plan the milestone you are about to build, and no further. A plan +for a milestone three steps out is written against measurements you +have not taken yet — it is fiction with a task table. The rolling-wave +gate enforces this mechanically: milestone N+1 cannot be tasked out +while milestone N's DoD is unmet. (You *can* override explicitly; the +override is logged in the plan's Amendments section, so the fiction is +at least on the record.) + +### 3. Blocking-TBD gates replace per-milestone debates + +Because the bet is debated once, milestones don't get their own +debates. What they get is the blocking-TBD gate: each `/ctx-task-out` +run forces open *exactly* the decisions that milestone's tasks would +otherwise embed as silent assumptions — no more, no fewer. A deferrable +TBD doesn't vanish; it is carried into the plan (Out of scope or Risks), +annotated with the milestone at which it graduates to blocking. This is +how a big, half-decided spec becomes buildable without a design +committee at every step. + +### 4. Two surfaces, one truth + +There are two places milestone progress appears, and only one is +authoritative: + +- **The plan (`specs/plans/<milestone>.md`) is the execution ledger.** + Its task table has an `st` column — `[ ]` pending, `[x]` done, `[o]` + obsoleted — and its Scope & DoD section carries the DoD checkboxes. + This is the single source of truth for what's done. +- **TASKS.md epics are one-way projections.** Each epic anchor carries a + *disjoint* task-id range (`Plan: specs/plans/m0.md (T01–T10)`); the + ranges partition the plan's ids with none double-counted. An epic is + checked `[x]` only when its whole range is `[x]`/`[o]` in the plan. + Sync flows plan → TASKS.md, never back. + +And the load-bearing exception: **DoD is confirmed by measurement or by +you, never derived from task completion.** All ten tasks green does not +check the DoD box. The rolling-wave gate reads *only* the DoD box — so +if you let task completion auto-derive it, you have quietly disabled the +gate that stops you from planning fiction. + +### 5. When a new brief is legitimate + +Going back to `/ctx-plan` mid-feature is not failure — but only for the +right reasons. A new brief is warranted when: + +- **A deferred bet returns.** m3 (the hub rollup) was parked as Out of + scope. Months later you want it. That is a *new bet* — deferred + machinery coming back — so it earns a fresh `/ctx-plan` pass and its + own brief. It is not an amendment to m0. +- **Evidence falsifies the committed bet.** If mid-m2 the measurements + show webhook delivery is the wrong transport entirely, that + disagreement is with the *spec*, and it routes *up* through + `/ctx-plan`. + +What is **never** legitimate is relitigating the bet *from below* — at +the implement seat, by weakening a task's acceptance criterion until it +passes, or by inventing a decision in the plan that the spec never made. +Amendments cover implementation reality (a task obsoleted, a new task +appended, a measurement gate that fired); the bet is contested only at +plan altitude, in the open. + +## Tips + +* **Don't skip `/ctx-plan` to "save time."** The argument you skip + doesn't disappear; it moves to implementation, where it costs the + most. Ten minutes of adversarial interview is cheap insurance. +* **Let the DoD box be earned.** The temptation to tick it when the + tasks are all green is exactly the failure the rolling-wave gate + guards against. Leave it for measurement or your own confirmation. +* **A blocking TBD is a feature, not a blocker.** When `/ctx-task-out` + refuses, it just told you the one decision this milestone can't fake. + Record it (`/ctx-decision-add`) and re-run — that is the workflow + working. +* **Never edit an acceptance criterion in place once its task has + started.** Weakening the test until it passes is the exact failure the + amendment rule exists to prevent. A criterion change is an + `/ctx-task-out` amendment run, logged with date · what · why. +* **One milestone in flight at a time.** If you find yourself wanting to + task out two milestones before finishing the first, that is the + rolling-wave gate telling you the first isn't actually done. + +## See Also + +* [Design Before Coding](design-before-coding.md): the four-skill + on-ramp; start there if the feature fits one session. +* [Scrutinizing a Plan](scrutinizing-a-plan.md): a deeper look at the + `/ctx-plan` adversarial interview and the debated brief. +* [Tracking Work Across Sessions](task-management.md): the TASKS.md + epic anchors the plan projects into. +* [Persisting Decisions, Learnings, and Conventions](knowledge-capture.md): + where a blocking TBD gets recorded when the gate forces it open. +* [Skills Reference: /ctx-plan](../reference/skills.md#ctx-plan): + the debated-brief contract. +* [Skills Reference: /ctx-task-out](../reference/skills.md#ctx-task-out): + blocking-TBD and rolling-wave gates, the execution ledger. +* [Skills Reference: /ctx-implement](../reference/skills.md#ctx-implement): + ledger duties and step verification. diff --git a/specs/remove-experimental-spec-kit-chain.md b/specs/remove-experimental-spec-kit-chain.md new file mode 100644 index 000000000..a9182d963 --- /dev/null +++ b/specs/remove-experimental-spec-kit-chain.md @@ -0,0 +1,57 @@ +# Spec: remove the experimental spec-kit delegation chain + +**Status:** accepted (impl 2026-07-06) + +## Problem + +Three project-level skills under `.claude/skills/` — +`ctx-experimental-plan`, `ctx-experimental-spec`, and +`ctx-experimental-handoff` — were carried as an explicitly +**EXPERIMENTAL (discardable)** trio. Their own frontmatter and +lede state the contract: they are ctx-native ports of external +skills, kept as local project skills so the chain +`/ctx-experimental-plan → /ctx-experimental-spec → +/ctx-experimental-handoff` could be trialed, and *"if it earns its +keep, fold the good parts into the real skills; otherwise `rm -rf` +this directory."* + +The chain's sole reason for existing is to **bridge ctx to +spec-kit** (an external spec-driven-development framework): +`ctx-experimental-handoff` invokes spec-kit's `/speckit-specify`, +and `ctx-experimental-spec` deliberately writes a *loose* intent +spec to `.context/specs/intent-<slug>.md` as that bridge's input. +This project does not use spec-kit — no spec, skill, or Makefile +target references `speckit`/`spec-kit` (grep: zero hits outside the +experimental trio itself). With the bridge unused: + +- `ctx-experimental-plan` is a pure duplicate of the canonical + `/ctx-plan` (adversarial interview → debated brief under + `.context/briefs/<TS>-<slug>.md`). +- `ctx-experimental-spec` is a lesser variant of `/ctx-spec` whose + only distinguishing purpose (seeding spec-kit) does not apply. +- `ctx-experimental-handoff` has nothing to hand off to. + +The trio lives **only** in this repo's `.claude/skills/`; it is +**not** shipped in `internal/assets/`, so removal affects only this +repo's local dev surface and nothing downstream for ctx users. + +## Design + +`rm -rf` the three skill directories. No code change; no shipped +asset change. The skills' content is preserved in git history, so +removal loses no institutional memory (consistent with the Context +Preservation Invariant, which forbids deleting *history*, not +pruning a superseded live artifact). + +If the spec-kit seam is ever wanted, the canonical path is to +promote a real `/ctx-handoff` rather than resurrect the trial trio; +the debate and spec halves already exist as `/ctx-plan` and +`/ctx-spec`. + +## Scope + +- In: remove the three `.claude/skills/ctx-experimental-*` + directories; add this spec as the rationale. +- Out: no change to canonical `/ctx-plan`, `/ctx-spec`, + `/ctx-task-out`, or `/ctx-implement`; no change to shipped assets + under `internal/assets/`. From 65eaddec0369053b1f8863759c47904a7af66797 Mon Sep 17 00:00:00 2001 From: Jose Alekhinne <jose@ctx.ist> Date: Mon, 6 Jul 2026 19:53:56 -0700 Subject: [PATCH 4/8] build: vendor GitNexus Docker tooling; drop npx gitnexus npx gitnexus does not run on this box (tree-sitter@0.21.1 fails to build against Node 24). Vendor a thin Docker wrapper that uses the official arm64 image (Node 22 + prebuilt deps), staying off the host: hack/gitnexus-docker.sh (index / mcp / passthrough), gitnexus-index.sh, strip-gitnexus.sh, and make gitnexus-index / gitnexus-mcp / strip-gitnexus targets. Replace every `npx gitnexus` reference in docs and skills (GITNEXUS/CLAUDE/AGENTS, getting-started, multi-tool-setup, ctx-remember, ctx-architecture-enrich). Data-loss guard: GitNexus prunes registry entries whose paths it cannot stat in-container, so the wrapper mounts every registered repo on all registry-touching branches. Review fixes (shell): registry_mounts fails loud (python3 preflight; hard-fail on non-empty-but-unparseable registry on registration/passthrough branches) instead of fail-open; empty-array expansions are set -u safe; strip-gitnexus preserves content on unbalanced markers. Spec: specs/gitnexus-docker-fold.md Signed-off-by: Jose Alekhinne <jose@ctx.ist> --- AGENTS.md | 44 ----- CLAUDE.md | 44 ----- GITNEXUS.md | 12 +- Makefile | 14 +- docs/home/getting-started.md | 2 +- docs/recipes/multi-tool-setup.md | 4 +- hack/gitnexus-docker.sh | 153 ++++++++++++++++++ hack/gitnexus-index.sh | 83 ++++++++++ hack/strip-gitnexus.sh | 76 +++++++++ .../skills/ctx-architecture-enrich/SKILL.md | 8 +- .../claude/skills/ctx-remember/SKILL.md | 4 +- .../copilot-cli/skills/ctx-remember/SKILL.md | 4 +- specs/gitnexus-docker-fold.md | 60 +++++++ 13 files changed, 406 insertions(+), 102 deletions(-) create mode 100755 hack/gitnexus-docker.sh create mode 100755 hack/gitnexus-index.sh create mode 100755 hack/strip-gitnexus.sh create mode 100644 specs/gitnexus-docker-fold.md diff --git a/AGENTS.md b/AGENTS.md index 19ec4fb9b..d1f7335af 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,47 +1,3 @@ # Agent Instructions Read and follow [CLAUDE.md](CLAUDE.md). - -<!-- gitnexus:start --> -# GitNexus — Code Intelligence - -This project is indexed by GitNexus as **ctx** (27941 symbols, 110917 relationships, 202 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. - -> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. - -## Always Do - -- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. -- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. -- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. -- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. -- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`. - -## Never Do - -- NEVER edit a function, class, or method without first running `gitnexus_impact` on it. -- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. -- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph. -- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope. - -## Resources - -| Resource | Use for | -|----------|---------| -| `gitnexus://repo/ctx/context` | Codebase overview, check index freshness | -| `gitnexus://repo/ctx/clusters` | All functional areas | -| `gitnexus://repo/ctx/processes` | All execution flows | -| `gitnexus://repo/ctx/process/{name}` | Step-by-step execution trace | - -## CLI - -| Task | Read this skill file | -|------|---------------------| -| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | -| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | -| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | -| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | -| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | -| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | - -<!-- gitnexus:end --> diff --git a/CLAUDE.md b/CLAUDE.md index 360c17df2..30588e81b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -158,47 +158,3 @@ read it in full while you're here). Gemini Search is available via the `gemini-search` MCP server: prefer it over built-in web search for faster, more accurate results. - -<!-- gitnexus:start --> -# GitNexus — Code Intelligence - -This project is indexed by GitNexus as **ctx** (27941 symbols, 110917 relationships, 202 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. - -> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. - -## Always Do - -- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. -- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. -- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. -- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. -- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`. - -## Never Do - -- NEVER edit a function, class, or method without first running `gitnexus_impact` on it. -- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. -- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph. -- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope. - -## Resources - -| Resource | Use for | -|----------|---------| -| `gitnexus://repo/ctx/context` | Codebase overview, check index freshness | -| `gitnexus://repo/ctx/clusters` | All functional areas | -| `gitnexus://repo/ctx/processes` | All execution flows | -| `gitnexus://repo/ctx/process/{name}` | Step-by-step execution trace | - -## CLI - -| Task | Read this skill file | -|------|---------------------| -| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | -| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | -| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | -| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | -| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | -| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | - -<!-- gitnexus:end --> diff --git a/GITNEXUS.md b/GITNEXUS.md index 6adeaa310..9e95b14cf 100644 --- a/GITNEXUS.md +++ b/GITNEXUS.md @@ -3,7 +3,7 @@ This project is indexed by GitNexus as **ctx** (13443 symbols, 67145 relationships, 257 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. -> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. +> If any GitNexus tool warns the index is stale, run `gitnexus analyze` (or `make gitnexus-index` for the Docker runner) in terminal first. ## Always Do @@ -74,13 +74,19 @@ Before completing any code modification task, verify: After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it: ```bash -npx gitnexus analyze +gitnexus analyze +``` + +The most reliable runner is the Docker path — `make gitnexus-index` (or `hack/gitnexus-docker.sh`) bakes a compatible Node into the image, so the index rebuilds even when the host's Node can't build GitNexus's native tree-sitter addon, and your host stays clean: + +```bash +make gitnexus-index ``` If the index previously included embeddings, preserve them by adding `--embeddings`: ```bash -npx gitnexus analyze --embeddings +gitnexus analyze --embeddings ``` To check whether embeddings exist, inspect `.gitnexus/meta.json`: the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.** diff --git a/Makefile b/Makefile index ba0006906..6c04a4397 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ clean all release build-all help \ test-coverage smoke site site-feed site-serve site-serve-lan site-setup audit check plugin-reload \ journal journal-serve journal-serve-lan gpg-fix gpg-test register-mcp reinstall check-tools \ sync-version check-version-sync sync-why check-why sync-copilot-skills check-copilot-skills sync-steering check-steering gemini-search \ -gitnexus-version gitnexus-update install-ctxctl reinstall-ctxctl +gitnexus-version gitnexus-update gitnexus-index gitnexus-mcp strip-gitnexus install-ctxctl reinstall-ctxctl # Default binary name and output BINARY := ctx @@ -307,6 +307,18 @@ gitnexus-analyze: gitnexus analyze --embeddings --skill echo "GitNexus updated AGENTS.md and CLAUDE.md -- DO NOT COMMIT THEM!" +## gitnexus-index: Index this repo into GitNexus (Docker; no npm binary needed) +gitnexus-index: + @./hack/gitnexus-index.sh + +## gitnexus-mcp: Launch the GitNexus stdio MCP server (what `claude mcp add` registers) +gitnexus-mcp: + @./hack/gitnexus-docker.sh mcp + +## strip-gitnexus: Remove the GitNexus auto-injected block from AGENTS.md/CLAUDE.md +strip-gitnexus: + @./hack/strip-gitnexus.sh + ## gemini-search: Register gemini-search MCP server with Claude Code gemini-search: @./hack/register-gemini-search.sh diff --git a/docs/home/getting-started.md b/docs/home/getting-started.md index df35bc45f..81fb20aee 100644 --- a/docs/home/getting-started.md +++ b/docs/home/getting-started.md @@ -334,7 +334,7 @@ The investment is small and the benefits compound over sessions: ```bash # Index your project for GitNexus (run once, then after major changes) -npx gitnexus analyze +gitnexus analyze ``` (For non-GitNexus code-intelligence MCPs, apply that tool's own diff --git a/docs/recipes/multi-tool-setup.md b/docs/recipes/multi-tool-setup.md index bf6d48dbf..b633c12eb 100644 --- a/docs/recipes/multi-tool-setup.md +++ b/docs/recipes/multi-tool-setup.md @@ -37,7 +37,7 @@ ctx setup opencode --write && ctx init ctx setup cursor # or: aider, copilot, windsurf # ## Companion tools (highly recommended) ## -npx gitnexus analyze # code knowledge graph +gitnexus analyze # code knowledge graph # Add Gemini Search MCP server for grounded web search ``` @@ -437,7 +437,7 @@ analysis, and domain clustering. Used by skills like `/ctx-refactor` then index your project: ```bash -npx gitnexus analyze +gitnexus analyze ``` **Verification**: diff --git a/hack/gitnexus-docker.sh b/hack/gitnexus-docker.sh new file mode 100755 index 000000000..03a15d82a --- /dev/null +++ b/hack/gitnexus-docker.sh @@ -0,0 +1,153 @@ +#!/usr/bin/env bash + +# / ctx: https://ctx.ist +# ,'`./ do you remember? +# `.,'\ +# \ Copyright 2026-present Context contributors. +# SPDX-License-Identifier: Apache-2.0 +# +# gitnexus-docker.sh — run GitNexus via its arm64 Docker image. +# +# Vendored from the sibling os repo's scripts/ directory. +# +# Why Docker: GitNexus pins tree-sitter@0.21.1, a native addon that does NOT +# build against this box's Node 24 (V8 API removed in Node 24). The official +# image bakes Node 22 + prebuilt arm64 native deps, so it Just Works — and +# stays off the host (no Node downgrade, no extra host attack surface). +# +# Subcommands: +# index <repo> analyze + register a repo. The repo is mounted at its REAL +# host path so the registry's absolute paths stay consistent +# for the MCP server. Writes <repo>/.gitnexus (gitignored). +# mcp stdio MCP server for Claude Code. Auto-mounts every registered +# repo at its real path (read from the registry) + the data +# volume. This is the command you register with `claude mcp add`. +# <subcommand> passthrough to `gitnexus <subcommand>` against the current +# git repo + data volume (e.g. list, status, context, impact, +# query, remove, doctor). +# +# Network policy (embeddings need a one-time download): +# index → network ENABLED so the ONNX embedding model (huggingface.co) and +# the LadybugDB VECTOR extension (extension.ladybugdb.com) download +# ONCE, cached in the persistent `gitnexus-cache` volume (mounted at +# the container HOME) so it is genuinely one-time. +# mcp → --network none. The always-on server Claude Code spawns — the one +# that actually chews on repo content — never gets egress; it reads +# the cached model. That's the deliberate line: online only for the +# conscious index step against known hosts; air-gapped for the server. +# other → --network none (local reads). +# NOTE: `index` currently gets full egress (Docker bridge) for the run; scope it +# to huggingface.co + extension.ladybugdb.com once the box's egress allowlist +# exists. Runs as the image's non-root `node` user. +set -euo pipefail + +IMG="${GITNEXUS_IMAGE:-ghcr.io/abhigyanpatwari/gitnexus:latest}" +DATA=(-v "${GITNEXUS_VOLUME:-gitnexus-data}:/data/gitnexus") +# persists the embedding model + VECTOR extension across runs (container HOME) +CACHE=(-v "${GITNEXUS_CACHE_VOLUME:-gitnexus-cache}:/home/node") + +cmd="${1:-}"; [ "$#" -gt 0 ] && shift || true + +# Populate $mounts with a -v flag per registered repo path so those paths +# resolve inside the container. gitnexus PRUNES registry entries whose paths +# it cannot stat — observed live with both `index` and `list` — so every +# registry-touching invocation must see every registered repo, not just the +# current one ($1 = path to exclude, mounted separately). +registry_mounts() { + local exclude="${1:-}" strict="${2:-}" + mounts=() + + # Read registry.json out of the data volume (empty string when absent). + local registry + registry="$(docker run --rm --network none --entrypoint sh "${DATA[@]}" "$IMG" \ + -c 'cat /data/gitnexus/registry.json 2>/dev/null' || true)" + + # A fresh setup has no registry (or an empty list): legitimately no mounts. + case "${registry//[[:space:]]/}" in + ''|'[]') return 0 ;; + esac + + # The registry has entries, so we MUST parse it to mount those paths. If we + # cannot parse (python3 missing) or the parse yields nothing (corrupt JSON), + # returning empty mounts makes a registry-touching gitnexus run PRUNE every + # entry it can't stat in-container — the data loss this helper exists to stop. + if ! command -v python3 >/dev/null 2>&1; then + echo "gitnexus-docker.sh: python3 not found but registry.json has entries;" >&2 + echo " refusing to compute empty mounts (would risk pruning the registry)." >&2 + if [ "$strict" = strict ]; then exit 1; fi + return 0 + fi + + local paths + paths="$(printf '%s' "$registry" | python3 -c 'import sys,json +try: + for r in json.load(sys.stdin): + p=r.get("path") + if p: print(p) +except Exception: + pass')" + + if [ -z "$paths" ]; then + echo "gitnexus-docker.sh: registry.json has entries but none parsed to a" >&2 + echo " path (corrupt registry?) — not mounting anything." >&2 + if [ "$strict" = strict ]; then exit 1; fi + return 0 + fi + + local p + while IFS= read -r p; do + # if-form, not a bare && chain: a false filter on the LAST registry line + # would be the loop body's exit status and set -e would kill the script + if [ -n "$p" ] && [ "$p" != "$exclude" ] && [ -d "$p" ]; then + mounts+=(-v "$p:$p") + fi + done <<< "$paths" +} + +case "$cmd" in + index) + [ "${1:-}" ] || { echo "usage: $(basename "$0") index <repo-path>" >&2; exit 2; } + repo="$(cd "$1" && pwd)" # resolve to absolute host path + echo ">> analyze $repo (embeddings + skills, no CLAUDE.md/AGENTS.md injection; network ON for one-time model fetch)" + # analyze can exit non-zero on a late non-fatal warning (e.g. VECTOR/embeddings) + # even after writing a valid index — so don't let `set -e` skip the register. + docker run --rm -w "$repo" -v "$repo:$repo" "${DATA[@]}" "${CACHE[@]}" \ + -e GITNEXUS_LBUG_EXTENSION_INSTALL=auto \ + "$IMG" gitnexus analyze "$repo" --embeddings --skills --skip-agents-md \ + || echo " (analyze exited non-zero — will still register if the index was written)" + if [ ! -f "$repo/.gitnexus/meta.json" ]; then + echo ">> no .gitnexus/meta.json — analyze truly failed, not registering" >&2; exit 1 + fi + echo ">> register $repo into the global registry" + registry_mounts "$repo" strict + docker run --rm --network none -w "$repo" -v "$repo:$repo" ${mounts[@]+"${mounts[@]}"} \ + "${DATA[@]}" "${CACHE[@]}" "$IMG" gitnexus index "$repo" + echo ">> done. Remember to add '.gitnexus/' to $repo/.gitignore" + ;; + + mcp) + # Mount every registered repo at its real path so the registry's absolute + # paths resolve inside the MCP container. + registry_mounts + exec docker run -i --rm --network none ${mounts[@]+"${mounts[@]}"} "${DATA[@]}" "${CACHE[@]}" \ + -e GITNEXUS_LBUG_EXTENSION_INSTALL=never "$IMG" gitnexus mcp + ;; + + ""|-h|--help) + echo "usage: $(basename "$0") {index <repo> | mcp | <gitnexus-subcommand> ...}" >&2 + [ "$cmd" = "" ] && exit 2 || exit 0 + ;; + + *) + # passthrough (list/status/context/impact/query/remove/doctor/...). + # strict: `list` (and other registry-touching subcommands) prune + # entries they cannot stat, so refuse to run with empty mounts when + # the registry is non-empty but unparseable — same data-loss guard + # as the index branch. + repo="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" + registry_mounts "$repo" strict + exec docker run --rm --network none -w "$repo" -v "$repo:$repo" ${mounts[@]+"${mounts[@]}"} \ + "${DATA[@]}" "${CACHE[@]}" \ + -e GITNEXUS_LBUG_EXTENSION_INSTALL=never "$IMG" gitnexus "$cmd" "$@" + ;; +esac diff --git a/hack/gitnexus-index.sh b/hack/gitnexus-index.sh new file mode 100755 index 000000000..ecc36e0a1 --- /dev/null +++ b/hack/gitnexus-index.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +# / ctx: https://ctx.ist +# ,'`./ do you remember? +# `.,'\ +# \ Copyright 2026-present Context contributors. +# SPDX-License-Identifier: Apache-2.0 +# +# gitnexus-index.sh — index this repo into GitNexus via gitnexus-docker.sh, +# and (optionally) register the MCP server with Claude Code. +# +# Vendored from the sibling os repo's scripts/ directory. +# +# ./hack/gitnexus-index.sh # index this repo +# REGISTER_MCP=1 ./hack/gitnexus-index.sh # also `claude mcp add` the server +# ./hack/gitnexus-index.sh <repo> ... # index specific repos instead +# +# The index lands in <repo>/.gitnexus/ (gitignored). GitNexus's analyze needs +# network for the one-time embedding-model fetch; everything else is offline. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +WRAPPER="$SCRIPT_DIR/gitnexus-docker.sh" +REGISTER_MCP="${REGISTER_MCP:-0}" + +# Default target: the repo this script is vendored into. Override by passing +# one or more repo paths as arguments. +if [ "$#" -gt 0 ]; then + REPOS=("$@") +else + REPOS=("$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel)") +fi + +# ---- pre-flight ----------------------------------------------------------- +command -v docker >/dev/null 2>&1 || { echo "docker not found on PATH" >&2; exit 1; } +[ -x "$WRAPPER" ] || { echo "missing or non-executable: $WRAPPER" >&2; exit 1; } + +# ---- index each repo ------------------------------------------------------ +indexed=0 +for repo in "${REPOS[@]}"; do + echo + echo "===================================================================" + echo " $repo" + echo "===================================================================" + if [ ! -d "$repo" ]; then echo " SKIP — not a directory"; continue; fi + if ! git -C "$repo" rev-parse --git-dir >/dev/null 2>&1; then + echo " SKIP — not a git repo (GitNexus needs a git root)"; continue + fi + + # keep GitNexus's index out of the repo's git history + gi="$repo/.gitignore" + if [ -f "$gi" ] && grep -qxF '.gitnexus/' "$gi"; then + echo " '.gitnexus/' already gitignored" + else + printf '\n# GitNexus code-graph index (local, do not commit)\n.gitnexus/\n' >> "$gi" + echo " added '.gitnexus/' to $gi" + fi + + if "$WRAPPER" index "$repo"; then + indexed=$((indexed + 1)) + else + echo " !! indexing FAILED for $repo (continuing)" + fi +done + +echo +echo "=== registered repositories ===" +"$WRAPPER" list || true +echo +echo ">> indexed $indexed repo(s)." + +# ---- optional: register the MCP server with Claude Code ------------------- +MCP_CMD=(claude mcp add --scope user gitnexus -- "$WRAPPER" mcp) +echo +if [ "$REGISTER_MCP" = "1" ]; then + echo ">> registering the GitNexus MCP server with Claude Code" + "${MCP_CMD[@]}" + echo ">> done — RESTART Claude Code for it to connect." +else + echo "To wire the MCP server into Claude Code, re-run with REGISTER_MCP=1," + echo "or run this yourself (then restart Claude Code):" + printf ' '; printf '%q ' "${MCP_CMD[@]}"; echo +fi diff --git a/hack/strip-gitnexus.sh b/hack/strip-gitnexus.sh new file mode 100755 index 000000000..4c5a64d41 --- /dev/null +++ b/hack/strip-gitnexus.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +# / ctx: https://ctx.ist +# ,'`./ do you remember? +# `.,'\ +# \ Copyright 2026-present Context contributors. +# SPDX-License-Identifier: Apache-2.0 +# +# strip-gitnexus.sh — remove the GitNexus auto-injected block from the +# tracked agent-instruction files (AGENTS.md, CLAUDE.md). +# +# `gitnexus analyze` injects a marker-bounded block +# (<!-- gitnexus:start --> … <!-- gitnexus:end -->) into these files. +# That block is generated output, not source: its canonical home is +# GITNEXUS.md. This script deletes the block (markers included) so the +# tracked files stay clean — AGENTS.md as the CLAUDE.md redirect stub, +# CLAUDE.md ending at its Companion Tools / GITNEXUS.md pointer. +# +# Belt-and-suspenders to `gitnexus analyze --skip-agents-md`; run it +# after any `gitnexus analyze` that ran without that flag. +# +# ./hack/strip-gitnexus.sh +# +# Idempotent: a no-op when the markers are absent. Never touches +# GITNEXUS.md (the intended managed home for that content). +set -euo pipefail + +START='<!-- gitnexus:start -->' +END='<!-- gitnexus:end -->' + +# strip_one removes the marker block from a single file, then drops any +# blank lines left dangling at end-of-file so the file ends cleanly. +strip_one() { + local file="$1" + [ -f "$file" ] || return 0 + if ! grep -qF "$START" "$file"; then + return 0 # nothing to strip + fi + + local tmp + tmp="$(mktemp)" + awk -v s="$START" -v e="$END" ' + # Buffer the marked block instead of suppressing lines as we go, so an + # unbalanced start marker (no matching end) does not silently swallow the + # rest of the file: on a clean close we drop the buffer, at EOF we flush it. + index($0, s) { + skip = 1; buf[++n] = $0 + if (index($0, e)) { skip = 0; n = 0 } # same-line start+end: drop it + next + } + skip { + buf[++n] = $0 + if (index($0, e)) { skip = 0; n = 0 } # clean close: drop the block + next + } + { print } + END { + if (skip) { # start marker with no end marker + for (i = 1; i <= n; i++) print buf[i] # keep the block, do not drop tail + print "strip-gitnexus.sh: unbalanced gitnexus markers; kept block intact" \ + > "/dev/stderr" + } + } + ' "$file" | + awk ' + /^[[:space:]]*$/ { blanks++; next } + { while (blanks-- > 0) print ""; blanks = 0; print } + ' >"$tmp" + + mv "$tmp" "$file" + echo "stripped GitNexus block: $file" +} + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +strip_one "$repo_root/CLAUDE.md" +strip_one "$repo_root/AGENTS.md" diff --git a/internal/assets/claude/skills/ctx-architecture-enrich/SKILL.md b/internal/assets/claude/skills/ctx-architecture-enrich/SKILL.md index aae9dd552..184b6e520 100644 --- a/internal/assets/claude/skills/ctx-architecture-enrich/SKILL.md +++ b/internal/assets/claude/skills/ctx-architecture-enrich/SKILL.md @@ -31,7 +31,7 @@ to questions never asked. - After `/ctx-architecture` or `/ctx-architecture principal` has produced artifacts - After a code-intelligence MCP has indexed the project - (canonical: GitNexus via `npx gitnexus analyze --embeddings`; + (canonical: GitNexus via `gitnexus analyze --embeddings`; equivalents apply their own indexing step) and architecture artifacts already exist - When the user says "enrich the architecture", "run enrichment @@ -109,7 +109,8 @@ This skill requires a code-intelligence MCP (e.g., GitNexus, sourcegraph-cody, or equivalent). None is connected. If you have GitNexus, configure the MCP and run: - npx gitnexus analyze --embeddings + gitnexus analyze --embeddings + (or your Docker wrapper if the npm binary isn't viable) If you use a different code-intelligence MCP, configure it per its docs and re-run this skill. ``` @@ -127,7 +128,8 @@ For GitNexus, if the index is stale (commits after last index): GitNexus index is stale (last indexed: <date>, <N> commits since). Results would be unreliable. - Run `npx gitnexus analyze` to update, then re-run this skill. + Run `gitnexus analyze` (or your Docker wrapper if the npm + binary isn't viable) to update, then re-run this skill. ``` (For non-GitNexus code-intelligence MCPs, apply the same diff --git a/internal/assets/claude/skills/ctx-remember/SKILL.md b/internal/assets/claude/skills/ctx-remember/SKILL.md index 791ff3958..d0b439639 100644 --- a/internal/assets/claude/skills/ctx-remember/SKILL.md +++ b/internal/assets/claude/skills/ctx-remember/SKILL.md @@ -153,8 +153,8 @@ whatever you have connected. 2026-05-23 "MCP gateway not worth the coupling cost"). 4. For GitNexus specifically: if it responds but the current repo is not indexed or the index is stale, suggest: - > "GitNexus index is stale: run `npx gitnexus analyze` to - > rehydrate." + > "GitNexus index is stale: run `gitnexus analyze` (or your + > Docker wrapper if the npm binary isn't viable) to rehydrate." Present companion status as a one-line note after the readback only when there's something actionable (stale index). Absent diff --git a/internal/assets/integrations/copilot-cli/skills/ctx-remember/SKILL.md b/internal/assets/integrations/copilot-cli/skills/ctx-remember/SKILL.md index c7450a022..7eafddd02 100644 --- a/internal/assets/integrations/copilot-cli/skills/ctx-remember/SKILL.md +++ b/internal/assets/integrations/copilot-cli/skills/ctx-remember/SKILL.md @@ -152,8 +152,8 @@ whatever you have connected. 2026-05-23 "MCP gateway not worth the coupling cost"). 4. For GitNexus specifically: if it responds but the current repo is not indexed or the index is stale, suggest: - > "GitNexus index is stale: run `npx gitnexus analyze` to - > rehydrate." + > "GitNexus index is stale: run `gitnexus analyze` (or your + > Docker wrapper if the npm binary isn't viable) to rehydrate." Present companion status as a one-line note after the readback only when there's something actionable (stale index). Absent diff --git a/specs/gitnexus-docker-fold.md b/specs/gitnexus-docker-fold.md new file mode 100644 index 000000000..2c17f3e1d --- /dev/null +++ b/specs/gitnexus-docker-fold.md @@ -0,0 +1,60 @@ +# Spec: vendor GitNexus Docker tooling; drop `npx gitnexus` + +**Status:** accepted (impl 2026-07-05/06) + +## Problem + +GitNexus is the companion code-intelligence tool ctx recommends for +refactoring, impact analysis, and architecture enrichment. Two +operational facts made the previous `npx gitnexus ...` invocation +untenable on this box: + +1. **`npx gitnexus` does not run.** GitNexus pins + `tree-sitter@0.21.1`, a native addon that fails to build against + Node 24 (a removed V8 API). Every `npx gitnexus` call errors out, + so the docs and skills that told agents to run `npx gitnexus + analyze` pointed at a broken command. +2. **No reproducible, host-safe way to run it.** Downgrading the + host Node or hand-building native deps is invasive and per-machine. + +The official GitNexus arm64 Docker image bakes Node 22 plus prebuilt +native deps, so it Just Works and stays off the host (no Node +downgrade, no extra host attack surface). + +## Design + +Vendor a thin Docker wrapper and wire it into the Makefile and docs: + +- `hack/gitnexus-docker.sh` — `index <repo>` (analyze + register at + the repo's real host path), `mcp` (air-gapped stdio MCP server that + auto-mounts every registered repo), and passthrough to arbitrary + `gitnexus <subcommand>`. Network is enabled only for the one-time + `index` model fetch; the server and passthrough run `--network none`. +- `hack/gitnexus-index.sh` — convenience wrapper to index the current + repo. +- `hack/strip-gitnexus.sh` — remove GitNexus-injected marker blocks + from tracked files (keeps `.gitnexus/` out of the tree). +- `make gitnexus-index` / `make gitnexus-mcp` / `make strip-gitnexus` + targets. +- Docs and skills updated to call `gitnexus ...` (via the wrapper) and + the Docker flow, replacing every `npx gitnexus` reference + (`GITNEXUS.md`, `CLAUDE.md`, `AGENTS.md`, `docs/home/getting-started.md`, + `docs/recipes/multi-tool-setup.md`, and the `ctx-remember` / + `ctx-architecture-enrich` skills that mention GitNexus). + +## Data-loss guard (registry pruning) + +GitNexus **prunes registry entries whose repo paths it cannot stat +in-container** — observed live with both `index` and `list`. The +wrapper therefore mounts *every* registered repo at its real path on +all registry-touching branches (a `registry_mounts` helper reads +`registry.json`). The helper fails loud rather than fail open: on a +registry-touching branch, a missing `python3` or an unparseable +non-empty registry aborts the run instead of silently mounting an +empty set (which would let GitNexus prune every entry). A legitimately +empty registry (fresh setup) proceeds with no mounts. + +See LEARNINGS: "GitNexus prunes registry entries whose repo paths +don't resolve in-container." The sibling `os`/`orchestrator` copies of +these scripts still carry the older fail-open shape and must be +backported before use. From ed8079a3adbb41eec1dcc4cf29e83a8e19e0f30c Mon Sep 17 00:00:00 2001 From: Jose Alekhinne <jose@ctx.ist> Date: Mon, 6 Jul 2026 19:54:13 -0700 Subject: [PATCH 5/8] docs: repair site nav; fix connect->connection references Add the batch of orphaned recipe and CLI pages to zensical.toml's nav (KB recipes, dream, architecture-deep-dive, cli/kb|handover|dream|event| message|bootstrap, runbooks) so they are reachable from the sidebar. Delete the stale docs/cli/connect.md (superseded by connection.md) and fix the leftover `ctx connect` references: the broken command in the hub-deployment runbook becomes `ctx connection register`, and stale `ctx connect` display labels across hub/CLI pages become `ctx connection` (the command was renamed; no `connect` alias exists). Guard: internal/compliance/docs_nav_test.go asserts every non-blog docs page is in the nav AND every nav Markdown entry resolves to a real file (so a deleted-but-still-linked page fails tests), with a sentinel that prevents a vacuous pass. Also fixes a pre-existing broken doc icon (lucide/message-square-cog -> message-square-text) that blocked any site build. Spec: specs/docs-link-integrity.md Signed-off-by: Jose Alekhinne <jose@ctx.ist> --- docs/cli/connect.md | 142 --------------------- docs/cli/connection.md | 2 +- docs/cli/hub.md | 4 +- docs/cli/init-status.md | 2 +- docs/cli/message.md | 2 +- docs/home/hub.md | 2 +- docs/operations/index.md | 2 +- docs/operations/runbooks/hub-deployment.md | 2 +- docs/recipes/hub-getting-started.md | 2 +- docs/recipes/hub-overview.md | 2 +- docs/recipes/hub-personal.md | 2 +- internal/compliance/docs_nav_test.go | 125 ++++++++++++++++++ zensical.toml | 20 +++ 13 files changed, 156 insertions(+), 153 deletions(-) delete mode 100644 docs/cli/connect.md create mode 100644 internal/compliance/docs_nav_test.go diff --git a/docs/cli/connect.md b/docs/cli/connect.md deleted file mode 100644 index 52d344f08..000000000 --- a/docs/cli/connect.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -# / ctx: https://ctx.ist -# ,'`./ do you remember? -# `.,'\ -# \ Copyright 2026-present Context contributors. -# SPDX-License-Identifier: Apache-2.0 - -title: Connect -icon: lucide/link ---- - -![ctx](../images/ctx-banner.png) - -## `ctx connect` - -Connect a project to a `ctx` Hub for cross-project -knowledge sharing. Projects publish decisions, learnings, -conventions, and tasks to a hub; other subscribed projects receive -them alongside local context. - -!!! tip "New to the Hub?" - Start with the - [`ctx` Hub overview](../recipes/hub-overview.md) for - the mental model (what the hub is, who it's for, what it is - **not**), then walk through - [Getting Started](../recipes/hub-getting-started.md). - This page is a command reference, not an introduction. - -**The unit of identity is a project, not a user.** Registering a -directory with `ctx connect register` binds a per-project client -token in `.context/.connect.enc`. Two developers on the same -project either share that file over a trusted channel, or each -register under a different project name. - -**Only structured entries flow through the hub**: `decision`, -`learning`, `convention`, `task`. Session journals, scratchpad -contents, and other local state stay on the machine that created -them. - -### `ctx connect register` - -One-time registration with a hub. Requires the hub address and -admin token (printed by `ctx hub start` on first run). - -```bash -ctx connect register localhost:9900 --token ctx_adm_7f3a... -``` - -On success, stores an encrypted connection config in -`.context/.connect.enc` for future RPCs. - -### `ctx connect subscribe` - -Set which entry types to receive from the hub. Only matching types -are returned by sync and listen. - -```bash -ctx connect subscribe decision learning -ctx connect subscribe decision learning convention -``` - -### `ctx connect sync` - -Pull matching entries from the hub and write them to -`.context/hub/` as Markdown files with origin tags and date -headers. Tracks last-seen sequence for incremental sync. - -```bash -ctx connect sync -``` - -### `ctx connect publish` - -Push entries to the hub. Specify type and content as arguments. - -```bash -ctx connect publish decision "Use UTC timestamps everywhere" -``` - -### `ctx connect listen` - -Stream new entries from the hub in real-time. Writes to -`.context/hub/` as entries arrive. Press Ctrl-C to stop. - -```bash -ctx connect listen -``` - -### `ctx connect status` - -Show hub connection state and entry statistics. - -```bash -ctx connect status -``` - -## Automatic Sharing - -Use `--share` on `ctx add` to write locally AND publish to the hub: - -```bash -ctx decision add "Use UTC" --share \ - --context "Need consistency" \ - --rationale "Avoid timezone bugs" \ - --consequence "UI does conversion" -``` - -If the hub is unreachable, the local write succeeds and a warning -is printed. The `--share` flag is best-effort; it never blocks -local context updates. - -## Auto-Sync - -Once registered, the `check-hub-sync` hook automatically syncs -new entries from the hub at the start of each session (daily -throttled). No manual `ctx connect sync` needed. - -## Shared Files - -Entries from the hub are stored in `.context/hub/`: - -``` -.context/hub/ - decisions.md # Shared decisions with origin tags - learnings.md # Shared learnings - conventions.md # Shared conventions - .sync-state.json # Last-seen sequence tracker -``` - -These files are read-only (managed by sync/listen) and never -mixed with local context files. - -## Agent Integration - -Include shared knowledge in agent context packets: - -```bash -ctx agent --include-hub -``` - -Shared entries are included as Tier 8 in the budget-aware -assembly, scored by recency and type relevance. diff --git a/docs/cli/connection.md b/docs/cli/connection.md index 59fe08b15..ab861967b 100644 --- a/docs/cli/connection.md +++ b/docs/cli/connection.md @@ -11,7 +11,7 @@ icon: lucide/link ![ctx](../images/ctx-banner.png) -## `ctx connect` +## `ctx connection` Connect a project to a `ctx` Hub for cross-project knowledge sharing. Projects publish decisions, learnings, diff --git a/docs/cli/hub.md b/docs/cli/hub.md index 5f071347c..57ac34509 100644 --- a/docs/cli/hub.md +++ b/docs/cli/hub.md @@ -23,7 +23,7 @@ leadership before maintenance. You only need `ctx hub` if you are **running** a hub server or cluster. For client-side operations (register, subscribe, sync, publish, listen), see - [`ctx connect`](connection.md). For the mental model behind + [`ctx connection`](connection.md). For the mental model behind the hub as a whole, read the [`ctx` Hub overview](../recipes/hub-overview.md). @@ -148,7 +148,7 @@ ctx hub stepdown ### See Also -- [`ctx connect`](connection.md): client-side commands +- [`ctx connection`](connection.md): client-side commands (register, subscribe, sync, publish, listen) - [`ctx` Hub overview](../recipes/hub-overview.md): mental model and user stories diff --git a/docs/cli/init-status.md b/docs/cli/init-status.md index 53fc2f8f9..8595d3bb1 100644 --- a/docs/cli/init-status.md +++ b/docs/cli/init-status.md @@ -147,7 +147,7 @@ in priority tiers: against the active prompt 7. **Skill**: named skill content (from `--skill`) 8. **Hub**: entries from `.context/hub/` (with `--include-hub`, - see [`ctx connect`](connection.md)) + see [`ctx connection`](connection.md)) Decisions and learnings are ranked by a combined score (how recent + how relevant to your current tasks). High-scoring entries are included with diff --git a/docs/cli/message.md b/docs/cli/message.md index afc09c7dc..941a67d8e 100644 --- a/docs/cli/message.md +++ b/docs/cli/message.md @@ -6,7 +6,7 @@ # SPDX-License-Identifier: Apache-2.0 title: Message -icon: lucide/message-square-cog +icon: lucide/message-square-text --- ![ctx](../images/ctx-banner.png) diff --git a/docs/home/hub.md b/docs/home/hub.md index 92a80368d..583feb2d6 100644 --- a/docs/home/hub.md +++ b/docs/home/hub.md @@ -89,5 +89,5 @@ everyone holding a client token is friendly. Don't stand up and [Hub Failure Modes](../operations/hub-failure-modes.md). - **Security posture:** [Hub Security Model](../security/hub.md). - **Command reference:** [`ctx serve`](../cli/serve.md), - [`ctx connect`](../cli/connection.md), + [`ctx connection`](../cli/connection.md), [`ctx hub`](../cli/hub.md). diff --git a/docs/operations/index.md b/docs/operations/index.md index c0316da1b..64e24d355 100644 --- a/docs/operations/index.md +++ b/docs/operations/index.md @@ -42,7 +42,7 @@ with `ctx` providing persistent memory between iterations. Operator guides for running a `ctx` Hub, the gRPC server that fans out structured entries across projects. If you're a client connecting to a Hub someone else runs, see -[`ctx connect`](../cli/connection.md) and the +[`ctx connection`](../cli/connection.md) and the [Hub recipes](../recipes/hub-overview.md) instead. ### [Hub Operations](hub.md) diff --git a/docs/operations/runbooks/hub-deployment.md b/docs/operations/runbooks/hub-deployment.md index 0e84fc962..39bcec79e 100644 --- a/docs/operations/runbooks/hub-deployment.md +++ b/docs/operations/runbooks/hub-deployment.md @@ -139,7 +139,7 @@ When adding a new team member to an existing hub: - [ ] Generate a client token (`ctx hub register --name "<name>"`) - [ ] Share the token and hub address securely -- [ ] Have them run `ctx connect <hub-address> --token <token>` +- [ ] Have them run `ctx connection register <hub-address> --token <token>` - [ ] Verify with `ctx connection status` - [ ] Point them to the [Hub Getting Started](../../recipes/hub-getting-started.md) recipe diff --git a/docs/recipes/hub-getting-started.md b/docs/recipes/hub-getting-started.md index a2d2dad35..bcc2ed203 100644 --- a/docs/recipes/hub-getting-started.md +++ b/docs/recipes/hub-getting-started.md @@ -171,5 +171,5 @@ call `ctx connection sync` manually. backup, log rotation, JSONL store layout. - **[Hub security model](../security/hub.md)**: token lifecycle, encryption at rest, threat model. -- **[`ctx connect` reference](../cli/connection.md)** and +- **[`ctx connection` reference](../cli/connection.md)** and **[`ctx hub start` reference](../cli/serve.md)**. diff --git a/docs/recipes/hub-overview.md b/docs/recipes/hub-overview.md index 2688571d6..e7c96cb5a 100644 --- a/docs/recipes/hub-overview.md +++ b/docs/recipes/hub-overview.md @@ -205,4 +205,4 @@ the end of the pipeline. | Operating a hub in production | [Operations](../operations/hub.md) | | Assessing the security posture | [Security model](../security/hub.md) | | Debugging a hub in trouble | [Failure modes](../operations/hub-failure-modes.md) | -| Just reading the commands | [`ctx connect`](../cli/connection.md), [`ctx serve`](../cli/serve.md), [`ctx hub`](../cli/hub.md) | +| Just reading the commands | [`ctx connection`](../cli/connection.md), [`ctx serve`](../cli/serve.md), [`ctx hub`](../cli/hub.md) | diff --git a/docs/recipes/hub-personal.md b/docs/recipes/hub-personal.md index 49512faf7..eda9b27ef 100644 --- a/docs/recipes/hub-personal.md +++ b/docs/recipes/hub-personal.md @@ -234,7 +234,7 @@ rotation, failure recovery, and HA, see and when not to. - [Team knowledge bus](hub-team.md): the multi-human companion recipe. -- [`ctx connect`](../cli/connection.md): the client-side +- [`ctx connection`](../cli/connection.md): the client-side commands used above (`subscribe`, `publish`, `sync`, `listen`, `status`). - [`ctx add`](../cli/context.md): the `--share` flag diff --git a/internal/compliance/docs_nav_test.go b/internal/compliance/docs_nav_test.go new file mode 100644 index 000000000..1a3898ed9 --- /dev/null +++ b/internal/compliance/docs_nav_test.go @@ -0,0 +1,125 @@ +// / Context: https://ctx.ist +// ,'`./ do you remember? +// `.,'\ +// \ Copyright 2026-present Context contributors. +// SPDX-License-Identifier: Apache-2.0 + +package compliance + +import ( + "io/fs" + "os" + "path/filepath" + "regexp" + "strings" + "testing" +) + +// navMdEntry matches a quoted, docs-relative Markdown path in +// zensical.toml's nav, e.g. "recipes/spec-driven-development.md". +var navMdEntry = regexp.MustCompile(`"([^"]+\.md)"`) + +// TestEveryDocPageIsReachableInNav asserts that every Markdown page +// under docs/ is referenced in zensical.toml's nav, so it is reachable +// from the site sidebar. +// +// This is a No-Broken-Windows guard (CONSTITUTION.md): a docs page that +// exists but is absent from the nav is silently unreachable — a user +// only finds it by guessing the URL. The gap is easy to introduce +// (add a recipe or CLI page, forget the nav entry) and invisible until +// someone audits by hand, which is how a batch of orphaned recipe and +// CLI pages accumulated. This test surfaces the next one in `go test`. +// +// Two directories are deliberately excluded: +// - blog/: posts are rendered by the blog plugin from blog/index.md, +// not listed individually in the manual nav. +// - any includes/ dir: partials/snippets embedded into other pages, +// never standalone nav entries. +func TestEveryDocPageIsReachableInNav(t *testing.T) { + root := projectRoot(t) + + navBytes, err := os.ReadFile(filepath.Join(root, "zensical.toml")) + if err != nil { + t.Fatalf("read zensical.toml: %v", err) + } + nav := string(navBytes) + + docsDir := filepath.Join(root, "docs") + var orphans []string + checked := 0 + + walkErr := filepath.WalkDir(docsDir, + func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() || filepath.Ext(path) != ".md" { + return nil + } + + rel, relErr := filepath.Rel(docsDir, path) + if relErr != nil { + return relErr + } + rel = filepath.ToSlash(rel) + + // Excluded by design (see doc comment). + if strings.HasPrefix(rel, "blog/") { + return nil + } + if strings.HasPrefix(rel, "includes/") || + strings.Contains(rel, "/includes/") { + return nil + } + + checked++ + // Nav entries are quoted, docs-relative paths, e.g. + // "recipes/spec-driven-development.md". + if !strings.Contains(nav, `"`+rel+`"`) { + orphans = append(orphans, rel) + } + return nil + }) + if walkErr != nil { + t.Fatalf("walk docs/: %v", walkErr) + } + + // Sentinel: a wrong docsDir or an empty tree would make the walk a + // no-op and the test pass vacuously. Require that it actually saw + // pages, so the guard cannot silently stop guarding. + if checked == 0 { + t.Fatalf("no docs pages found under %s — test is not guarding anything", + docsDir) + } + + if len(orphans) > 0 { + t.Errorf( + "%d docs page(s) are absent from zensical.toml's nav and "+ + "thus unreachable from the site sidebar — add each under "+ + "the right nav group (or exclude it deliberately in this "+ + "test):\n %s", + len(orphans), strings.Join(orphans, "\n "), + ) + } + + // Reverse guard: every Markdown path named in the nav must resolve to + // a real file. This catches the opposite drift — a page deleted or + // renamed while its nav entry lingers, leaving a dead sidebar link. + var deadLinks []string + // Resolve through a rooted fs.FS: it rejects paths that escape docsDir + // (no ".." traversal) by construction, so a stray nav entry cannot + // stat an arbitrary file — and an invalid entry reads as a dead link. + docsFS := os.DirFS(docsDir) + for _, m := range navMdEntry.FindAllStringSubmatch(nav, -1) { + if _, statErr := fs.Stat(docsFS, m[1]); statErr != nil { + deadLinks = append(deadLinks, m[1]) + } + } + if len(deadLinks) > 0 { + t.Errorf( + "%d nav entr(y/ies) in zensical.toml point at a docs page that "+ + "does not exist — remove or fix each:\n %s", + len(deadLinks), strings.Join(deadLinks, "\n "), + ) + } +} diff --git a/zensical.toml b/zensical.toml index 592ef953a..a95aa4e96 100644 --- a/zensical.toml +++ b/zensical.toml @@ -71,6 +71,7 @@ nav = [ "recipes/session-lifecycle.md", "recipes/session-ceremonies.md", "recipes/session-archaeology.md", + "recipes/session-changes.md", "recipes/session-reminders.md", "recipes/session-pause.md", ]}, @@ -79,18 +80,27 @@ nav = [ "recipes/task-management.md", "recipes/import-plans.md", "recipes/design-before-coding.md", + "recipes/scrutinizing-a-plan.md", + "recipes/spec-driven-development.md", "recipes/scratchpad-with-claude.md", "recipes/scratchpad-sync.md", "recipes/memory-bridge.md", ]}, + { "Knowledge Base" = [ + "recipes/build-a-knowledge-base.md", + "recipes/typical-kb-session.md", + "recipes/recover-aborted-session.md", + ]}, { "Hooks and Notifications" = [ "recipes/hook-output-patterns.md", + "recipes/hook-sequence-diagrams.md", "recipes/customizing-hook-messages.md", "recipes/webhook-notifications.md", "recipes/system-hooks-audit.md", ]}, { "Maintenance" = [ "recipes/context-health.md", + "recipes/state-maintenance.md", "recipes/configuration-profiles.md", "recipes/troubleshooting.md", "recipes/claude-code-permissions.md", @@ -100,8 +110,10 @@ nav = [ { "Agents and Automation" = [ "recipes/building-skills.md", "recipes/autonomous-loops.md", + "recipes/run-the-dream.md", "recipes/when-to-use-agent-teams.md", "recipes/parallel-worktrees.md", + "recipes/architecture-deep-dive.md", "recipes/steering.md", "recipes/triggers.md", ]}, @@ -125,10 +137,13 @@ nav = [ "cli/context.md", "cli/change.md", "cli/memory.md", + "cli/kb.md", "cli/watch.md", ]}, { "Sessions" = [ "cli/journal.md", + "cli/handover.md", + "cli/dream.md", "cli/pad.md", "cli/remind.md", "cli/pause.md", @@ -157,7 +172,10 @@ nav = [ "cli/config.md", "cli/prune.md", "cli/hook.md", + "cli/event.md", + "cli/message.md", "cli/system.md", + "cli/bootstrap.md", ]}, { "Shell" = [ "cli/completion.md", @@ -171,6 +189,7 @@ nav = [ "reference/comparison.md", "reference/session-journal.md", "reference/scratchpad.md", + "reference/dream-executor-contract.md", "reference/versions.md", ]}, { "Operations" = [ @@ -185,6 +204,7 @@ nav = [ "operations/runbooks/release-checklist.md", "operations/runbooks/plugin-release.md", "operations/runbooks/breaking-migration.md", + "operations/runbooks/backup-strategy.md", "operations/runbooks/hub-deployment.md", "operations/runbooks/new-contributor.md", "operations/runbooks/codebase-audit.md", From 41b49434406ce12a55b23b7952e41dbde30c2ebf Mon Sep 17 00:00:00 2001 From: Jose Alekhinne <jose@ctx.ist> Date: Mon, 6 Jul 2026 19:54:35 -0700 Subject: [PATCH 6/8] chore: rebuild docs site; persist review learnings Regenerate the tracked site/ (zensical build + ctx site feed) so it reflects the cumulative docs changes in this branch: the new spec-driven-development recipe renders, the deleted connect page is pruned, the repaired nav and the message-page icon fix land. site/ is tracked with no CI build step, so it is staged with the docs it renders. Persist the review outcome to .context: mark the adversarial-review task done and record the session's learnings (site rewrites entry bodies -> refresh render_hash; zensical's frozen lucide bundle; PATH ctx is a stale install; assets<-rc import cycle). Spec: specs/meta/chores.md Signed-off-by: Jose Alekhinne <jose@ctx.ist> --- .context/LEARNINGS.md | 107 + .context/TASKS.md | 342 +- site/404.html | 14 +- .../assets/javascripts/bundle.0df4f2d0.min.js | 14 + .../assets/javascripts/bundle.ee611ef6.min.js | 3 - ...82a87433.min.css => main.6cf5c66f.min.css} | 2 +- .../stylesheets/modern/main.19d3147f.min.css | 1 - .../stylesheets/modern/main.5e19f6ca.min.css | 1 + .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../blog/2026-02-14-irc-as-context/index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- site/blog/2026-02-15-why-zensical/index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- site/blog/2026-02-17-the-3-1-ratio/index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../2026-02-28-the-last-question/index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- .../index.html | 14 +- site/blog/index.html | 14 +- site/cli/bootstrap/index.html | 1127 ++++++- site/cli/change/index.html | 57 +- site/cli/completion/index.html | 32 +- site/cli/config/index.html | 119 +- site/cli/connect/index.html | 1463 -------- site/cli/connection/index.html | 42 +- site/cli/context/index.html | 57 +- site/cli/doctor/index.html | 26 +- site/cli/dream/index.html | 1139 ++++++- site/cli/event/index.html | 1127 ++++++- site/cli/guide/index.html | 26 +- site/cli/handover/index.html | 1144 ++++++- site/cli/hook/index.html | 125 +- site/cli/hub/index.html | 30 +- site/cli/index.html | 132 +- site/cli/init-status/index.html | 28 +- site/cli/journal/index.html | 156 +- site/cli/kb/index.html | 1146 ++++++- site/cli/loop/index.html | 26 +- site/cli/mcp/index.html | 26 +- site/cli/memory/index.html | 63 +- site/cli/message/index.html | 1199 ++++++- site/cli/notify/index.html | 26 +- site/cli/pad/index.html | 94 +- site/cli/pause/index.html | 88 +- site/cli/prune/index.html | 119 +- site/cli/remind/index.html | 88 +- site/cli/resume/index.html | 88 +- site/cli/serve/index.html | 26 +- site/cli/setup/index.html | 26 +- site/cli/site/index.html | 26 +- site/cli/skill/index.html | 26 +- site/cli/steering/index.html | 26 +- site/cli/sysinfo/index.html | 26 +- site/cli/system/index.html | 131 +- site/cli/trace/index.html | 26 +- site/cli/trigger/index.html | 26 +- site/cli/usage/index.html | 26 +- site/cli/watch/index.html | 63 +- site/cli/why/index.html | 26 +- site/home/about/index.html | 14 +- site/home/common-workflows/index.html | 33 +- site/home/community/index.html | 14 +- site/home/configuration/index.html | 127 +- site/home/context-files/index.html | 14 +- site/home/contributing/index.html | 14 +- site/home/faq/index.html | 14 +- site/home/first-session/index.html | 14 +- site/home/getting-started/index.html | 16 +- site/home/hub/index.html | 16 +- site/home/index.html | 14 +- site/home/is-ctx-right/index.html | 14 +- site/home/joining-a-project/index.html | 14 +- site/home/keeping-ai-honest/index.html | 14 +- site/home/opencode/index.html | 14 +- site/home/prompting-guide/index.html | 14 +- site/home/repeated-mistakes/index.html | 14 +- site/home/steering/index.html | 14 +- site/home/triggers/index.html | 14 +- site/home/vscode/index.html | 14 +- site/index.html | 14 +- site/operations/autonomous-loop/index.html | 16 +- site/operations/hub-failure-modes/index.html | 16 +- site/operations/hub/index.html | 16 +- site/operations/index.html | 18 +- site/operations/integrations/index.html | 16 +- site/operations/migration/index.html | 16 +- site/operations/release/index.html | 16 +- .../architecture-exploration/index.html | 45 +- .../runbooks/audit-channel/index.html | 45 +- .../runbooks/backup-strategy/index.html | 1017 +++++- .../runbooks/breaking-migration/index.html | 51 +- .../runbooks/codebase-audit/index.html | 45 +- .../runbooks/docs-semantic-audit/index.html | 45 +- .../runbooks/hub-deployment/index.html | 53 +- .../runbooks/new-contributor/index.html | 45 +- .../runbooks/plugin-release/index.html | 45 +- .../runbooks/release-checklist/index.html | 45 +- .../runbooks/sanitize-permissions/index.html | 45 +- site/operations/upgrading/index.html | 16 +- .../recipes/architecture-deep-dive/index.html | 1316 +++++++- site/recipes/autonomous-loops/index.html | 163 +- .../recipes/build-a-knowledge-base/index.html | 1233 ++++++- site/recipes/building-skills/index.html | 157 +- .../claude-code-permissions/index.html | 128 +- .../recipes/configuration-profiles/index.html | 134 +- site/recipes/context-health/index.html | 134 +- .../customizing-hook-messages/index.html | 132 +- site/recipes/design-before-coding/index.html | 158 +- site/recipes/guide-your-agent/index.html | 89 +- site/recipes/hook-output-patterns/index.html | 138 +- .../recipes/hook-sequence-diagrams/index.html | 1365 +++++++- site/recipes/hub-cluster/index.html | 97 +- site/recipes/hub-getting-started/index.html | 99 +- site/recipes/hub-multi-machine/index.html | 97 +- site/recipes/hub-overview/index.html | 99 +- site/recipes/hub-personal/index.html | 99 +- site/recipes/hub-team/index.html | 97 +- site/recipes/import-plans/index.html | 149 +- site/recipes/index.html | 111 +- site/recipes/knowledge-capture/index.html | 149 +- site/recipes/memory-bridge/index.html | 155 +- site/recipes/multi-tool-setup/index.html | 93 +- site/recipes/multilingual-sessions/index.html | 89 +- site/recipes/parallel-worktrees/index.html | 163 +- site/recipes/permission-snapshots/index.html | 128 +- site/recipes/publishing/index.html | 144 +- .../recover-aborted-session/index.html | 1158 ++++++- site/recipes/run-the-dream/index.html | 1281 ++++++- site/recipes/scratchpad-sync/index.html | 149 +- .../recipes/scratchpad-with-claude/index.html | 155 +- site/recipes/scrutinizing-a-plan/index.html | 1266 ++++++- site/recipes/session-archaeology/index.html | 124 +- site/recipes/session-ceremonies/index.html | 118 +- site/recipes/session-changes/index.html | 1329 +++++++- site/recipes/session-lifecycle/index.html | 118 +- site/recipes/session-pause/index.html | 118 +- site/recipes/session-reminders/index.html | 124 +- .../spec-driven-development/index.html | 3000 +++++++++++++++++ site/recipes/state-maintenance/index.html | 1415 +++++++- site/recipes/steering/index.html | 163 +- site/recipes/system-hooks-audit/index.html | 126 +- site/recipes/task-management/index.html | 149 +- site/recipes/triggers/index.html | 157 +- site/recipes/troubleshooting/index.html | 128 +- site/recipes/typical-kb-session/index.html | 1204 ++++++- site/recipes/webhook-notifications/index.html | 126 +- .../when-to-use-agent-teams/index.html | 163 +- site/reference/audit-conventions/index.html | 43 +- site/reference/comparison/index.html | 43 +- site/reference/design-invariants/index.html | 43 +- .../dream-executor-contract/index.html | 485 ++- site/reference/index.html | 43 +- site/reference/scratchpad/index.html | 49 +- site/reference/session-journal/index.html | 65 +- site/reference/skills/index.html | 43 +- site/reference/versions/index.html | 49 +- site/search.json | 2 +- site/security/agent-security/index.html | 14 +- site/security/design/index.html | 14 +- site/security/hub/index.html | 14 +- site/security/index.html | 14 +- site/security/reporting/index.html | 14 +- site/sitemap.xml | 54 + site/thesis/index.html | 14 +- 183 files changed, 29616 insertions(+), 4066 deletions(-) create mode 100644 site/assets/javascripts/bundle.0df4f2d0.min.js delete mode 100644 site/assets/javascripts/bundle.ee611ef6.min.js rename site/assets/stylesheets/classic/{main.82a87433.min.css => main.6cf5c66f.min.css} (55%) delete mode 100644 site/assets/stylesheets/modern/main.19d3147f.min.css create mode 100644 site/assets/stylesheets/modern/main.5e19f6ca.min.css delete mode 100644 site/cli/connect/index.html create mode 100644 site/recipes/spec-driven-development/index.html diff --git a/.context/LEARNINGS.md b/.context/LEARNINGS.md index 18d2602af..5ef194afd 100644 --- a/.context/LEARNINGS.md +++ b/.context/LEARNINGS.md @@ -17,6 +17,9 @@ DO NOT UPDATE FOR: <!-- INDEX:START --> | Date | Learning | |----|--------| +| 2026-07-04 | Probing whether a ctx subcommand exists needs bare invocation, not --help | +| 2026-07-04 | GitNexus prunes registry entries whose repo paths don't resolve in-container | +| 2026-07-04 | Compliance tests are the style guide for new commands | | 2026-07-04 | Typed JSON round-trips silently drop user-owned keys | | 2026-07-03 | New Claude model families silently fall to the 200k default in ModelContextWindow | | 2026-06-07 | Pin an on-disk contract before splitting work across parallel agents | @@ -109,6 +112,36 @@ DO NOT UPDATE FOR: --- +## [2026-07-04-212434] Probing whether a ctx subcommand exists needs bare invocation, not --help + +**Context**: During the PR #128 review I checked ctx command existence with 'ctx <cmd> --help' and got false positives — cobra short-circuits --help to exit 0 even for an unknown subcommand, so 'ctx system stats --help' appeared to succeed for a command that does not exist. Separately, probing with a real mutating verb ('ctx task complete 3') actually completed a live task in TASKS.md, which had to be reverted. + +**Lesson**: To detect CLI command drift, invoke the BARE subcommand and check the real exit code (unknown => exit 1); --help lies because it is a persistent flag cobra handles before dispatch. Never probe with a mutating verb against the live project — ctx subcommands write to .context/. Also: 'ctx system <unknown>' emits the 'relay VERBATIM' version-skew NudgeBox and exits 1, so a wrapper that treats non-empty stdout as success will render that notice as a normal result. + +**Application**: When auditing whether an editor/wrapper's ctx invocations are valid, probe each bare form for its exit code (against a throwaway repo, or use read-only forms only); treat any wrapper whose 'non-empty output => success' logic ignores exit codes as buggy. + +--- + +## [2026-07-04-162854] GitNexus prunes registry entries whose repo paths don't resolve in-container + +**Context**: Folding the Docker gitnexus wrapper into ctx: indexing ctx silently dropped os from the global registry, and a plain 'gitnexus list' passthrough dropped it again after it was restored. Both 'gitnexus index' and 'gitnexus list' rewrite registry.json minus any entry whose path they cannot stat — and inside a container an unmounted repo is indistinguishable from a deleted one. + +**Lesson**: Any registry-touching gitnexus invocation run in Docker must mount EVERY registered repo at its real host path, not just the current one; otherwise it persists a pruned registry. A bash footgun compounded it: a '[ ... ] && cmd' filter as the last command of a while-loop body returns 1 when the filter fails on the final line, and set -e kills the script — use an if-block inside loops under set -e. + +**Application**: hack/gitnexus-docker.sh now has registry_mounts() (mount all registered repos, exclude the separately-mounted current one) wired into the index-register and passthrough branches; mcp already did this. The os and orchestrator copies of the wrapper still carry the prune bug — backport before running their index/list targets. + +--- + +## [2026-07-04-160749] Compliance tests are the style guide for new commands + +**Context**: Implementing ctx system statusline tripped eight architecture gates in sequence: magic strings/values must live in internal/config/, one visibility per file, cmd/ files restricted to cmd.go+run.go+doc.go with helpers in core/, types in types.go, the ctxRC schema mirror struct, the system doc.go subcommand registry, godoc Parameters/Returns structure, and 80-char lines + +**Lesson**: House conventions are enforced by go test (internal/compliance/ and sibling suites), not documented prose; the test suite is the authoritative style guide + +**Application**: Before scaffolding a new command, read internal/compliance/ and copy an existing cmd package's structure; run the full suite early rather than discovering gates by failure at commit time + +--- + ## [2026-07-04-152957] Typed JSON round-trips silently drop user-owned keys **Context**: The init permissions merge read settings.local.json into a typed struct and re-marshaled it, so every key ctx does not model (env, a user's statusLine) vanished on re-init @@ -1981,3 +2014,77 @@ before patching within the existing frame. --- +## [2026-07-06-a] `ctx journal site` rewrites source entry bodies in place + +**Context**: The self-heal render-hash guard assumed only `execute.go` +(import) authors entry bodies. But `ctx journal site` (`make journal`) +soft-wraps/collapses the *source* `.md` in place (site/run.go), and did +NOT refresh the render hash. Result: after any site build, growth-aware +import saw a hash mismatch and false-flagged every normalized entry as +"edited outside ctx", stranding the growth. + +**Lesson**: A "prove the file is unchanged since we wrote it" hash is +only valid if *every* code path that writes the body refreshes it. Grep +all writers of the artifact, not just the obvious one. + +**Application**: When adding a content-integrity hash, enumerate every +writer (`grep -rn SafeWriteFile <dir>`) and make each refresh the hash — +or route all writes through one helper. Refresh unconditionally on every +non-failed pass so an idempotent transform still re-syncs. + +--- + +## [2026-07-06-b] zensical bundles a fixed lucide icon snapshot + +**Context**: `make site` failed with "template not found: +.icons/lucide/message-square-cog.svg". A doc frontmatter `icon:` field +referenced a lucide icon absent from zensical 0.0.47's bundled set (and +0.0.47 is the latest). Blocks the entire build, not just that page. + +**Lesson**: zensical (like mkdocs-material) ships a frozen lucide +snapshot; a valid-on-lucide.dev icon may not exist in the installed +version. A single bad `icon:` fails the whole site build. + +**Application**: Before a site rebuild, validate every doc `icon: +lucide/X` against the installed bundle +(`find <zensical>/templates/.icons/lucide -name X.svg`). Pick from the +bundled set, not lucide.dev. + +--- + +## [2026-07-06-c] PATH `ctx` is a stale install; verify against the fresh binary + +**Context**: After editing an asset (commands.yaml) and `make build`, +`ctx journal import --help` still showed the OLD text. Cause: `ctx` on +PATH is `/usr/local/bin/ctx` (a prior `make install`), while `make +build` produces `./ctx` in the repo. A project hook blocks running +`./ctx` directly. + +**Lesson**: `make build` does not update the PATH binary. Verifying +behavior via PATH `ctx` after a source change tests the stale install, +not your change. + +**Application**: To verify a fresh build, copy it out +(`cp ./ctx <scratch>/ctx-new`) and run that — it dodges the `./ctx` +hook and reflects your edits. Or `sudo make reinstall`. Never trust +PATH `ctx` help/behavior right after `make build`. + +--- + +## [2026-07-06-d] `internal/assets` ← `internal/rc` blocks package-assets tests importing rc + +**Context**: Moving the `.ctxrc` schema-vs-struct bijection test to +reflect over the real `rc.CtxRC` (drift-proofing it) failed: `rc` +imports `internal/assets/read/placeholders`, which imports top-level +`internal/assets`. So a `package assets` test importing `rc` forms a +cycle (assets → rc → placeholders → assets). + +**Lesson**: `internal/assets` is a low-level leaf that `rc` transitively +depends on; tests in `package assets` cannot import `rc`. + +**Application**: Home a struct-vs-schema guard in the package that owns +the struct (`package rc`), importing `internal/assets` to read the +embedded schema — that direction is acyclic (assets never imports rc). + +--- + diff --git a/.context/TASKS.md b/.context/TASKS.md index 704521d89..e5743f728 100644 --- a/.context/TASKS.md +++ b/.context/TASKS.md @@ -313,6 +313,68 @@ These have priority because other knowledge ingestion projects depend on them. Important things that agent (or human) yeeted to the future. +- [x] Nav gap: doc pages absent from zensical.toml's nav are silently + unreachable from the site sidebar. Discovered + fully fixed 2026-07-06 + (session 7f6de29d, UNCOMMITTED). Swept EVERY docs/ tree, not just + recipes: + - Recipes (10): scrutinizing-a-plan + spec-driven-development → + Knowledge and Tasks; session-changes → Sessions; hook-sequence- + diagrams → Hooks; state-maintenance → Maintenance; run-the-dream + + architecture-deep-dive → Agents and Automation; new "Knowledge Base" + group for build-a-knowledge-base + typical-kb-session + recover- + aborted-session. + - CLI: dream → Sessions; handover → Sessions; kb → Context; the real + subcommand docs event (`ctx hook event`) + message (`ctx hook + message`) → Runtime by hook; bootstrap (`ctx system bootstrap`) → + Runtime by system. Verified via bootstrap/group.go that each is a + live command, not a stale doc. + - Reference: dream-executor-contract. Operations: backup-strategy. + - DELETED docs/cli/connect.md — a verified pure-stale duplicate: the + command's Use string is now "connection" (connect renamed away), + connection.md (155 lines) fully supersedes it (same 6 subcommands, + no unique sections, no inbound links). Also fixed connection.md's + stale `## ctx connect` heading → `ctx connection`. + - RECURRENCE GUARD: internal/compliance/docs_nav_test.go + (TestEveryDocPageIsReachableInNav) fails when any non-blog docs/ + page is missing from the nav. Proven both ways (fails on a planted + orphan naming it; passes clean). blog/ excluded by design (plugin- + rendered), includes/ excluded (partials). + Verified: TOML parses; full non-blog orphan sweep returns zero; guard + + compliance lint green. #priority:low #session:7f6de29d #branch:main + #commit:a0e5cbf9 #added:2026-07-06 + +- [x] Adversarial code-review pass over the 2026-07-06 jumbo working + diff (Phase JI self-healing import + bundles ②③④: strip-gitnexus/ + de-npx, spec-driven-development recipe, .ctxrc config-ification) + BEFORE committing. Do it at home with a real code-viewing setup — + remote triple-tmux is too cramped to review a ~48-file diff well, + and this wants proper human/agent back-and-forth. Run + `/ctx-code-review` on the working tree. Focus areas: the growth/ + adopt/foreign-edit decision matrix in plan.Import (body-hash-over- + frontmatter design); the RegenCount-counts-Grown interaction (an + interactive `ctx journal import --all` without -y now prompts on + growth — intended? safe but maybe surprising); the new slug.FromTitle + → rc singleton coupling the ④ agent introduced (FromTitle is no + longer pure); state v2 migration/adoption on the real corpus; and the + SessionEnd-hook direct-wiring vs. the spec's original "thin system + verb". Everything built/tested/lint-clean this session, but nothing + is committed and nothing has had a second pair of eyes. + #priority:high #session:7f6de29d #branch:main #commit:a0e5cbf9 + #added:2026-07-06 + DONE 2026-07-06 (session 2cff382a, branch fix/jumbo-diff-review-fixes): + 4-pass adversarial review found 20 findings (3 critical, 4 medium, + 13 low); ALL fixed with regression tests. Highlights: C1 — `ctx + journal site` rewrote entry bodies without refreshing render_hash + (self-heal false-flagged every site-normalized entry as foreign-edit); + C2/C3 — negative `auto_prune_days` deleted all session state and + negative `title_slug_max_len` panicked (getters guarded ==0 not <=0); + M1 — MarkSource stamped at plan time stranded failed grown writes + (moved to execute, post-write). RegenCount concern confirmed → split + to GrownCount so routine growth no longer prompts. slug.FromTitle + purity: cooldown/budget-pct promoted to pointer types (0 = explicit). + Full build/lint/test green; docs updated; site rebuilt. See LEARNINGS + 2026-07-06 entries and specs/gitnexus-docker-fold.md. + - [x] Migrate Sprintf-based templates (tpl_*.go) to Go text/template or embedded template files — ObsidianReadme, LoopScript, and other multi-line format strings that can't move to YAML #added:2026-03-18-163629 @@ -465,7 +527,9 @@ Important things that agent (or human) yeeted to the future. ### Phase CT: Companion Tool Integration -- [ ] Add a 'make strip-gitnexus' target (backed by a hack/ script) that +- [ ] Backport the registry_mounts prune-fix to the os and orchestrator copies of gitnexus-docker.sh. The ctx copy (hack/gitnexus-docker.sh) now mounts every registered repo at its real path on all registry-touching branches (index-register + passthrough, matching what mcp already did), so a registry-rewriting gitnexus invocation no longer prunes repos it cannot stat in-container. The sibling copies still carry the bug — running their 'index'/'list' targets would silently deregister ctx from the global registry. Backport before using them. See LEARNINGS 'GitNexus prunes registry entries whose repo paths don't resolve in-container'. #priority:medium #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-212438 + +- [x] Add a 'make strip-gitnexus' target (backed by a hack/ script) that mechanically removes the GitNexus auto-injected block — delimited by <!-- gitnexus:start --> / <!-- gitnexus:end --> markers — from AGENTS.md and CLAUDE.md. Marker-bounded delete (sed range or awk between markers). Must: (1) @@ -477,6 +541,38 @@ Important things that agent (or human) yeeted to the future. runs without that flag. Manual removal was done in 8da165a3; this automates it. #priority:medium #session:74c94e3a #branch:fix/notify-resolution-hardening #commit:8da165a3 #added:2026-06-02-085625 + DONE 2026-07-06 (session 7f6de29d, UNCOMMITTED). hack/strip-gitnexus.sh + (awk marker-bounded delete + trailing-blank trim) + `make strip-gitnexus` + target (added to .PHONY). Ran it: stripped both blocks — CLAUDE.md now + ends at its Gemini/GITNEXUS.md pointer, AGENTS.md is the 3-line redirect + stub. Verified idempotent (2nd run no-op) and zero markers/npx remain. + +- [x] De-npx the gitnexus instructions across live surfaces: `npx + gitnexus analyze` fails on machines whose Node cannot build + gitnexus's pinned tree-sitter native addon (observed on Node 24; + downgrading the host Node is not an option), yet the wording sits in + CLAUDE.md's re-injected gitnexus block (note: dcbc8241 re-committed + the block 8da165a3 deliberately stripped — the strip-gitnexus target + above is the recurrence guard), AGENTS.md, GITNEXUS.md, the + ctx-remember SKILL.md (claude + copilot variants — the recall + readback literally suggests the npx command to users), + ctx-architecture-enrich SKILL.md, docs/recipes/multi-tool-setup.md, + and docs/home/getting-started.md. Fix: bare `gitnexus analyze` as + canonical wording everywhere; repo-local surfaces (GITNEXUS.md, + CLAUDE.md) additionally recommend the Docker path as the reliable + runner (make gitnexus-index / hack/gitnexus-docker.sh — image bakes + a compatible Node, host stays clean); deployed skill assets stay + generic ("gitnexus analyze — or your Docker wrapper if the npm + binary isn't viable"). Historical specs stay untouched. + #priority:medium #session:334b20d1 #branch:main #commit:a0e5cbf9 + #added:2026-07-04 + DONE 2026-07-06 (session 7f6de29d, UNCOMMITTED). Six safe surfaces + de-npx'd to bare `gitnexus analyze` (GITNEXUS.md + Docker path; + getting-started.md; multi-tool-setup.md; ctx-remember claude+copilot + generic wording; ctx-architecture-enrich generic). CLAUDE.md/AGENTS.md + handled by removal via strip-gitnexus (their npx sat in the managed + block). Copilot skills back in sync (make check-copilot-skills). + site/search.json (generated) and historical specs left untouched. Session-start checks, suppressibility, and registry for companion MCP tools. @@ -598,7 +694,14 @@ Docs are feature-organized, not problem-organized. Key structural improvements: - [ ] Add Unicode-aware slugification for non-ASCII content #added:2026-03-21-070953 -- [ ] Make TitleSlugMaxLen configurable via .ctxrc #added:2026-03-21-070944 +- [x] Make TitleSlugMaxLen configurable via .ctxrc #added:2026-03-21-070944 + DONE 2026-07-06 (session 7f6de29d, UNCOMMITTED). Part of the config + batch (with auto_prune_days, agent_cooldown_minutes, task_budget_pct, + convention_budget_pct). Each: CtxRC field + yaml key + rc accessor + with zero-guard fallback to the existing config default (no magic + numbers) + ctxrc.schema.json entry + schema_test mirror + rc_test + default/override tests; consumers rewired to the accessors. golangci + 0 issues; scoped tests green. - [ ] Spec and implement CRLF-to-LF newline normalization for journal and context files #added:2026-03-20-224845 @@ -873,14 +976,22 @@ Taxonomy (from prefix analysis): -- [ ] Make AutoPruneStaleDays configurable via ctxrc. Currently hardcoded to 7 +- [x] Make AutoPruneStaleDays configurable via ctxrc. Currently hardcoded to 7 days in config.AutoPruneStaleDays; add a ctxrc key (e.g., auto_prune_days) and fallback to the default. #priority:low #added:2026-03-07-220512 -- [ ] Add ctxrc support for recall.list.limit to make the default --limit for +- [x] Add ctxrc support for recall.list.limit to make the default --limit for recall list configurable. Currently hardcoded as config.DefaultRecallListLimit (20). #priority:low #added:2026-03-07-164342 + DONE 2026-07-06 (session 7f6de29d, UNCOMMITTED). Deferred from the + config batch (its consumer sat in the reserved journal tree), then + completed once that tree settled. yaml `recall_list_limit` + + RecallListLimit() accessor (zero-guard → journal.DefaultRecallListLimit) + + schema entry + schema_test mirror + rc_test default/custom; + consumer internal/cli/journal/cmd/source/cmd.go now uses the accessor + as the --limit default (dropped its config/journal import). Build + + rc/assets/source tests + lint all green. Completes the ④ batch (5/5). - [ ] Extract journal/core into a standalone journal parser package — functionally isolated enough for its own package rather than remaining as @@ -945,11 +1056,11 @@ Taxonomy (from prefix analysis): .ctxrc — currently hardcoded in config (7/30/90 days, cap 3) #added:2026-03-07-073900 -- [ ] Make DefaultAgentCooldown configurable via .ctxrc — currently hardcoded +- [x] Make DefaultAgentCooldown configurable via .ctxrc — currently hardcoded at 10 minutes in config #added:2026-03-07-073106 -- [ ] Make TaskBudgetPct and ConventionBudgetPct configurable via .ctxrc — +- [x] Make TaskBudgetPct and ConventionBudgetPct configurable via .ctxrc — currently hardcoded at 0.40 and 0.20 in config #added:2026-03-07-072714 - [ ] Localization inventory: audit config constants, write package templates, @@ -2497,6 +2608,95 @@ shipped. ### Misc +- [ ] New orchestrator skill /ctx-architecture-deep-dive: wrap the three-pass architecture arc (/ctx-architecture principal → /ctx-architecture-enrich → /ctx-architecture-failure-analysis) plus the synthesis step (milestone-readiness note → /ctx-task-out --milestone <next>) into one parameterized skill with machine-checkable preconditions (code-intel MCP actually serving the repo, index fresh vs HEAD, synced tree, fresh session). Prior art: zhc/os docs/runbooks/architecture-deep-dive.md — a runbook whose pasted prompt rotted within ONE milestone (needed a 'Historical' banner because it hard-codes milestone facts like 'M0b is untasked'); a skill that derives milestone state from specs/plans/ at runtime doesn't rot. The site recipe architecture-deep-dive documents the arc as prose — this skill would be its ceremony (see the 'unceremonied pipeline step' learning). os prototypes a project-local version first and folds lessons back here. #priority:medium #session:6c276362 #branch:main #commit:a0e5cbf9 #added:2026-07-04-210547 + +- [ ] Skill assets hard-code `npx gitnexus analyze` as the stale-index remedy, but on hosts where GitNexus runs via Docker (tree-sitter@0.21.1 native addon vs Node 24 ABI — no arm64 prebuilt) that command is a silent no-op; os/GITNEXUS.md documents this and both os and ctx expose `make gitnexus-index` → hack|scripts/gitnexus-index.sh instead. Fix the suggestion to be project-aware: point at the repo-local indexing entry point (a `gitnexus-index` make target, an indexing script, or the repo's GITNEXUS.md instructions) and fall back to `npx gitnexus analyze` only when nothing repo-local exists. Sites: internal/assets/claude/skills/ctx-remember/SKILL.md:156, internal/assets/integrations/copilot-cli/skills/ctx-remember/SKILL.md:155, internal/assets/claude/skills/ctx-architecture-enrich/SKILL.md:34+112+130. Found live: /ctx-remember in the os project emitted the broken npx suggestion while the working `make gitnexus-index` existed one directory over. #priority:medium #session:6c276362 #branch:main #commit:a0e5cbf9 #added:2026-07-04-205437 + +- [ ] Drop the persisted INDEX blocks from DECISIONS.md/LEARNINGS.md; + project the index on demand via new CLI verbs instead. The headings + ARE the index (`## [TS] Title` is one grep away); the stored table + is 6-7% dead weight on every read (measured 2026-07-04: 5,021B of + 76,866B / 7,774B of 107,350B), doubles the merge-conflict surface + of every contributor PR that adds an entry (PR #117 conflicts in + two hunks — index row + body), and is the root cause of the + learning-add clobber bug class that index.Validate exists to guard. + An in-file index also only helps if the agent stops reading at the + marker — which nothing enforces; a command's output is bounded by + construction and can never go stale. Build order: (HL.1) + `ctx decision list` / `ctx learning list` (+ optional `show <ts>`) + projecting the headings; (HL.2) `ctx search <needle>` across the + five canonical files + .context/archive/** with labeled sources; + (HL.3) entry-add stops touching the index, one-shot tolerant strip + of INDEX:START/END (present → remove, absent → no-op; downstream + repos migrate on next write), reindex subcommands retired; (HL.4) + reword reader surfaces (agent packet, ctx-remember, CLAUDE.md) to + "run list/search", coordinating with the read-discipline task + above; (HL.5) audit index-table consumers (packet builder, drift, + recall format tests, hub rendering) before the strip. Obviates the + 2026-03-06 "Consider indexing tasks and conventions" task (opposite + direction — do NOT add more indexes). Full analysis + plan: + inbox/2026-07-04-memory-file-index-drop.md (local only). Needs + /ctx-spec + a decision record before implementation. + #priority:medium #session:334b20d1 #branch:main #commit:a0e5cbf9 + #added:2026-07-04 + +- [ ] `ctx hub --mode git`: a git-backed hub mode beside the existing + server mode — the hub becomes a checkout on disk (same-repo dir or + dedicated knowledge repo), no daemon, no ports, no tokens. Core + shape: open-intake immutable inbox/ (mechanical validation floor is + the only write gate: schema, required evidence, size caps, secret + scan; entries inert until promoted) → human curation verbs + (promote/reject/defer) recording every disposition in a per-scope + ledger → living accepted pages → gitignored, bounded, + byte-reproducible .context/HUB.md overlay surfaced as a budgeted + section of the `ctx agent` packet. Precedence: local .context/ + always wins; no conflict resolution by design (human-paced git sync + replaces consensus — the trust model in internal/hub/doc.go already + says every token holder is trusted, so election/failover is + infrastructure the deployment shape doesn't need). Lifecycle without + wiki rot: supersedes/reverifies/tombstones relations; delete is a + deliberately expensive secrets runbook. Trust = prevent (pathguard + on accepted/**) + detect (validate flags gate bypass) + attribute + (git commits + per-entry actor) + repair (re-curate). Absorbs the + Future task "Hub curation: immutable promotion ledger + mechanical + validate floor" (#added:2026-07-04-153004) — that idea, fully + formed. Full analysis + phased implementation plan (HG.1–HG.6, + data shapes, testing spine, open questions): + inbox/2026-07-04-hub-git-mode-analysis-and-plan.md (local only). + Needs /ctx-spec before implementation; --share semantics change + needs a decision record. #priority:medium + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04 + +- [ ] Context-file read discipline for agent instruction surfaces: + CLAUDE.md's "Do You Remember" section, the ctx-remember skills + (claude + copilot variants), and the `ctx agent` packet's "Read These + Files" section all instruct FULL reads of TASKS.md / DECISIONS.md / + LEARNINGS.md. At current sizes (TASKS.md 133KB ≈ 52k tokens, + LEARNINGS.md 107KB, DECISIONS.md 77KB) a literal-minded agent pages + through 100k+ tokens at session start; the harness read-cap only + slows this, it doesn't stop it. Apply the GITNEXUS.md yield pattern + inward: every instruction surface directs the agent to (1) the + budgeted `ctx agent` packet, (2) a projected one-line-per-entry + view — `ctx decision list` / `ctx learning list` once the + index-drop task below lands (command output is bounded by + construction; until then, the file's INDEX block), (3) targeted + entry-body reads by timestamp — never a full-file page-through. Consider `ctx agent` emitting per-file + size/token hints so agents can self-limit. Name the existing relief + valves in the instructions: decisions-reference.md / + learnings-reference.md offload, /ctx-consolidate, ctx task archive. + #priority:high #session:334b20d1 #branch:main #commit:a0e5cbf9 + #added:2026-07-04 + +- [-] Fold journal import into /ctx-wrap-up so users never have to remember + to import journals (original sketch: an --exclude/--skip-active flag so + the ceremony could skip the live session whose import would otherwise + freeze a truncated transcript). SKIPPED same-day: the flag treats the + symptom. Making import growth-aware removes the hazard entirely and + needs no new flags — superseded by Phase JI below, spec + specs/journal-import-self-heal.md. #priority:medium + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-164037 + #superseded:2026-07-04 + - [x] Implement ctx system statusline per specs/statusline.md: stdin-JSON render (model, ctx%, cost), .ctxrc statusline block, setup merge with backup/restore. Informational only; no gating (spec records why) #priority:medium #session:a31b3e67 #branch:main #commit:687bbd59 #added:2026-07-04-140249 - [x] Companion-tool feature-delta analysis; borrow/skip verdicts recorded in gitignored inbox/ notes (local only) #session:a31b3e67 #branch:main #commit:687bbd59 #added:2026-07-04-135227 @@ -2505,7 +2705,16 @@ shipped. - [x] Add hack/check-tools.sh tooling dependency checker (manifest: hack/tool-versions.txt, make check-tools) — spec: specs/check-tools.md #session:a31b3e67 #branch:main #commit:687bbd59 #added:2026-07-04-132852 -- [ ] Recipe: the full design-to-implementation pipeline from the operator's seat (new 'spec-driven-development.md' or a major fold into design-before-coding.md). Must cover, for a newcomer with zero tribal knowledge: (1) the 5-step chain INCLUDING /ctx-plan — design-before-coding.md's TL;DR currently omits the debated-brief step entirely; (2) altitude: the bet is debated once and the spec covers ALL milestones — briefs are per-bet, never per-milestone; (3) plans are just-in-time per milestone behind the rolling-wave gate (tasking distant milestones produces fiction); (4) blocking-TBD gates as the replacement for per-milestone debates — each task-out run forces exactly the decisions that milestone embeds, into DECISIONS.md; (5) two surfaces, one truth: plan = execution ledger (st column), TASKS.md epics = one-way projections over disjoint id ranges; DoD is measurement/Board-confirmed, never derived; (6) when a NEW brief happens: new bet (e.g. deferred machinery returning) or evidence falsifying the committed bet — never relitigating from below; (7) a worked multi-milestone example, not a one-session feature. Origin: zhc/os session a63353a3 (2026-07-03) — the operator had to reverse-engineer all seven from skill texts and agent explanations #priority:high #session:a63353a3 #branch:main #commit:511a609a #added:2026-07-03-232251 +- [x] Recipe: the full design-to-implementation pipeline from the operator's seat (new 'spec-driven-development.md' or a major fold into design-before-coding.md). Must cover, for a newcomer with zero tribal knowledge: (1) the 5-step chain INCLUDING /ctx-plan — design-before-coding.md's TL;DR currently omits the debated-brief step entirely; (2) altitude: the bet is debated once and the spec covers ALL milestones — briefs are per-bet, never per-milestone; (3) plans are just-in-time per milestone behind the rolling-wave gate (tasking distant milestones produces fiction); (4) blocking-TBD gates as the replacement for per-milestone debates — each task-out run forces exactly the decisions that milestone embeds, into DECISIONS.md; (5) two surfaces, one truth: plan = execution ledger (st column), TASKS.md epics = one-way projections over disjoint id ranges; DoD is measurement/Board-confirmed, never derived; (6) when a NEW brief happens: new bet (e.g. deferred machinery returning) or evidence falsifying the committed bet — never relitigating from below; (7) a worked multi-milestone example, not a one-session feature. Origin: zhc/os session a63353a3 (2026-07-03) — the operator had to reverse-engineer all seven from skill texts and agent explanations #priority:high #session:a63353a3 #branch:main #commit:511a609a #added:2026-07-03-232251 + DONE 2026-07-06 (session 7f6de29d, UNCOMMITTED). New file + docs/recipes/spec-driven-development.md (all 7 points; five-step chain + with /ctx-plan first-class; worked four-milestone example — `ctx digest`) + + an entry in docs/recipes/index.md. Kept as a NEW file, not folded + into design-before-coding.md (different altitude: on-ramp vs operator + manual). Two flags for later: design-before-coding.md's TL;DR still + omits /ctx-plan (the new recipe compensates); and point 5's "Board" is + sibling-project vocab — rendered in ctx's own terms ("measurement or by + you"). Verified every claim against the skill texts. - [ ] Tighten /ctx-spec (and /ctx-implement) skills to bake in spec-kit's one good discipline without adopting spec-kit: every /ctx-spec must end with (a) @@ -2518,6 +2727,125 @@ shipped. #priority:medium #session:210b77dd #branch:main #commit:6b0d0107 #added:2026-06-27-222130 +### Phase JI: Self-Healing Journal Import + +Spec: `specs/journal-import-self-heal.md`. Read the spec before starting +any JI task. Goal: journal import becomes growth-aware and safe to run +at any moment — from /ctx-wrap-up, a SessionEnd hook, or by hand — so +importing is never something the user has to remember or time. Claude +Code transcripts are append-only, so "source grew" is detectable from +mtime+size and a partial import is just an intermediate state the next +sweep completes. No new flags. + +- [x] JI.1: Journal state schema v2 — add per-session source tracking + to internal/journal/state: `sessions` map keyed by session id + recording source_file, source_mtime, source_size; add `render_hash` + to per-file entries. Version bump 1→2; v1 loads tolerantly (missing + maps initialise empty); first v2 run adopts already-imported sessions + by recording current source stats WITHOUT re-rendering. Tests: v1 + round-trips to v2 losslessly, adoption is idempotent, missing-file + sources adopt as zero-stat (next stat marks Grown → captured, per + the statSource-fails-open principle). #priority:high + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-173100 + +- [x] JI.2: Growth-aware planning — replace plan.Import's + exists-check with a New/Grown/Unchanged decision from state v2. + Grown = recorded mtime OR size differs, including the chosen + (richest) transcript switching to a larger resume copy. Part-aware + re-render: growth only appends messages, so re-render the last part + plus newly created parts; earlier parts untouched by construction. + ActionRegenerate demoted to explicit-flag edge case (mass re-render + after format changes; healing pre-v2 truncated entries). Locked + entries never rewritten (existing invariant). Tests: import → grow + source → import yields complete entry flag-free; double sweep is + byte-identical and reports all Unchanged. #priority:high + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-173100 + +- [x] JI.3: Foreign-edit safety via render hash — every ctx-authored + write of a journal entry (import, enrich, normalize, fence-verify) + refreshes render_hash in state; the hash always reflects the last + ctx-authored write. On Grown: hash matches → splice fresh transcript + preserving enriched frontmatter (existing keep-frontmatter + machinery); hash differs or absent (pre-v2) → leave file untouched, + warn naming the file, suggest `ctx journal lock` or explicit + --regenerate. Never clobber. Tests: hand-edited entry survives a + Grown sweep byte-identical + warned; enriched frontmatter survives a + Grown re-render. #priority:high + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-173100 + +- [x] JI.4: Live-transcript parse tolerance — the JSONL session + parser treats a trailing partial line as end-of-input (truncate to + last complete line), no error, no warning; the missing record is + captured by the next sweep. Test fixture: transcript cut mid-record. + #priority:medium + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-173100 + +- [x] JI.5: Wrap-up integration — /ctx-wrap-up runs + `ctx journal import --all -y` as a best-effort, NON-BLOCKING step + before delegating to /ctx-handover; an import failure never blocks + the handover. Update the wrap-up skill + its docs; enrichment stays + out of the ceremony (LLM pass, belongs to /ctx-journal-enrich-all). + Depends on JI.1–JI.3 (safe to run mid-session). #priority:medium + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-173100 + +- [x] JI.6: SessionEnd hook — hooks.json entry firing the import + automatically on session end (thin `ctx system` verb per hook + conventions), making the ceremony step belt-and-suspenders + (import is idempotent; redundancy costs one stat per session). + Must be covered by TestShippedHooksResolveToRegisteredCommands. + Depends on JI.1–JI.3. #priority:medium + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-173100 + + DONE 2026-07-06 (session 7f6de29d, branch main; UNCOMMITTED — + awaiting a GPG-capable terminal). Whole phase shipped: + - JI.1: state schema v2 (state/types.go: Sessions map + Source, + File.RenderHash; state.go: CurrentVersion 1→2, tolerant v1 load + normalising to v2, SessionSource/MarkSource; hash.go: HashRender, + RenderHash/SetRenderHash). Tests: v1 tolerance, source round-trip, + accessors, nil-map. + - JI.2+JI.3 landed together (Grown re-render is unsafe without the + hash guard): plan.Import decides New/Grown/Unchanged/Adopt/ + ForeignEdit from source mtime+size vs state, hash-guarding every + Grown re-render. RENDER HASH IS OVER THE BODY (frontmatter + stripped): enrich/normalize/fence are agent-side (no ctx write to + refresh a whole-file hash; MarkEnriched/Normalized/FencesVerified + are dead code), so agent-side enrichment (frontmatter-only) still + verifies ctx-owned while a hand-edited body reads as foreign. New + entity.ActionForeignEdit + label.reason-edited i18n; execute.Import + stamps the hash on write and skips+warns on ForeignEdit. + plan_test.go covers every decision. + - JI.4: parser already skipped malformed lines; pinned with + TestClaudeCodeParser_PartialTrailingLine. + - JI.5: /ctx-wrap-up Phase 4.5 (best-effort, non-blocking import) + across all three skill variants (claude/copilot/opencode). + - JI.6: SessionEnd hook wires `ctx journal import --all -y` DIRECTLY + (mirrors the `ctx agent` hook), not a thin system verb — the + hooks-wiring guard resolves any `ctx <path>`, so no new command is + needed and ceremony+hook share one code path. Compliance guard + passes. Spec §5 updated to match. + DEFERRED refinement: Grown re-renders count toward RegenCount, so an + interactive `ctx journal import --all` without -y prompts on growth + (safe, hash-guarded; hook/ceremony use -y). A non-prompting Grown + path is a possible follow-up. + Spec: specs/journal-import-self-heal.md. + +- [x] JI.7: Docs + flag story — cli-reference and journal recipe: + document self-healing semantics (import any time, sweeps complete + what they started), reposition --regenerate/--keep-frontmatter as + edge-case tools, document the one-time --regenerate heal for pre-v2 + truncated entries. No new flags is a feature; say so. #priority:low + #session:334b20d1 #branch:main #commit:a0e5cbf9 #added:2026-07-04-173100 + DONE 2026-07-06 (session 7f6de29d, UNCOMMITTED). docs/cli/journal.md + import section rewritten: self-healing model (new + grown + skip- + unchanged), "edits never clobbered" (foreign-edit warning → + lock/--regenerate), --regenerate repositioned as the edge-case tool + (format re-render + one-time pre-self-heal truncation heal), the + SessionEnd-hook/wrap-up auto-import, and "no new flags is the + feature" stated. Also de-staled the skip-existing framing in + docs/recipes/publishing.md and docs/home/common-workflows.md. + (session-archaeology.md's --regenerate note left as-is — still + accurate.) Whole Phase JI (JI.1–JI.7) now complete. + ### Future - [ ] Hub curation: immutable promotion ledger (who accepted what, when, why) + mechanical validate floor for shared knowledge; revisit when ctx hub grows team-curation workflows #priority:low #session:a31b3e67 #branch:main #commit:d800734c #added:2026-07-04-153004 diff --git a/site/404.html b/site/404.html index 119c74a4f..ec903dda5 100644 --- a/site/404.html +++ b/site/404.html @@ -19,7 +19,7 @@ <link rel="icon" href="/images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -30,7 +30,7 @@ - <link rel="stylesheet" href="/assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="/assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -310,6 +310,8 @@ + + @@ -394,6 +396,8 @@ + + @@ -743,6 +747,8 @@ + + @@ -887,6 +893,8 @@ + + @@ -1204,7 +1212,7 @@ <h1>404 - Not found</h1> <script id="__config" type="application/json">{"annotate":null,"base":"/","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"/assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="/assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="/assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/assets/javascripts/bundle.0df4f2d0.min.js b/site/assets/javascripts/bundle.0df4f2d0.min.js new file mode 100644 index 000000000..09cb6677e --- /dev/null +++ b/site/assets/javascripts/bundle.0df4f2d0.min.js @@ -0,0 +1,14 @@ +"use strict";(()=>{var jc=Object.create;var In=Object.defineProperty,Fc=Object.defineProperties,Uc=Object.getOwnPropertyDescriptor,Nc=Object.getOwnPropertyDescriptors,Dc=Object.getOwnPropertyNames,zr=Object.getOwnPropertySymbols,Wc=Object.getPrototypeOf,Rn=Object.prototype.hasOwnProperty,Wo=Object.prototype.propertyIsEnumerable;var Do=(e,t,r)=>t in e?In(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k=(e,t)=>{for(var r in t||(t={}))Rn.call(t,r)&&Do(e,r,t[r]);if(zr)for(var r of zr(t))Wo.call(t,r)&&Do(e,r,t[r]);return e},He=(e,t)=>Fc(e,Nc(t));var xr=(e,t)=>{var r={};for(var n in e)Rn.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&zr)for(var n of zr(e))t.indexOf(n)<0&&Wo.call(e,n)&&(r[n]=e[n]);return r};var jn=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}};var Vc=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Dc(t))!Rn.call(e,o)&&o!==r&&In(e,o,{get:()=>t[o],enumerable:!(n=Uc(t,o))||n.enumerable});return e};var Zt=(e,t,r)=>(r=e!=null?jc(Wc(e)):{},Vc(t||!e||!e.__esModule?In(r,"default",{value:e,enumerable:!0}):r,e));var pt=(e,t,r)=>new Promise((n,o)=>{var i=c=>{try{s(r.next(c))}catch(l){o(l)}},a=c=>{try{s(r.throw(c))}catch(l){o(l)}},s=c=>c.done?n(c.value):Promise.resolve(c.value).then(i,a);s((r=r.apply(e,t)).next())});var zo=jn((Fn,Vo)=>{(function(e,t){typeof Fn=="object"&&typeof Vo!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(Fn,(function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(y){return!!(y&&y!==document&&y.nodeName!=="HTML"&&y.nodeName!=="BODY"&&"classList"in y&&"contains"in y.classList)}function c(y){var Z=y.type,ve=y.tagName;return!!(ve==="INPUT"&&a[Z]&&!y.readOnly||ve==="TEXTAREA"&&!y.readOnly||y.isContentEditable)}function l(y){y.classList.contains("focus-visible")||(y.classList.add("focus-visible"),y.setAttribute("data-focus-visible-added",""))}function u(y){y.hasAttribute("data-focus-visible-added")&&(y.classList.remove("focus-visible"),y.removeAttribute("data-focus-visible-added"))}function p(y){y.metaKey||y.altKey||y.ctrlKey||(s(r.activeElement)&&l(r.activeElement),n=!0)}function d(y){n=!1}function m(y){s(y.target)&&(n||c(y.target))&&l(y.target)}function h(y){s(y.target)&&(y.target.classList.contains("focus-visible")||y.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(y.target))}function v(y){document.visibilityState==="hidden"&&(o&&(n=!0),_())}function _(){document.addEventListener("mousemove",E),document.addEventListener("mousedown",E),document.addEventListener("mouseup",E),document.addEventListener("pointermove",E),document.addEventListener("pointerdown",E),document.addEventListener("pointerup",E),document.addEventListener("touchmove",E),document.addEventListener("touchstart",E),document.addEventListener("touchend",E)}function x(){document.removeEventListener("mousemove",E),document.removeEventListener("mousedown",E),document.removeEventListener("mouseup",E),document.removeEventListener("pointermove",E),document.removeEventListener("pointerdown",E),document.removeEventListener("pointerup",E),document.removeEventListener("touchmove",E),document.removeEventListener("touchstart",E),document.removeEventListener("touchend",E)}function E(y){y.target.nodeName&&y.target.nodeName.toLowerCase()==="html"||(n=!1,x())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",d,!0),document.addEventListener("pointerdown",d,!0),document.addEventListener("touchstart",d,!0),document.addEventListener("visibilitychange",v,!0),_(),r.addEventListener("focus",m,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)}))});var Hn=jn((pE,Ts)=>{"use strict";var fp=/["'&<>]/;Ts.exports=mp;function mp(e){var t=""+e,r=fp.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i<t.length;i++){switch(t.charCodeAt(i)){case 34:n=""";break;case 38:n="&";break;case 39:n="'";break;case 60:n="<";break;case 62:n=">";break;default:continue}a!==i&&(o+=t.substring(a,i)),a=i+1,o+=n}return a!==i?o+t.substring(a,i):o}});var Ao=jn((Ur,ko)=>{(function(t,r){typeof Ur=="object"&&typeof ko=="object"?ko.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Ur=="object"?Ur.ClipboardJS=r():t.ClipboardJS=r()})(Ur,function(){return(function(){var e={686:(function(n,o,i){"use strict";i.d(o,{default:function(){return yr}});var a=i(279),s=i.n(a),c=i(370),l=i.n(c),u=i(817),p=i.n(u);function d(G){try{return document.execCommand(G)}catch(H){return!1}}var m=function(H){var C=p()(H);return d("cut"),C},h=m;function v(G){var H=document.documentElement.getAttribute("dir")==="rtl",C=document.createElement("textarea");C.style.fontSize="12pt",C.style.border="0",C.style.padding="0",C.style.margin="0",C.style.position="absolute",C.style[H?"right":"left"]="-9999px";var V=window.pageYOffset||document.documentElement.scrollTop;return C.style.top="".concat(V,"px"),C.setAttribute("readonly",""),C.value=G,C}var _=function(H,C){var V=v(H);C.container.appendChild(V);var z=p()(V);return d("copy"),V.remove(),z},x=function(H){var C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},V="";return typeof H=="string"?V=_(H,C):H instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(H==null?void 0:H.type)?V=_(H.value,C):(V=p()(H),d("copy")),V},E=x;function y(G){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?y=function(C){return typeof C}:y=function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C},y(G)}var Z=function(){var H=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},C=H.action,V=C===void 0?"copy":C,z=H.container,Q=H.target,Ve=H.text;if(V!=="copy"&&V!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(Q!==void 0)if(Q&&y(Q)==="object"&&Q.nodeType===1){if(V==="copy"&&Q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(V==="cut"&&(Q.hasAttribute("readonly")||Q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Ve)return E(Ve,{container:z});if(Q)return V==="cut"?h(Q):E(Q,{container:z})},ve=Z;function L(G){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?L=function(C){return typeof C}:L=function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C},L(G)}function M(G,H){if(!(G instanceof H))throw new TypeError("Cannot call a class as a function")}function W(G,H){for(var C=0;C<H.length;C++){var V=H[C];V.enumerable=V.enumerable||!1,V.configurable=!0,"value"in V&&(V.writable=!0),Object.defineProperty(G,V.key,V)}}function te(G,H,C){return H&&W(G.prototype,H),C&&W(G,C),G}function ue(G,H){if(typeof H!="function"&&H!==null)throw new TypeError("Super expression must either be null or a function");G.prototype=Object.create(H&&H.prototype,{constructor:{value:G,writable:!0,configurable:!0}}),H&&le(G,H)}function le(G,H){return le=Object.setPrototypeOf||function(V,z){return V.__proto__=z,V},le(G,H)}function De(G){var H=ut();return function(){var V=rt(G),z;if(H){var Q=rt(this).constructor;z=Reflect.construct(V,arguments,Q)}else z=V.apply(this,arguments);return _t(this,z)}}function _t(G,H){return H&&(L(H)==="object"||typeof H=="function")?H:We(G)}function We(G){if(G===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return G}function ut(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(G){return!1}}function rt(G){return rt=Object.setPrototypeOf?Object.getPrototypeOf:function(C){return C.__proto__||Object.getPrototypeOf(C)},rt(G)}function Jt(G,H){var C="data-clipboard-".concat(G);if(H.hasAttribute(C))return H.getAttribute(C)}var Ht=(function(G){ue(C,G);var H=De(C);function C(V,z){var Q;return M(this,C),Q=H.call(this),Q.resolveOptions(z),Q.listenClick(V),Q}return te(C,[{key:"resolveOptions",value:function(){var z=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof z.action=="function"?z.action:this.defaultAction,this.target=typeof z.target=="function"?z.target:this.defaultTarget,this.text=typeof z.text=="function"?z.text:this.defaultText,this.container=L(z.container)==="object"?z.container:document.body}},{key:"listenClick",value:function(z){var Q=this;this.listener=l()(z,"click",function(Ve){return Q.onClick(Ve)})}},{key:"onClick",value:function(z){var Q=z.delegateTarget||z.currentTarget,Ve=this.action(Q)||"copy",Xt=ve({action:Ve,container:this.container,target:this.target(Q),text:this.text(Q)});this.emit(Xt?"success":"error",{action:Ve,text:Xt,trigger:Q,clearSelection:function(){Q&&Q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(z){return Jt("action",z)}},{key:"defaultTarget",value:function(z){var Q=Jt("target",z);if(Q)return document.querySelector(Q)}},{key:"defaultText",value:function(z){return Jt("text",z)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(z){var Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return E(z,Q)}},{key:"cut",value:function(z){return h(z)}},{key:"isSupported",value:function(){var z=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],Q=typeof z=="string"?[z]:z,Ve=!!document.queryCommandSupported;return Q.forEach(function(Xt){Ve=Ve&&!!document.queryCommandSupported(Xt)}),Ve}}]),C})(s()),yr=Ht}),828:(function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,c){for(;s&&s.nodeType!==o;){if(typeof s.matches=="function"&&s.matches(c))return s;s=s.parentNode}}n.exports=a}),438:(function(n,o,i){var a=i(828);function s(u,p,d,m,h){var v=l.apply(this,arguments);return u.addEventListener(d,v,h),{destroy:function(){u.removeEventListener(d,v,h)}}}function c(u,p,d,m,h){return typeof u.addEventListener=="function"?s.apply(null,arguments):typeof d=="function"?s.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return s(v,p,d,m,h)}))}function l(u,p,d,m){return function(h){h.delegateTarget=a(h.target,p),h.delegateTarget&&m.call(u,h)}}n.exports=c}),879:(function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}}),370:(function(n,o,i){var a=i(879),s=i(438);function c(d,m,h){if(!d&&!m&&!h)throw new Error("Missing required arguments");if(!a.string(m))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(d))return l(d,m,h);if(a.nodeList(d))return u(d,m,h);if(a.string(d))return p(d,m,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function l(d,m,h){return d.addEventListener(m,h),{destroy:function(){d.removeEventListener(m,h)}}}function u(d,m,h){return Array.prototype.forEach.call(d,function(v){v.addEventListener(m,h)}),{destroy:function(){Array.prototype.forEach.call(d,function(v){v.removeEventListener(m,h)})}}}function p(d,m,h){return s(document.body,d,m,h)}n.exports=c}),817:(function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),l=document.createRange();l.selectNodeContents(i),c.removeAllRanges(),c.addRange(l),a=c.toString()}return a}n.exports=o}),279:(function(n){function o(){}o.prototype={on:function(i,a,s){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var c=this;function l(){c.off(i,l),a.apply(s,arguments)}return l._=a,this.on(i,l,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),c=0,l=s.length;for(c;c<l;c++)s[c].fn.apply(s[c].ctx,a);return this},off:function(i,a){var s=this.e||(this.e={}),c=s[i],l=[];if(c&&a)for(var u=0,p=c.length;u<p;u++)c[u].fn!==a&&c[u].fn._!==a&&l.push(c[u]);return l.length?s[i]=l:delete s[i],this}},n.exports=o,n.exports.TinyEmitter=o})},t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}return(function(){r.n=function(n){var o=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(o,{a:o}),o}})(),(function(){r.d=function(n,o){for(var i in o)r.o(o,i)&&!r.o(n,i)&&Object.defineProperty(n,i,{enumerable:!0,get:o[i]})}})(),(function(){r.o=function(n,o){return Object.prototype.hasOwnProperty.call(n,o)}})(),r(686)})().default})});var Sk=Zt(zo());var Un=function(e,t){return Un=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[o]=n[o])},Un(e,t)};function pe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Un(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}function qo(e,t,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(p){a(p)}}function c(u){try{l(n.throw(u))}catch(p){a(p)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(e,t||[])).next())})}function qr(e,t){var r={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(r=0)),r;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=t.call(e,r)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}function $e(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function re(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],a;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i}function ie(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n<o;n++)(i||!(n in t))&&(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))}function $t(e){return this instanceof $t?(this.v=e,this):new $t(e)}function Ko(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(e,t||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",a),o[Symbol.asyncIterator]=function(){return this},o;function a(m){return function(h){return Promise.resolve(h).then(m,p)}}function s(m,h){n[m]&&(o[m]=function(v){return new Promise(function(_,x){i.push([m,v,_,x])>1||c(m,v)})},h&&(o[m]=h(o[m])))}function c(m,h){try{l(n[m](h))}catch(v){d(i[0][3],v)}}function l(m){m.value instanceof $t?Promise.resolve(m.value.v).then(u,p):d(i[0][2],m)}function u(m){c("next",m)}function p(m){c("throw",m)}function d(m,h){m(h),i.shift(),i.length&&c(i[0][0],i[0][1])}}function Bo(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof $e=="function"?$e(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(a){return new Promise(function(s,c){a=e[i](a),o(s,c,a.done,a.value)})}}function o(i,a,s,c){Promise.resolve(c).then(function(l){i({value:l,done:s})},a)}}function U(e){return typeof e=="function"}function Qt(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Kr=Qt(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function ft(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var nt=(function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=$e(a),c=s.next();!c.done;c=s.next()){var l=c.value;l.remove(this)}}catch(v){t={error:v}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var u=this.initialTeardown;if(U(u))try{u()}catch(v){i=v instanceof Kr?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var d=$e(p),m=d.next();!m.done;m=d.next()){var h=m.value;try{Go(h)}catch(v){i=i!=null?i:[],v instanceof Kr?i=ie(ie([],re(i)),re(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{m&&!m.done&&(o=d.return)&&o.call(d)}finally{if(n)throw n.error}}}if(i)throw new Kr(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)Go(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&ft(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&ft(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e})();var Nn=nt.EMPTY;function Br(e){return e instanceof nt||e&&"closed"in e&&U(e.remove)&&U(e.add)&&U(e.unsubscribe)}function Go(e){U(e)?e():e.unsubscribe()}var Xe={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var er={setTimeout:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=er.delegate;return o!=null&&o.setTimeout?o.setTimeout.apply(o,ie([e,t],re(r))):setTimeout.apply(void 0,ie([e,t],re(r)))},clearTimeout:function(e){var t=er.delegate;return((t==null?void 0:t.clearTimeout)||clearTimeout)(e)},delegate:void 0};function Gr(e){er.setTimeout(function(){var t=Xe.onUnhandledError;if(t)t(e);else throw e})}function Pe(){}var Yo=(function(){return Dn("C",void 0,void 0)})();function Jo(e){return Dn("E",void 0,e)}function Xo(e){return Dn("N",e,void 0)}function Dn(e,t,r){return{kind:e,value:t,error:r}}var Pt=null;function tr(e){if(Xe.useDeprecatedSynchronousErrorHandling){var t=!Pt;if(t&&(Pt={errorThrown:!1,error:null}),e(),t){var r=Pt,n=r.errorThrown,o=r.error;if(Pt=null,n)throw o}}else e()}function Zo(e){Xe.useDeprecatedSynchronousErrorHandling&&Pt&&(Pt.errorThrown=!0,Pt.error=e)}var wr=(function(e){pe(t,e);function t(r){var n=e.call(this)||this;return n.isStopped=!1,r?(n.destination=r,Br(r)&&r.add(n)):n.destination=Bc,n}return t.create=function(r,n,o){return new mt(r,n,o)},t.prototype.next=function(r){this.isStopped?Vn(Xo(r),this):this._next(r)},t.prototype.error=function(r){this.isStopped?Vn(Jo(r),this):(this.isStopped=!0,this._error(r))},t.prototype.complete=function(){this.isStopped?Vn(Yo,this):(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(r){this.destination.next(r)},t.prototype._error=function(r){try{this.destination.error(r)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t})(nt);var zc=Function.prototype.bind;function Wn(e,t){return zc.call(e,t)}var qc=(function(){function e(t){this.partialObserver=t}return e.prototype.next=function(t){var r=this.partialObserver;if(r.next)try{r.next(t)}catch(n){Yr(n)}},e.prototype.error=function(t){var r=this.partialObserver;if(r.error)try{r.error(t)}catch(n){Yr(n)}else Yr(t)},e.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(r){Yr(r)}},e})(),mt=(function(e){pe(t,e);function t(r,n,o){var i=e.call(this)||this,a;if(U(r)||!r)a={next:r!=null?r:void 0,error:n!=null?n:void 0,complete:o!=null?o:void 0};else{var s;i&&Xe.useDeprecatedNextContext?(s=Object.create(r),s.unsubscribe=function(){return i.unsubscribe()},a={next:r.next&&Wn(r.next,s),error:r.error&&Wn(r.error,s),complete:r.complete&&Wn(r.complete,s)}):a=r}return i.destination=new qc(a),i}return t})(wr);function Yr(e){Xe.useDeprecatedSynchronousErrorHandling?Zo(e):Gr(e)}function Kc(e){throw e}function Vn(e,t){var r=Xe.onStoppedNotification;r&&er.setTimeout(function(){return r(e,t)})}var Bc={closed:!0,next:Pe,error:Kc,complete:Pe};var rr=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Le(e){return e}function Qo(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return zn(e)}function zn(e){return e.length===0?Le:e.length===1?e[0]:function(r){return e.reduce(function(n,o){return o(n)},r)}}var F=(function(){function e(t){t&&(this._subscribe=t)}return e.prototype.lift=function(t){var r=new e;return r.source=this,r.operator=t,r},e.prototype.subscribe=function(t,r,n){var o=this,i=Yc(t)?t:new mt(t,r,n);return tr(function(){var a=o,s=a.operator,c=a.source;i.add(s?s.call(i,c):c?o._subscribe(i):o._trySubscribe(i))}),i},e.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(r){t.error(r)}},e.prototype.forEach=function(t,r){var n=this;return r=ei(r),new r(function(o,i){var a=new mt({next:function(s){try{t(s)}catch(c){i(c),a.unsubscribe()}},error:i,complete:o});n.subscribe(a)})},e.prototype._subscribe=function(t){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(t)},e.prototype[rr]=function(){return this},e.prototype.pipe=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return zn(t)(this)},e.prototype.toPromise=function(t){var r=this;return t=ei(t),new t(function(n,o){var i;r.subscribe(function(a){return i=a},function(a){return o(a)},function(){return n(i)})})},e.create=function(t){return new e(t)},e})();function ei(e){var t;return(t=e!=null?e:Xe.Promise)!==null&&t!==void 0?t:Promise}function Gc(e){return e&&U(e.next)&&U(e.error)&&U(e.complete)}function Yc(e){return e&&e instanceof wr||Gc(e)&&Br(e)}function Jc(e){return U(e==null?void 0:e.lift)}function S(e){return function(t){if(Jc(t))return t.lift(function(r){try{return e(r,this)}catch(n){this.error(n)}});throw new TypeError("Unable to lift unknown Observable type")}}function T(e,t,r,n,o){return new Xc(e,t,r,n,o)}var Xc=(function(e){pe(t,e);function t(r,n,o,i,a,s){var c=e.call(this,r)||this;return c.onFinalize=a,c.shouldUnsubscribe=s,c._next=n?function(l){try{n(l)}catch(u){r.error(u)}}:e.prototype._next,c._error=i?function(l){try{i(l)}catch(u){r.error(u)}finally{this.unsubscribe()}}:e.prototype._error,c._complete=o?function(){try{o()}catch(l){r.error(l)}finally{this.unsubscribe()}}:e.prototype._complete,c}return t.prototype.unsubscribe=function(){var r;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var n=this.closed;e.prototype.unsubscribe.call(this),!n&&((r=this.onFinalize)===null||r===void 0||r.call(this))}},t})(wr);var nr={schedule:function(e){var t=requestAnimationFrame,r=cancelAnimationFrame,n=nr.delegate;n&&(t=n.requestAnimationFrame,r=n.cancelAnimationFrame);var o=t(function(i){r=void 0,e(i)});return new nt(function(){return r==null?void 0:r(o)})},requestAnimationFrame:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=nr.delegate;return((r==null?void 0:r.requestAnimationFrame)||requestAnimationFrame).apply(void 0,ie([],re(e)))},cancelAnimationFrame:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=nr.delegate;return((r==null?void 0:r.cancelAnimationFrame)||cancelAnimationFrame).apply(void 0,ie([],re(e)))},delegate:void 0};var ti=Qt(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}});var I=(function(e){pe(t,e);function t(){var r=e.call(this)||this;return r.closed=!1,r.currentObservers=null,r.observers=[],r.isStopped=!1,r.hasError=!1,r.thrownError=null,r}return t.prototype.lift=function(r){var n=new ri(this,this);return n.operator=r,n},t.prototype._throwIfClosed=function(){if(this.closed)throw new ti},t.prototype.next=function(r){var n=this;tr(function(){var o,i;if(n._throwIfClosed(),!n.isStopped){n.currentObservers||(n.currentObservers=Array.from(n.observers));try{for(var a=$e(n.currentObservers),s=a.next();!s.done;s=a.next()){var c=s.value;c.next(r)}}catch(l){o={error:l}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}}})},t.prototype.error=function(r){var n=this;tr(function(){if(n._throwIfClosed(),!n.isStopped){n.hasError=n.isStopped=!0,n.thrownError=r;for(var o=n.observers;o.length;)o.shift().error(r)}})},t.prototype.complete=function(){var r=this;tr(function(){if(r._throwIfClosed(),!r.isStopped){r.isStopped=!0;for(var n=r.observers;n.length;)n.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var r;return((r=this.observers)===null||r===void 0?void 0:r.length)>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,s=o.observers;return i||a?Nn:(this.currentObservers=null,s.push(r),new nt(function(){n.currentObservers=null,ft(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new ri(r,n)},t})(F);var ri=(function(e){pe(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Nn},t})(I);var qn=(function(e){pe(t,e);function t(r){var n=e.call(this)||this;return n._value=r,n}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var n=e.prototype._subscribe.call(this,r);return!n.closed&&r.next(this._value),n},t.prototype.getValue=function(){var r=this,n=r.hasError,o=r.thrownError,i=r._value;if(n)throw o;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t})(I);var Er={now:function(){return(Er.delegate||Date).now()},delegate:void 0};var Tr=(function(e){pe(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Er);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,s=n._timestampProvider,c=n._windowTime;o||(i.push(r),!a&&i.push(s.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,s=a.slice(),c=0;c<s.length&&!r.closed;c+=i?1:2)r.next(s[c]);return this._checkFinalizedStatuses(r),n},t.prototype._trimBuffer=function(){var r=this,n=r._bufferSize,o=r._timestampProvider,i=r._buffer,a=r._infiniteTimeWindow,s=(a?1:2)*n;if(n<1/0&&s<i.length&&i.splice(0,i.length-s),!a){for(var c=o.now(),l=0,u=1;u<i.length&&i[u]<=c;u+=2)l=u;l&&i.splice(0,l+1)}},t})(I);var ni=(function(e){pe(t,e);function t(r,n){return e.call(this)||this}return t.prototype.schedule=function(r,n){return n===void 0&&(n=0),this},t})(nt);var Sr={setInterval:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=Sr.delegate;return o!=null&&o.setInterval?o.setInterval.apply(o,ie([e,t],re(r))):setInterval.apply(void 0,ie([e,t],re(r)))},clearInterval:function(e){var t=Sr.delegate;return((t==null?void 0:t.clearInterval)||clearInterval)(e)},delegate:void 0};var or=(function(e){pe(t,e);function t(r,n){var o=e.call(this,r,n)||this;return o.scheduler=r,o.work=n,o.pending=!1,o}return t.prototype.schedule=function(r,n){var o;if(n===void 0&&(n=0),this.closed)return this;this.state=r;var i=this.id,a=this.scheduler;return i!=null&&(this.id=this.recycleAsyncId(a,i,n)),this.pending=!0,this.delay=n,this.id=(o=this.id)!==null&&o!==void 0?o:this.requestAsyncId(a,this.id,n),this},t.prototype.requestAsyncId=function(r,n,o){return o===void 0&&(o=0),Sr.setInterval(r.flush.bind(r,this),o)},t.prototype.recycleAsyncId=function(r,n,o){if(o===void 0&&(o=0),o!=null&&this.delay===o&&this.pending===!1)return n;n!=null&&Sr.clearInterval(n)},t.prototype.execute=function(r,n){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var o=this._execute(r,n);if(o)return o;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(r,n){var o=!1,i;try{this.work(r)}catch(a){o=!0,i=a||new Error("Scheduled action threw falsy error")}if(o)return this.unsubscribe(),i},t.prototype.unsubscribe=function(){if(!this.closed){var r=this,n=r.id,o=r.scheduler,i=o.actions;this.work=this.state=this.scheduler=null,this.pending=!1,ft(i,this),n!=null&&(this.id=this.recycleAsyncId(o,n,null)),this.delay=null,e.prototype.unsubscribe.call(this)}},t})(ni);var Kn=(function(){function e(t,r){r===void 0&&(r=e.now),this.schedulerActionCtor=t,this.now=r}return e.prototype.schedule=function(t,r,n){return r===void 0&&(r=0),new this.schedulerActionCtor(this,t).schedule(n,r)},e.now=Er.now,e})();var ir=(function(e){pe(t,e);function t(r,n){n===void 0&&(n=Kn.now);var o=e.call(this,r,n)||this;return o.actions=[],o._active=!1,o}return t.prototype.flush=function(r){var n=this.actions;if(this._active){n.push(r);return}var o;this._active=!0;do if(o=r.execute(r.state,r.delay))break;while(r=n.shift());if(this._active=!1,o){for(;r=n.shift();)r.unsubscribe();throw o}},t})(Kn);var ye=new ir(or),Bn=ye;var oi=(function(e){pe(t,e);function t(r,n){var o=e.call(this,r,n)||this;return o.scheduler=r,o.work=n,o}return t.prototype.schedule=function(r,n){return n===void 0&&(n=0),n>0?e.prototype.schedule.call(this,r,n):(this.delay=n,this.state=r,this.scheduler.flush(this),this)},t.prototype.execute=function(r,n){return n>0||this.closed?e.prototype.execute.call(this,r,n):this._execute(r,n)},t.prototype.requestAsyncId=function(r,n,o){return o===void 0&&(o=0),o!=null&&o>0||o==null&&this.delay>0?e.prototype.requestAsyncId.call(this,r,n,o):(r.flush(this),0)},t})(or);var ii=(function(e){pe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t})(ir);var Gn=new ii(oi);var ai=(function(e){pe(t,e);function t(r,n){var o=e.call(this,r,n)||this;return o.scheduler=r,o.work=n,o}return t.prototype.requestAsyncId=function(r,n,o){return o===void 0&&(o=0),o!==null&&o>0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=nr.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var a=r.actions;n!=null&&n===r._scheduled&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==n&&(nr.cancelAnimationFrame(n),r._scheduled=void 0)},t})(or);var si=(function(e){pe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n;r?n=r.id:(n=this._scheduled,this._scheduled=void 0);var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t})(ir);var je=new si(ai);var w=new F(function(e){return e.complete()});function Jr(e){return e&&U(e.schedule)}function Yn(e){return e[e.length-1]}function wt(e){return U(Yn(e))?e.pop():void 0}function Be(e){return Jr(Yn(e))?e.pop():void 0}function Xr(e,t){return typeof Yn(e)=="number"?e.pop():t}var ar=(function(e){return e&&typeof e.length=="number"&&typeof e!="function"});function Zr(e){return U(e==null?void 0:e.then)}function Qr(e){return U(e[rr])}function en(e){return Symbol.asyncIterator&&U(e==null?void 0:e[Symbol.asyncIterator])}function tn(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Zc(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var rn=Zc();function nn(e){return U(e==null?void 0:e[rn])}function on(e){return Ko(this,arguments,function(){var r,n,o,i;return qr(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,$t(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,$t(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,$t(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function an(e){return U(e==null?void 0:e.getReader)}function K(e){if(e instanceof F)return e;if(e!=null){if(Qr(e))return Qc(e);if(ar(e))return el(e);if(Zr(e))return tl(e);if(en(e))return ci(e);if(nn(e))return rl(e);if(an(e))return nl(e)}throw tn(e)}function Qc(e){return new F(function(t){var r=e[rr]();if(U(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function el(e){return new F(function(t){for(var r=0;r<e.length&&!t.closed;r++)t.next(e[r]);t.complete()})}function tl(e){return new F(function(t){e.then(function(r){t.closed||(t.next(r),t.complete())},function(r){return t.error(r)}).then(null,Gr)})}function rl(e){return new F(function(t){var r,n;try{for(var o=$e(e),i=o.next();!i.done;i=o.next()){var a=i.value;if(t.next(a),t.closed)return}}catch(s){r={error:s}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}t.complete()})}function ci(e){return new F(function(t){ol(e,t).catch(function(r){return t.error(r)})})}function nl(e){return ci(on(e))}function ol(e,t){var r,n,o,i;return qo(this,void 0,void 0,function(){var a,s;return qr(this,function(c){switch(c.label){case 0:c.trys.push([0,5,6,11]),r=Bo(e),c.label=1;case 1:return[4,r.next()];case 2:if(n=c.sent(),!!n.done)return[3,4];if(a=n.value,t.next(a),t.closed)return[2];c.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return s=c.sent(),o={error:s},[3,11];case 6:return c.trys.push([6,,9,10]),n&&!n.done&&(i=r.return)?[4,i.call(r)]:[3,8];case 7:c.sent(),c.label=8;case 8:return[3,10];case 9:if(o)throw o.error;return[7];case 10:return[7];case 11:return t.complete(),[2]}})})}function Fe(e,t,r,n,o){n===void 0&&(n=0),o===void 0&&(o=!1);var i=t.schedule(function(){r(),o?e.add(this.schedule(null,n)):this.unsubscribe()},n);if(e.add(i),!o)return i}function Ie(e,t){return t===void 0&&(t=0),S(function(r,n){r.subscribe(T(n,function(o){return Fe(n,e,function(){return n.next(o)},t)},function(){return Fe(n,e,function(){return n.complete()},t)},function(o){return Fe(n,e,function(){return n.error(o)},t)}))})}function It(e,t){return t===void 0&&(t=0),S(function(r,n){n.add(e.schedule(function(){return r.subscribe(n)},t))})}function li(e,t){return K(e).pipe(It(t),Ie(t))}function ui(e,t){return K(e).pipe(It(t),Ie(t))}function pi(e,t){return new F(function(r){var n=0;return t.schedule(function(){n===e.length?r.complete():(r.next(e[n++]),r.closed||this.schedule())})})}function fi(e,t){return new F(function(r){var n;return Fe(r,t,function(){n=e[rn](),Fe(r,t,function(){var o,i,a;try{o=n.next(),i=o.value,a=o.done}catch(s){r.error(s);return}a?r.complete():r.next(i)},0,!0)}),function(){return U(n==null?void 0:n.return)&&n.return()}})}function sn(e,t){if(!e)throw new Error("Iterable cannot be null");return new F(function(r){Fe(r,t,function(){var n=e[Symbol.asyncIterator]();Fe(r,t,function(){n.next().then(function(o){o.done?r.complete():r.next(o.value)})},0,!0)})})}function mi(e,t){return sn(on(e),t)}function di(e,t){if(e!=null){if(Qr(e))return li(e,t);if(ar(e))return pi(e,t);if(Zr(e))return ui(e,t);if(en(e))return sn(e,t);if(nn(e))return fi(e,t);if(an(e))return mi(e,t)}throw tn(e)}function de(e,t){return t?di(e,t):K(e)}function D(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e);return de(e,r)}function cn(e,t){var r=U(e)?e:function(){return e},n=function(o){return o.error(r())};return new F(t?function(o){return t.schedule(n,0,o)}:n)}var sr=Qt(function(e){return function(){e(this),this.name="EmptyError",this.message="no elements in sequence"}});function ln(e,t){var r=typeof t=="object";return new Promise(function(n,o){var i=new mt({next:function(a){n(a),i.unsubscribe()},error:o,complete:function(){r?n(t.defaultValue):o(new sr)}});e.subscribe(i)})}function hi(e){return e instanceof Date&&!isNaN(e)}function f(e,t){return S(function(r,n){var o=0;r.subscribe(T(n,function(i){n.next(e.call(t,i,o++))}))})}var il=Array.isArray;function al(e,t){return il(t)?e.apply(void 0,ie([],re(t))):e(t)}function Et(e){return f(function(t){return al(e,t)})}var sl=Array.isArray,cl=Object.getPrototypeOf,ll=Object.prototype,ul=Object.keys;function vi(e){if(e.length===1){var t=e[0];if(sl(t))return{args:t,keys:null};if(pl(t)){var r=ul(t);return{args:r.map(function(n){return t[n]}),keys:r}}}return{args:e,keys:null}}function pl(e){return e&&typeof e=="object"&&cl(e)===ll}function bi(e,t){return e.reduce(function(r,n,o){return r[n]=t[o],r},{})}function oe(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e),n=wt(e),o=vi(e),i=o.args,a=o.keys;if(i.length===0)return de([],r);var s=new F(Jn(i,r,a?function(c){return bi(a,c)}:Le));return n?s.pipe(Et(n)):s}function Jn(e,t,r){return r===void 0&&(r=Le),function(n){gi(t,function(){for(var o=e.length,i=new Array(o),a=o,s=o,c=function(u){gi(t,function(){var p=de(e[u],t),d=!1;p.subscribe(T(n,function(m){i[u]=m,d||(d=!0,s--),s||n.next(r(i.slice()))},function(){--a||n.complete()}))},n)},l=0;l<o;l++)c(l)},n)}}function gi(e,t,r){e?Fe(r,e,t):t()}function yi(e,t,r,n,o,i,a,s){var c=[],l=0,u=0,p=!1,d=function(){p&&!c.length&&!l&&t.complete()},m=function(v){return l<n?h(v):c.push(v)},h=function(v){i&&t.next(v),l++;var _=!1;K(r(v,u++)).subscribe(T(t,function(x){o==null||o(x),i?m(x):t.next(x)},function(){_=!0},void 0,function(){if(_)try{l--;for(var x=function(){var E=c.shift();a?Fe(t,a,function(){return h(E)}):h(E)};c.length&&l<n;)x();d()}catch(E){t.error(E)}}))};return e.subscribe(T(t,m,function(){p=!0,d()})),function(){s==null||s()}}function ae(e,t,r){return r===void 0&&(r=1/0),U(t)?ae(function(n,o){return f(function(i,a){return t(n,i,o,a)})(K(e(n,o)))},r):(typeof t=="number"&&(r=t),S(function(n,o){return yi(n,o,e,r)}))}function cr(e){return e===void 0&&(e=1/0),ae(Le,e)}function _i(){return cr(1)}function ot(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return _i()(de(e,Be(e)))}function j(e){return new F(function(t){K(e()).subscribe(t)})}var fl=["addListener","removeListener"],ml=["addEventListener","removeEventListener"],dl=["on","off"];function b(e,t,r,n){if(U(r)&&(n=r,r=void 0),n)return b(e,t,r).pipe(Et(n));var o=re(bl(e)?ml.map(function(s){return function(c){return e[s](t,c,r)}}):hl(e)?fl.map(xi(e,t)):vl(e)?dl.map(xi(e,t)):[],2),i=o[0],a=o[1];if(!i&&ar(e))return ae(function(s){return b(s,t,r)})(K(e));if(!i)throw new TypeError("Invalid event target");return new F(function(s){var c=function(){for(var l=[],u=0;u<arguments.length;u++)l[u]=arguments[u];return s.next(1<l.length?l:l[0])};return i(c),function(){return a(c)}})}function xi(e,t){return function(r){return function(n){return e[r](t,n)}}}function hl(e){return U(e.addListener)&&U(e.removeListener)}function vl(e){return U(e.on)&&U(e.off)}function bl(e){return U(e.addEventListener)&&U(e.removeEventListener)}function un(e,t,r){return r?un(e,t).pipe(Et(r)):new F(function(n){var o=function(){for(var a=[],s=0;s<arguments.length;s++)a[s]=arguments[s];return n.next(a.length===1?a[0]:a)},i=e(o);return U(t)?function(){return t(o,i)}:void 0})}function ze(e,t,r){e===void 0&&(e=0),r===void 0&&(r=Bn);var n=-1;return t!=null&&(Jr(t)?r=t:n=t),new F(function(o){var i=hi(e)?+e-r.now():e;i<0&&(i=0);var a=0;return r.schedule(function(){o.closed||(o.next(a++),0<=n?this.schedule(void 0,n):o.complete())},i)})}function R(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e),n=Xr(e,1/0),o=e;return o.length?o.length===1?K(o[0]):cr(n)(de(o,r)):w}var Ge=new F(Pe);var gl=Array.isArray;function pn(e){return e.length===1&&gl(e[0])?e[0]:e}function O(e,t){return S(function(r,n){var o=0;r.subscribe(T(n,function(i){return e.call(t,i,o++)&&n.next(i)}))})}function Rt(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=wt(e),n=pn(e);return n.length?new F(function(o){var i=n.map(function(){return[]}),a=n.map(function(){return!1});o.add(function(){i=a=null});for(var s=function(l){K(n[l]).subscribe(T(o,function(u){if(i[l].push(u),i.every(function(d){return d.length})){var p=i.map(function(d){return d.shift()});o.next(r?r.apply(void 0,ie([],re(p))):p),i.some(function(d,m){return!d.length&&a[m]})&&o.complete()}},function(){a[l]=!0,!i[l].length&&o.complete()}))},c=0;!o.closed&&c<n.length;c++)s(c);return function(){i=a=null}}):w}function wi(e){return S(function(t,r){var n=!1,o=null,i=null,a=!1,s=function(){if(i==null||i.unsubscribe(),i=null,n){n=!1;var l=o;o=null,r.next(l)}a&&r.complete()},c=function(){i=null,a&&r.complete()};t.subscribe(T(r,function(l){n=!0,o=l,i||K(e(l)).subscribe(i=T(r,s,c))},function(){a=!0,(!n||!i||i.closed)&&r.complete()}))})}function Ze(e,t){return t===void 0&&(t=ye),wi(function(){return ze(e,t)})}function jt(e,t){return t===void 0&&(t=null),t=t!=null?t:e,S(function(r,n){var o=[],i=0;r.subscribe(T(n,function(a){var s,c,l,u,p=null;i++%t===0&&o.push([]);try{for(var d=$e(o),m=d.next();!m.done;m=d.next()){var h=m.value;h.push(a),e<=h.length&&(p=p!=null?p:[],p.push(h))}}catch(x){s={error:x}}finally{try{m&&!m.done&&(c=d.return)&&c.call(d)}finally{if(s)throw s.error}}if(p)try{for(var v=$e(p),_=v.next();!_.done;_=v.next()){var h=_.value;ft(o,h),n.next(h)}}catch(x){l={error:x}}finally{try{_&&!_.done&&(u=v.return)&&u.call(v)}finally{if(l)throw l.error}}},function(){var a,s;try{for(var c=$e(o),l=c.next();!l.done;l=c.next()){var u=l.value;n.next(u)}}catch(p){a={error:p}}finally{try{l&&!l.done&&(s=c.return)&&s.call(c)}finally{if(a)throw a.error}}n.complete()},void 0,function(){o=null}))})}function me(e){return S(function(t,r){var n=null,o=!1,i;n=t.subscribe(T(r,void 0,void 0,function(a){i=K(e(a,me(e)(t))),n?(n.unsubscribe(),n=null,i.subscribe(r)):o=!0})),o&&(n.unsubscribe(),n=null,i.subscribe(r))})}function Ei(e,t,r,n,o){return function(i,a){var s=r,c=t,l=0;i.subscribe(T(a,function(u){var p=l++;c=s?e(c,u,p):(s=!0,u),n&&a.next(c)},o&&(function(){s&&a.next(c),a.complete()})))}}function Xn(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=wt(e);return r?Qo(Xn.apply(void 0,ie([],re(e))),Et(r)):S(function(n,o){Jn(ie([n],re(pn(e))))(o)})}function Qe(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Xn.apply(void 0,ie([],re(e)))}function Or(e){return S(function(t,r){var n=!1,o=null,i=null,a=function(){if(i==null||i.unsubscribe(),i=null,n){n=!1;var s=o;o=null,r.next(s)}};t.subscribe(T(r,function(s){i==null||i.unsubscribe(),n=!0,o=s,i=T(r,a,Pe),K(e(s)).subscribe(i)},function(){a(),r.complete()},void 0,function(){o=i=null}))})}function Ye(e,t){return t===void 0&&(t=ye),S(function(r,n){var o=null,i=null,a=null,s=function(){if(o){o.unsubscribe(),o=null;var l=i;i=null,n.next(l)}};function c(){var l=a+e,u=t.now();if(u<l){o=this.schedule(void 0,l-u),n.add(o);return}s()}r.subscribe(T(n,function(l){i=l,a=t.now(),o||(o=t.schedule(c,e),n.add(o))},function(){s(),n.complete()},void 0,function(){i=o=null}))})}function it(e){return S(function(t,r){var n=!1;t.subscribe(T(r,function(o){n=!0,r.next(o)},function(){n||r.next(e),r.complete()}))})}function Me(e){return e<=0?function(){return w}:S(function(t,r){var n=0;t.subscribe(T(r,function(o){++n<=e&&(r.next(o),e<=n&&r.complete())}))})}function be(){return S(function(e,t){e.subscribe(T(t,Pe))})}function Ti(e){return f(function(){return e})}function Zn(e,t){return t?function(r){return ot(t.pipe(Me(1),be()),r.pipe(Zn(e)))}:ae(function(r,n){return K(e(r,n)).pipe(Me(1),Ti(r))})}function Ft(e,t){t===void 0&&(t=ye);var r=ze(e,t);return Zn(function(){return r})}function Qn(e,t){return S(function(r,n){var o=new Set;r.subscribe(T(n,function(i){var a=e?e(i):i;o.has(a)||(o.add(a),n.next(i))})),t&&K(t).subscribe(T(n,function(){return o.clear()},Pe))})}function se(e,t){return t===void 0&&(t=Le),e=e!=null?e:yl,S(function(r,n){var o,i=!0;r.subscribe(T(n,function(a){var s=t(a);(i||!e(o,s))&&(i=!1,o=s,n.next(a))}))})}function yl(e,t){return e===t}function he(e,t){return se(function(r,n){return t?t(r[e],n[e]):r[e]===n[e]})}function Si(e){return e===void 0&&(e=_l),S(function(t,r){var n=!1;t.subscribe(T(r,function(o){n=!0,r.next(o)},function(){return n?r.complete():r.error(e())}))})}function _l(){return new sr}function _e(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(r){return ot(r,D.apply(void 0,ie([],re(e))))}}function fn(e,t){return t?function(r){return r.pipe(fn(function(n,o){return K(e(n,o)).pipe(f(function(i,a){return t(n,i,o,a)}))}))}:S(function(r,n){var o=0,i=null,a=!1;r.subscribe(T(n,function(s){i||(i=T(n,void 0,function(){i=null,a&&n.complete()}),K(e(s,o++)).subscribe(i))},function(){a=!0,!i&&n.complete()}))})}function q(e){return S(function(t,r){try{t.subscribe(r)}finally{r.add(e)}})}function Lr(e,t){var r=arguments.length>=2;return function(n){return n.pipe(e?O(function(o,i){return e(o,i,n)}):Le,Me(1),r?it(t):Si(function(){return new sr}))}}function eo(e){return e<=0?function(){return w}:S(function(t,r){var n=[];t.subscribe(T(r,function(o){n.push(o),e<n.length&&n.shift()},function(){var o,i;try{for(var a=$e(n),s=a.next();!s.done;s=a.next()){var c=s.value;r.next(c)}}catch(l){o={error:l}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}r.complete()},void 0,function(){n=null}))})}function Oi(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e),n=Xr(e,1/0);return S(function(o,i){cr(n)(de(ie([o],re(e)),r)).subscribe(i)})}function Ut(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Oi.apply(void 0,ie([],re(e)))}function mn(){return S(function(e,t){var r,n=!1;e.subscribe(T(t,function(o){var i=r;r=o,n&&t.next([i,o]),n=!0}))})}function Nt(e){var t,r=1/0,n;return e!=null&&(typeof e=="object"?(t=e.count,r=t===void 0?1/0:t,n=e.delay):r=e),r<=0?function(){return w}:S(function(o,i){var a=0,s,c=function(){if(s==null||s.unsubscribe(),s=null,n!=null){var u=typeof n=="number"?ze(n):K(n(a)),p=T(i,function(){p.unsubscribe(),l()});u.subscribe(p)}else l()},l=function(){var u=!1;s=o.subscribe(T(i,void 0,function(){++a<r?s?c():u=!0:i.complete()})),u&&c()};l()})}function Mr(e,t){return S(Ei(e,t,arguments.length>=2,!0))}function xe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new I}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,c=s===void 0?!0:s;return function(l){var u,p,d,m=0,h=!1,v=!1,_=function(){p==null||p.unsubscribe(),p=void 0},x=function(){_(),u=d=void 0,h=v=!1},E=function(){var y=u;x(),y==null||y.unsubscribe()};return S(function(y,Z){m++,!v&&!h&&_();var ve=d=d!=null?d:r();Z.add(function(){m--,m===0&&!v&&!h&&(p=to(E,c))}),ve.subscribe(Z),!u&&m>0&&(u=new mt({next:function(L){return ve.next(L)},error:function(L){v=!0,_(),p=to(x,o,L),ve.error(L)},complete:function(){h=!0,_(),p=to(x,a),ve.complete()}}),K(y).subscribe(u))})(l)}}function to(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];if(t===!0){e();return}if(t!==!1){var o=new mt({next:function(){o.unsubscribe(),e()}});return K(t.apply(void 0,ie([],re(r)))).subscribe(o)}}function ne(e,t,r){var n,o,i,a,s=!1;return e&&typeof e=="object"?(n=e.bufferSize,a=n===void 0?1/0:n,o=e.windowTime,t=o===void 0?1/0:o,i=e.refCount,s=i===void 0?!1:i,r=e.scheduler):a=e!=null?e:1/0,xe({connector:function(){return new Tr(a,t,r)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:s})}function ke(e){return O(function(t,r){return e<=r})}function J(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e);return S(function(n,o){(r?ot(e,n,r):ot(e,n)).subscribe(o)})}function g(e,t){return S(function(r,n){var o=null,i=0,a=!1,s=function(){return a&&!o&&n.complete()};r.subscribe(T(n,function(c){o==null||o.unsubscribe();var l=0,u=i++;K(e(c,u)).subscribe(o=T(n,function(p){return n.next(t?t(c,p,u,l++):p)},function(){o=null,s()}))},function(){a=!0,s()}))})}function ee(e){return S(function(t,r){K(e).subscribe(T(r,function(){return r.complete()},Pe)),!r.closed&&t.subscribe(r)})}function ro(e,t){return t===void 0&&(t=!1),S(function(r,n){var o=0;r.subscribe(T(n,function(i){var a=e(i,o++);(a||t)&&n.next(i),!a&&n.complete()}))})}function P(e,t,r){var n=U(e)||t||r?{next:e,error:t,complete:r}:e;return n?S(function(o,i){var a;(a=n.subscribe)===null||a===void 0||a.call(n);var s=!0;o.subscribe(T(i,function(c){var l;(l=n.next)===null||l===void 0||l.call(n,c),i.next(c)},function(){var c;s=!1,(c=n.complete)===null||c===void 0||c.call(n),i.complete()},function(c){var l;s=!1,(l=n.error)===null||l===void 0||l.call(n,c),i.error(c)},function(){var c,l;s&&((c=n.unsubscribe)===null||c===void 0||c.call(n)),(l=n.finalize)===null||l===void 0||l.call(n)}))}):Le}function Li(e,t){return S(function(r,n){var o=t!=null?t:{},i=o.leading,a=i===void 0?!0:i,s=o.trailing,c=s===void 0?!1:s,l=!1,u=null,p=null,d=!1,m=function(){p==null||p.unsubscribe(),p=null,c&&(_(),d&&n.complete())},h=function(){p=null,d&&n.complete()},v=function(x){return p=K(e(x)).subscribe(T(n,m,h))},_=function(){if(l){l=!1;var x=u;u=null,n.next(x),!d&&v(x)}};r.subscribe(T(n,function(x){l=!0,u=x,!(p&&!p.closed)&&(a?_():v(x))},function(){d=!0,!(c&&l&&p&&!p.closed)&&n.complete()}))})}function kr(e,t,r){t===void 0&&(t=ye);var n=ze(e,t);return Li(function(){return n},r)}function fe(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=wt(e);return S(function(n,o){for(var i=e.length,a=new Array(i),s=e.map(function(){return!1}),c=!1,l=function(p){K(e[p]).subscribe(T(o,function(d){a[p]=d,!c&&!s[p]&&(s[p]=!0,(c=s.every(Le))&&(s=null))},Pe))},u=0;u<i;u++)l(u);n.subscribe(T(o,function(p){if(c){var d=ie([p],re(a));o.next(r?r.apply(void 0,ie([],re(d))):d)}}))})}function Mi(){let e=new Tr(1);return b(document,"DOMContentLoaded",{once:!0}).subscribe(()=>e.next(document)),e}function $(e,t=document){return Array.from(t.querySelectorAll(e))}function Y(e,t=document){let r=we(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function we(e,t=document){return t.querySelector(e)||void 0}function Tt(){var e,t,r,n;return(n=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?n:void 0}var xl=R(b(document.body,"focusin"),b(document.body,"focusout")).pipe(Ye(1),J(void 0),f(()=>Tt()||document.body),ne(1));function lr(e){return xl.pipe(f(t=>e.contains(t)),se())}function Dt(e,t){let{matches:r}=matchMedia("(hover)");return j(()=>(r?R(b(e,"mouseenter").pipe(f(()=>!0)),b(e,"mouseleave").pipe(f(()=>!1))):R(b(e,"touchstart").pipe(f(()=>!0)),b(e,"touchend").pipe(f(()=>!1)),b(e,"touchcancel").pipe(f(()=>!1)))).pipe(t?Or(o=>ze(+!o*t)):Le,J(!0,e.matches(":hover"))))}function ki(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)ki(e,r)}function A(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)ki(n,o);return n}function Ai(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function at(e){let t=A("script",{src:e});return j(()=>(document.head.appendChild(t),R(b(t,"load"),b(t,"error").pipe(g(()=>cn(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(f(()=>{}),q(()=>document.head.removeChild(t)),Me(1))))}function Ci(e){let t=A("link",{rel:"stylesheet",href:e});return document.head.appendChild(t),R(b(t,"load"),b(t,"error").pipe(g(()=>cn(()=>new ReferenceError(`Invalid styles: ${e}`))))).pipe(f(()=>{}),Me(1))}var Hi=new I,wl=j(()=>typeof ResizeObserver=="undefined"?at("https://unpkg.com/resize-observer-polyfill"):D(void 0)).pipe(f(()=>new ResizeObserver(e=>e.forEach(t=>Hi.next(t)))),g(e=>R(Ge,D(e)).pipe(q(()=>e.disconnect()))),ne(1));function Ae(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Re(e){let t=e;for(;t.clientWidth===0&&t.parentElement;)t=t.parentElement;return wl.pipe(P(r=>r.observe(t)),g(r=>Hi.pipe(O(n=>n.target===t),q(()=>r.unobserve(t)))),f(()=>Ae(e)),J(Ae(e)))}function Ar(e){return{width:e.scrollWidth,height:e.scrollHeight}}function $i(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}function Pi(e){let t=[],r=e.parentElement;for(;r;)(e.clientWidth>r.clientWidth||e.clientHeight>r.clientHeight)&&t.push(r),r=(e=r).parentElement;return t.length===0&&t.push(document.documentElement),t}function St(e){return{x:e.offsetLeft,y:e.offsetTop}}function Ii(e){let t=e.getBoundingClientRect();return{x:t.x+window.scrollX,y:t.y+window.scrollY}}function Ri(e){return R(b(window,"load"),b(window,"resize")).pipe(Ze(0,je),f(()=>St(e)),J(St(e)))}function dn(e){return{x:e.scrollLeft,y:e.scrollTop}}function Wt(e){return R(b(e,"scroll"),b(window,"scroll"),b(window,"resize")).pipe(Ze(0,je),f(()=>dn(e)),J(dn(e)))}var ji=new I,El=j(()=>D(new IntersectionObserver(e=>{for(let t of e)ji.next(t)},{threshold:0}))).pipe(g(e=>R(Ge,D(e)).pipe(q(()=>e.disconnect()))),ne(1));function Ot(e){return El.pipe(P(t=>t.observe(e)),g(t=>ji.pipe(O(({target:r})=>r===e),q(()=>t.unobserve(e)),f(({isIntersecting:r})=>r))))}var Tl=Object.create,da=Object.defineProperty,Sl=Object.getOwnPropertyDescriptor,Ol=Object.getOwnPropertyNames,Ll=Object.getPrototypeOf,Ml=Object.prototype.hasOwnProperty,kl=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Al=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ol(t))!Ml.call(e,o)&&o!==r&&da(e,o,{get:()=>t[o],enumerable:!(n=Sl(t,o))||n.enumerable});return e},Cl=(e,t,r)=>(r=e!=null?Tl(Ll(e)):{},Al(t||!e||!e.__esModule?da(r,"default",{value:e,enumerable:!0}):r,e)),Hl=kl((e,t)=>{var r="Expected a function",n=NaN,o="[object Symbol]",i=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt,u=typeof global=="object"&&global&&global.Object===Object&&global,p=typeof self=="object"&&self&&self.Object===Object&&self,d=u||p||Function("return this")(),m=Object.prototype,h=m.toString,v=Math.max,_=Math.min,x=function(){return d.Date.now()};function E(M,W,te){var ue,le,De,_t,We,ut,rt=0,Jt=!1,Ht=!1,yr=!0;if(typeof M!="function")throw new TypeError(r);W=L(W)||0,y(te)&&(Jt=!!te.leading,Ht="maxWait"in te,De=Ht?v(L(te.maxWait)||0,W):De,yr="trailing"in te?!!te.trailing:yr);function G(Se){var xt=ue,_r=le;return ue=le=void 0,rt=Se,_t=M.apply(_r,xt),_t}function H(Se){return rt=Se,We=setTimeout(z,W),Jt?G(Se):_t}function C(Se){var xt=Se-ut,_r=Se-rt,No=W-xt;return Ht?_(No,De-_r):No}function V(Se){var xt=Se-ut,_r=Se-rt;return ut===void 0||xt>=W||xt<0||Ht&&_r>=De}function z(){var Se=x();if(V(Se))return Q(Se);We=setTimeout(z,C(Se))}function Q(Se){return We=void 0,yr&&ue?G(Se):(ue=le=void 0,_t)}function Ve(){We!==void 0&&clearTimeout(We),rt=0,ue=ut=le=We=void 0}function Xt(){return We===void 0?_t:Q(x())}function Vr(){var Se=x(),xt=V(Se);if(ue=arguments,le=this,ut=Se,xt){if(We===void 0)return H(ut);if(Ht)return We=setTimeout(z,W),G(ut)}return We===void 0&&(We=setTimeout(z,W)),_t}return Vr.cancel=Ve,Vr.flush=Xt,Vr}function y(M){var W=typeof M;return!!M&&(W=="object"||W=="function")}function Z(M){return!!M&&typeof M=="object"}function ve(M){return typeof M=="symbol"||Z(M)&&h.call(M)==o}function L(M){if(typeof M=="number")return M;if(ve(M))return n;if(y(M)){var W=typeof M.valueOf=="function"?M.valueOf():M;M=y(W)?W+"":W}if(typeof M!="string")return M===0?M:+M;M=M.replace(i,"");var te=s.test(M);return te||c.test(M)?l(M.slice(2),te?2:8):a.test(M)?n:+M}t.exports=E}),Sn,B,ha,va,Vt,Fi,ba,ga,ya,mo,ao,so,$l,Hr={},_a=[],Pl=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Rr=Array.isArray;function ht(e,t){for(var r in t)e[r]=t[r];return e}function ho(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function kt(e,t,r){var n,o,i,a={};for(i in t)i=="key"?n=t[i]:i=="ref"?o=t[i]:a[i]=t[i];if(arguments.length>2&&(a.children=arguments.length>3?Sn.call(arguments,2):r),typeof e=="function"&&e.defaultProps!=null)for(i in e.defaultProps)a[i]===void 0&&(a[i]=e.defaultProps[i]);return bn(e,a,n,o,null)}function bn(e,t,r,n,o){var i={type:e,props:t,key:r,ref:n,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o!=null?o:++ha,__i:-1,__u:0};return o==null&&B.vnode!=null&&B.vnode(i),i}function qe(e){return e.children}function lt(e,t){this.props=e,this.context=t}function pr(e,t){if(t==null)return e.__?pr(e.__,e.__i+1):null;for(var r;t<e.__k.length;t++)if((r=e.__k[t])!=null&&r.__e!=null)return r.__e;return typeof e.type=="function"?pr(e):null}function xa(e){var t,r;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((r=e.__k[t])!=null&&r.__e!=null){e.__e=e.__c.base=r.__e;break}return xa(e)}}function Ui(e){(!e.__d&&(e.__d=!0)&&Vt.push(e)&&!xn.__r++||Fi!=B.debounceRendering)&&((Fi=B.debounceRendering)||ba)(xn)}function xn(){for(var e,t,r,n,o,i,a,s=1;Vt.length;)Vt.length>s&&Vt.sort(ga),e=Vt.shift(),s=Vt.length,e.__d&&(r=void 0,n=void 0,o=(n=(t=e).__v).__e,i=[],a=[],t.__P&&((r=ht({},n)).__v=n.__v+1,B.vnode&&B.vnode(r),vo(t.__P,r,n,t.__n,t.__P.namespaceURI,32&n.__u?[o]:null,i,o!=null?o:pr(n),!!(32&n.__u),a),r.__v=n.__v,r.__.__k[r.__i]=r,Ta(i,r,a),n.__e=n.__=null,r.__e!=o&&xa(r)));xn.__r=0}function wa(e,t,r,n,o,i,a,s,c,l,u){var p,d,m,h,v,_,x,E=n&&n.__k||_a,y=t.length;for(c=Il(r,t,E,c,y),p=0;p<y;p++)(m=r.__k[p])!=null&&(d=m.__i==-1?Hr:E[m.__i]||Hr,m.__i=p,_=vo(e,m,d,o,i,a,s,c,l,u),h=m.__e,m.ref&&d.ref!=m.ref&&(d.ref&&bo(d.ref,null,m),u.push(m.ref,m.__c||h,m)),v==null&&h!=null&&(v=h),(x=!!(4&m.__u))||d.__k===m.__k?c=Ea(m,c,e,x):typeof m.type=="function"&&_!==void 0?c=_:h&&(c=h.nextSibling),m.__u&=-7);return r.__e=v,c}function Il(e,t,r,n,o){var i,a,s,c,l,u=r.length,p=u,d=0;for(e.__k=new Array(o),i=0;i<o;i++)(a=t[i])!=null&&typeof a!="boolean"&&typeof a!="function"?(c=i+d,(a=e.__k[i]=typeof a=="string"||typeof a=="number"||typeof a=="bigint"||a.constructor==String?bn(null,a,null,null,null):Rr(a)?bn(qe,{children:a},null,null,null):a.constructor==null&&a.__b>0?bn(a.type,a.props,a.key,a.ref?a.ref:null,a.__v):a).__=e,a.__b=e.__b+1,s=null,(l=a.__i=Rl(a,r,c,p))!=-1&&(p--,(s=r[l])&&(s.__u|=2)),s==null||s.__v==null?(l==-1&&(o>u?d--:o<u&&d++),typeof a.type!="function"&&(a.__u|=4)):l!=c&&(l==c-1?d--:l==c+1?d++:(l>c?d--:d++,a.__u|=4))):e.__k[i]=null;if(p)for(i=0;i<u;i++)(s=r[i])!=null&&!(2&s.__u)&&(s.__e==n&&(n=pr(s)),Oa(s,s));return n}function Ea(e,t,r,n){var o,i;if(typeof e.type=="function"){for(o=e.__k,i=0;o&&i<o.length;i++)o[i]&&(o[i].__=e,t=Ea(o[i],t,r,n));return t}e.__e!=t&&(n&&(t&&e.type&&!t.parentNode&&(t=pr(e)),r.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function $r(e,t){return t=t||[],e==null||typeof e=="boolean"||(Rr(e)?e.some(function(r){$r(r,t)}):t.push(e)),t}function Rl(e,t,r,n){var o,i,a,s=e.key,c=e.type,l=t[r],u=l!=null&&(2&l.__u)==0;if(l===null&&e.key==null||u&&s==l.key&&c==l.type)return r;if(n>(u?1:0)){for(o=r-1,i=r+1;o>=0||i<t.length;)if((l=t[a=o>=0?o--:i++])!=null&&!(2&l.__u)&&s==l.key&&c==l.type)return a}return-1}function Ni(e,t,r){t[0]=="-"?e.setProperty(t,r!=null?r:""):e[t]=r==null?"":typeof r!="number"||Pl.test(t)?r:r+"px"}function hn(e,t,r,n,o){var i,a;e:if(t=="style")if(typeof r=="string")e.style.cssText=r;else{if(typeof n=="string"&&(e.style.cssText=n=""),n)for(t in n)r&&t in r||Ni(e.style,t,"");if(r)for(t in r)n&&r[t]==n[t]||Ni(e.style,t,r[t])}else if(t[0]=="o"&&t[1]=="n")i=t!=(t=t.replace(ya,"$1")),a=t.toLowerCase(),t=a in e||t=="onFocusOut"||t=="onFocusIn"?a.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+i]=r,r?n?r.u=n.u:(r.u=mo,e.addEventListener(t,i?so:ao,i)):e.removeEventListener(t,i?so:ao,i);else{if(o=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=r!=null?r:"";break e}catch(s){}typeof r=="function"||(r==null||r===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&r==1?"":r))}}function Di(e){return function(t){if(this.l){var r=this.l[t.type+e];if(t.t==null)t.t=mo++;else if(t.t<r.u)return;return r(B.event?B.event(t):t)}}}function vo(e,t,r,n,o,i,a,s,c,l){var u,p,d,m,h,v,_,x,E,y,Z,ve,L,M,W,te,ue,le=t.type;if(t.constructor!=null)return null;128&r.__u&&(c=!!(32&r.__u),i=[s=t.__e=r.__e]),(u=B.__b)&&u(t);e:if(typeof le=="function")try{if(x=t.props,E="prototype"in le&&le.prototype.render,y=(u=le.contextType)&&n[u.__c],Z=u?y?y.props.value:u.__:n,r.__c?_=(p=t.__c=r.__c).__=p.__E:(E?t.__c=p=new le(x,Z):(t.__c=p=new lt(x,Z),p.constructor=le,p.render=Fl),y&&y.sub(p),p.props=x,p.state||(p.state={}),p.context=Z,p.__n=n,d=p.__d=!0,p.__h=[],p._sb=[]),E&&p.__s==null&&(p.__s=p.state),E&&le.getDerivedStateFromProps!=null&&(p.__s==p.state&&(p.__s=ht({},p.__s)),ht(p.__s,le.getDerivedStateFromProps(x,p.__s))),m=p.props,h=p.state,p.__v=t,d)E&&le.getDerivedStateFromProps==null&&p.componentWillMount!=null&&p.componentWillMount(),E&&p.componentDidMount!=null&&p.__h.push(p.componentDidMount);else{if(E&&le.getDerivedStateFromProps==null&&x!==m&&p.componentWillReceiveProps!=null&&p.componentWillReceiveProps(x,Z),!p.__e&&p.shouldComponentUpdate!=null&&p.shouldComponentUpdate(x,p.__s,Z)===!1||t.__v==r.__v){for(t.__v!=r.__v&&(p.props=x,p.state=p.__s,p.__d=!1),t.__e=r.__e,t.__k=r.__k,t.__k.some(function(De){De&&(De.__=t)}),ve=0;ve<p._sb.length;ve++)p.__h.push(p._sb[ve]);p._sb=[],p.__h.length&&a.push(p);break e}p.componentWillUpdate!=null&&p.componentWillUpdate(x,p.__s,Z),E&&p.componentDidUpdate!=null&&p.__h.push(function(){p.componentDidUpdate(m,h,v)})}if(p.context=Z,p.props=x,p.__P=e,p.__e=!1,L=B.__r,M=0,E){for(p.state=p.__s,p.__d=!1,L&&L(t),u=p.render(p.props,p.state,p.context),W=0;W<p._sb.length;W++)p.__h.push(p._sb[W]);p._sb=[]}else do p.__d=!1,L&&L(t),u=p.render(p.props,p.state,p.context),p.state=p.__s;while(p.__d&&++M<25);p.state=p.__s,p.getChildContext!=null&&(n=ht(ht({},n),p.getChildContext())),E&&!d&&p.getSnapshotBeforeUpdate!=null&&(v=p.getSnapshotBeforeUpdate(m,h)),te=u,u!=null&&u.type===qe&&u.key==null&&(te=Sa(u.props.children)),s=wa(e,Rr(te)?te:[te],t,r,n,o,i,a,s,c,l),p.base=t.__e,t.__u&=-161,p.__h.length&&a.push(p),_&&(p.__E=p.__=null)}catch(De){if(t.__v=null,c||i!=null)if(De.then){for(t.__u|=c?160:128;s&&s.nodeType==8&&s.nextSibling;)s=s.nextSibling;i[i.indexOf(s)]=null,t.__e=s}else{for(ue=i.length;ue--;)ho(i[ue]);co(t)}else t.__e=r.__e,t.__k=r.__k,De.then||co(t);B.__e(De,t,r)}else i==null&&t.__v==r.__v?(t.__k=r.__k,t.__e=r.__e):s=t.__e=jl(r.__e,t,r,n,o,i,a,c,l);return(u=B.diffed)&&u(t),128&t.__u?void 0:s}function co(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(co)}function Ta(e,t,r){for(var n=0;n<r.length;n++)bo(r[n],r[++n],r[++n]);B.__c&&B.__c(t,e),e.some(function(o){try{e=o.__h,o.__h=[],e.some(function(i){i.call(o)})}catch(i){B.__e(i,o.__v)}})}function Sa(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:Rr(e)?e.map(Sa):ht({},e)}function jl(e,t,r,n,o,i,a,s,c){var l,u,p,d,m,h,v,_=r.props,x=t.props,E=t.type;if(E=="svg"?o="http://www.w3.org/2000/svg":E=="math"?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),i!=null){for(l=0;l<i.length;l++)if((m=i[l])&&"setAttribute"in m==!!E&&(E?m.localName==E:m.nodeType==3)){e=m,i[l]=null;break}}if(e==null){if(E==null)return document.createTextNode(x);e=document.createElementNS(o,E,x.is&&x),s&&(B.__m&&B.__m(t,i),s=!1),i=null}if(E==null)_===x||s&&e.data==x||(e.data=x);else{if(i=i&&Sn.call(e.childNodes),_=r.props||Hr,!s&&i!=null)for(_={},l=0;l<e.attributes.length;l++)_[(m=e.attributes[l]).name]=m.value;for(l in _)if(m=_[l],l!="children"){if(l=="dangerouslySetInnerHTML")p=m;else if(!(l in x)){if(l=="value"&&"defaultValue"in x||l=="checked"&&"defaultChecked"in x)continue;hn(e,l,null,m,o)}}for(l in x)m=x[l],l=="children"?d=m:l=="dangerouslySetInnerHTML"?u=m:l=="value"?h=m:l=="checked"?v=m:s&&typeof m!="function"||_[l]===m||hn(e,l,m,_[l],o);if(u)s||p&&(u.__html==p.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(p&&(e.innerHTML=""),wa(t.type=="template"?e.content:e,Rr(d)?d:[d],t,r,n,E=="foreignObject"?"http://www.w3.org/1999/xhtml":o,i,a,i?i[0]:r.__k&&pr(r,0),s,c),i!=null)for(l=i.length;l--;)ho(i[l]);s||(l="value",E=="progress"&&h==null?e.removeAttribute("value"):h!=null&&(h!==e[l]||E=="progress"&&!h||E=="option"&&h!=_[l])&&hn(e,l,h,_[l],o),l="checked",v!=null&&v!=e[l]&&hn(e,l,v,_[l],o))}return e}function bo(e,t,r){try{if(typeof e=="function"){var n=typeof e.__u=="function";n&&e.__u(),n&&t==null||(e.__u=e(t))}else e.current=t}catch(o){B.__e(o,r)}}function Oa(e,t,r){var n,o;if(B.unmount&&B.unmount(e),(n=e.ref)&&(n.current&&n.current!=e.__e||bo(n,null,t)),(n=e.__c)!=null){if(n.componentWillUnmount)try{n.componentWillUnmount()}catch(i){B.__e(i,t)}n.base=n.__P=null}if(n=e.__k)for(o=0;o<n.length;o++)n[o]&&Oa(n[o],t,r||typeof e.type!="function");r||ho(e.__e),e.__c=e.__=e.__e=void 0}function Fl(e,t,r){return this.constructor(e,r)}function Ul(e,t,r){var n,o,i,a;t==document&&(t=document.documentElement),B.__&&B.__(e,t),o=(n=typeof r=="function")?null:r&&r.__k||t.__k,i=[],a=[],vo(t,e=(!n&&r||t).__k=kt(qe,null,[e]),o||Hr,Hr,t.namespaceURI,!n&&r?[r]:o?null:t.firstChild?Sn.call(t.childNodes):null,i,!n&&r?r:o?o.__e:t.firstChild,n,a),Ta(i,e,a)}Sn=_a.slice,B={__e:function(e,t,r,n){for(var o,i,a;t=t.__;)if((o=t.__c)&&!o.__)try{if((i=o.constructor)&&i.getDerivedStateFromError!=null&&(o.setState(i.getDerivedStateFromError(e)),a=o.__d),o.componentDidCatch!=null&&(o.componentDidCatch(e,n||{}),a=o.__d),a)return o.__E=o}catch(s){e=s}throw e}},ha=0,va=function(e){return e!=null&&e.constructor==null},lt.prototype.setState=function(e,t){var r;r=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=ht({},this.state),typeof e=="function"&&(e=e(ht({},r),this.props)),e&&ht(r,e),e!=null&&this.__v&&(t&&this._sb.push(t),Ui(this))},lt.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Ui(this))},lt.prototype.render=qe,Vt=[],ba=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,ga=function(e,t){return e.__v.__b-t.__v.__b},xn.__r=0,ya=/(PointerCapture)$|Capture$/i,mo=0,ao=Di(!1),so=Di(!0),$l=0;var Pr,ge,no,Wi,Ir=0,La=[],Ee=B,Vi=Ee.__b,zi=Ee.__r,qi=Ee.diffed,Ki=Ee.__c,Bi=Ee.unmount,Gi=Ee.__;function go(e,t){Ee.__h&&Ee.__h(ge,e,Ir||t),Ir=0;var r=ge.__H||(ge.__H={__:[],__h:[]});return e>=r.__.length&&r.__.push({}),r.__[e]}function wn(e){return Ir=1,Nl(ka,e)}function Nl(e,t,r){var n=go(Pr++,2);if(n.t=e,!n.__c&&(n.__=[r?r(t):ka(void 0,t),function(s){var c=n.__N?n.__N[0]:n.__[0],l=n.t(c,s);c!==l&&(n.__N=[l,n.__[1]],n.__c.setState({}))}],n.__c=ge,!ge.__f)){var o=function(s,c,l){if(!n.__c.__H)return!0;var u=n.__c.__H.__.filter(function(d){return!!d.__c});if(u.every(function(d){return!d.__N}))return!i||i.call(this,s,c,l);var p=n.__c.props!==s;return u.forEach(function(d){if(d.__N){var m=d.__[0];d.__=d.__N,d.__N=void 0,m!==d.__[0]&&(p=!0)}}),i&&i.call(this,s,c,l)||p};ge.__f=!0;var i=ge.shouldComponentUpdate,a=ge.componentWillUpdate;ge.componentWillUpdate=function(s,c,l){if(this.__e){var u=i;i=void 0,o(s,c,l),i=u}a&&a.call(this,s,c,l)},ge.shouldComponentUpdate=o}return n.__N||n.__}function vt(e,t){var r=go(Pr++,3);!Ee.__s&&Ma(r.__H,t)&&(r.__=e,r.u=t,ge.__H.__h.push(r))}function qt(e){return Ir=5,mr(function(){return{current:e}},[])}function mr(e,t){var r=go(Pr++,7);return Ma(r.__H,t)&&(r.__=e(),r.__H=t,r.__h=e),r.__}function Dl(e,t){return Ir=8,mr(function(){return e},t)}function Wl(){for(var e;e=La.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(gn),e.__H.__h.forEach(lo),e.__H.__h=[]}catch(t){e.__H.__h=[],Ee.__e(t,e.__v)}}Ee.__b=function(e){ge=null,Vi&&Vi(e)},Ee.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Gi&&Gi(e,t)},Ee.__r=function(e){zi&&zi(e),Pr=0;var t=(ge=e.__c).__H;t&&(no===ge?(t.__h=[],ge.__h=[],t.__.forEach(function(r){r.__N&&(r.__=r.__N),r.u=r.__N=void 0})):(t.__h.forEach(gn),t.__h.forEach(lo),t.__h=[],Pr=0)),no=ge},Ee.diffed=function(e){qi&&qi(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(La.push(t)!==1&&Wi===Ee.requestAnimationFrame||((Wi=Ee.requestAnimationFrame)||Vl)(Wl)),t.__H.__.forEach(function(r){r.u&&(r.__H=r.u),r.u=void 0})),no=ge=null},Ee.__c=function(e,t){t.some(function(r){try{r.__h.forEach(gn),r.__h=r.__h.filter(function(n){return!n.__||lo(n)})}catch(n){t.some(function(o){o.__h&&(o.__h=[])}),t=[],Ee.__e(n,r.__v)}}),Ki&&Ki(e,t)},Ee.unmount=function(e){Bi&&Bi(e);var t,r=e.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{gn(n)}catch(o){t=o}}),r.__H=void 0,t&&Ee.__e(t,r.__v))};var Yi=typeof requestAnimationFrame=="function";function Vl(e){var t,r=function(){clearTimeout(n),Yi&&cancelAnimationFrame(t),setTimeout(e)},n=setTimeout(r,35);Yi&&(t=requestAnimationFrame(r))}function gn(e){var t=ge,r=e.__c;typeof r=="function"&&(e.__c=void 0,r()),ge=t}function lo(e){var t=ge;e.__c=e.__(),ge=t}function Ma(e,t){return!e||e.length!==t.length||t.some(function(r,n){return r!==e[n]})}function ka(e,t){return typeof t=="function"?t(e):t}function zl(e,t){for(var r in t)e[r]=t[r];return e}function Ji(e,t){for(var r in e)if(r!=="__source"&&!(r in t))return!0;for(var n in t)if(n!=="__source"&&e[n]!==t[n])return!0;return!1}function Xi(e,t){this.props=e,this.context=t}(Xi.prototype=new lt).isPureReactComponent=!0,Xi.prototype.shouldComponentUpdate=function(e,t){return Ji(this.props,e)||Ji(this.state,t)};var Zi=B.__b;B.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),Zi&&Zi(e)};var Cw=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,ql=B.__e;B.__e=function(e,t,r,n){if(e.then){for(var o,i=t;i=i.__;)if((o=i.__c)&&o.__c)return t.__e==null&&(t.__e=r.__e,t.__k=r.__k),o.__c(e,t)}ql(e,t,r,n)};var Qi=B.unmount;function Aa(e,t,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(n){typeof n.__c=="function"&&n.__c()}),e.__c.__H=null),(e=zl({},e)).__c!=null&&(e.__c.__P===r&&(e.__c.__P=t),e.__c.__e=!0,e.__c=null),e.__k=e.__k&&e.__k.map(function(n){return Aa(n,t,r)})),e}function Ca(e,t,r){return e&&r&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(n){return Ca(n,t,r)}),e.__c&&e.__c.__P===t&&(e.__e&&r.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=r)),e}function oo(){this.__u=0,this.o=null,this.__b=null}function Ha(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function vn(){this.i=null,this.l=null}B.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),Qi&&Qi(e)},(oo.prototype=new lt).__c=function(e,t){var r=t.__c,n=this;n.o==null&&(n.o=[]),n.o.push(r);var o=Ha(n.__v),i=!1,a=function(){i||(i=!0,r.__R=null,o?o(s):s())};r.__R=a;var s=function(){if(!--n.__u){if(n.state.__a){var c=n.state.__a;n.__v.__k[0]=Ca(c,c.__c.__P,c.__c.__O)}var l;for(n.setState({__a:n.__b=null});l=n.o.pop();)l.forceUpdate()}};n.__u++||32&t.__u||n.setState({__a:n.__b=n.__v.__k[0]}),e.then(a,a)},oo.prototype.componentWillUnmount=function(){this.o=[]},oo.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=Aa(this.__b,r,n.__O=n.__P)}this.__b=null}var o=t.__a&&kt(qe,null,e.fallback);return o&&(o.__u&=-33),[kt(qe,null,t.__a?null:e.children),o]};var ea=function(e,t,r){if(++r[1]===r[0]&&e.l.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.l.size))for(r=e.i;r;){for(;r.length>3;)r.pop()();if(r[1]<r[0])break;e.i=r=r[2]}};(vn.prototype=new lt).__a=function(e){var t=this,r=Ha(t.__v),n=t.l.get(e);return n[0]++,function(o){var i=function(){t.props.revealOrder?(n.push(o),ea(t,e,n)):o()};r?r(i):i()}},vn.prototype.render=function(e){this.i=null,this.l=new Map;var t=$r(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var r=t.length;r--;)this.l.set(t[r],this.i=[1,0,this.i]);return e.children},vn.prototype.componentDidUpdate=vn.prototype.componentDidMount=function(){var e=this;this.l.forEach(function(t,r){ea(e,r,t)})};var Kl=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,Bl=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Gl=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Yl=/[A-Z0-9]/g,Jl=typeof document<"u",Xl=function(e){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(e)};lt.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(lt.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var ta=B.event;function Zl(){}function Ql(){return this.cancelBubble}function eu(){return this.defaultPrevented}B.event=function(e){return ta&&(e=ta(e)),e.persist=Zl,e.isPropagationStopped=Ql,e.isDefaultPrevented=eu,e.nativeEvent=e};var $a,tu={enumerable:!1,configurable:!0,get:function(){return this.class}},ra=B.vnode;B.vnode=function(e){typeof e.type=="string"&&(function(t){var r=t.props,n=t.type,o={},i=n.indexOf("-")===-1;for(var a in r){var s=r[a];if(!(a==="value"&&"defaultValue"in r&&s==null||Jl&&a==="children"&&n==="noscript"||a==="class"||a==="className")){var c=a.toLowerCase();a==="defaultValue"&&"value"in r&&r.value==null?a="value":a==="download"&&s===!0?s="":c==="translate"&&s==="no"?s=!1:c[0]==="o"&&c[1]==="n"?c==="ondoubleclick"?a="ondblclick":c!=="onchange"||n!=="input"&&n!=="textarea"||Xl(r.type)?c==="onfocus"?a="onfocusin":c==="onblur"?a="onfocusout":Gl.test(a)&&(a=c):c=a="oninput":i&&Bl.test(a)?a=a.replace(Yl,"-$&").toLowerCase():s===null&&(s=void 0),c==="oninput"&&o[a=c]&&(a="oninputCapture"),o[a]=s}}n=="select"&&o.multiple&&Array.isArray(o.value)&&(o.value=$r(r.children).forEach(function(l){l.props.selected=o.value.indexOf(l.props.value)!=-1})),n=="select"&&o.defaultValue!=null&&(o.value=$r(r.children).forEach(function(l){l.props.selected=o.multiple?o.defaultValue.indexOf(l.props.value)!=-1:o.defaultValue==l.props.value})),r.class&&!r.className?(o.class=r.class,Object.defineProperty(o,"className",tu)):(r.className&&!r.class||r.class&&r.className)&&(o.class=o.className=r.className),t.props=o})(e),e.$$typeof=Kl,ra&&ra(e)};var na=B.__r;B.__r=function(e){na&&na(e),$a=e.__c};var oa=B.diffed;B.diffed=function(e){oa&&oa(e);var t=e.props,r=e.__e;r!=null&&e.type==="textarea"&&"value"in t&&t.value!==r.value&&(r.value=t.value==null?"":t.value),$a=null};function Pa(e){let t=qt(e);return t.current=e,mr(()=>Object.freeze({get current(){return t.current}}),[])}var ru=typeof globalThis<"u"&&typeof navigator<"u"&&typeof document<"u";function nu(e,...t){var r;(r=e==null?void 0:e.addEventListener)==null||r.call(e,...t)}function ou(e,...t){var r;(r=e==null?void 0:e.removeEventListener)==null||r.call(e,...t)}var iu=(e,t)=>Object.hasOwn(e,t),au=()=>!0,su=()=>!1;function cu(e=!1){let t=qt(e),r=Dl(()=>t.current,[]);return vt(()=>(t.current=!0,()=>{t.current=!1}),[]),r}function lu(e,...t){let r=cu(),n=Pa(t[1]),o=mr(()=>function(...i){r()&&(typeof n.current=="function"?n.current.apply(this,i):typeof n.current.handleEvent=="function"&&n.current.handleEvent.apply(this,i))},[]);vt(()=>{let i=uu(e)?e.current:e;if(!i)return;let a=t.slice(2);return nu(i,t[0],o,...a),()=>{ou(i,t[0],o,...a)}},[e,t[0]])}function uu(e){return e!==null&&typeof e=="object"&&iu(e,"current")}var pu=e=>typeof e=="function"?e:typeof e=="string"?t=>t.key===e:e?au:su,fu=ru?globalThis:null;function Ia(e,t,r=[],n={}){let{event:o="keydown",target:i=fu,eventOptions:a}=n,s=Pa(t),c=mr(()=>{let l=pu(e);return function(u){l(u)&&s.current.call(this,u)}},r);lu(i,o,c,a)}function Ra(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(r=Ra(e[t]))&&(n&&(n+=" "),n+=r)}else for(r in e)e[r]&&(n&&(n+=" "),n+=r);return n}function mu(){for(var e,t,r=0,n="",o=arguments.length;r<o;r++)(e=arguments[r])&&(t=Ra(e))&&(n&&(n+=" "),n+=t);return n}var Kt=mu,du=Symbol.for("preact-signals");function On(){if(Mt>1)Mt--;else{for(var e,t=!1;Cr!==void 0;){var r=Cr;for(Cr=void 0,uo++;r!==void 0;){var n=r.o;if(r.o=void 0,r.f&=-3,!(8&r.f)&&Ua(r))try{r.c()}catch(o){t||(e=o,t=!0)}r=n}}if(uo=0,Mt--,t)throw e}}function hu(e){if(Mt>0)return e();Mt++;try{return e()}finally{On()}}var ce=void 0;function ja(e){var t=ce;ce=void 0;try{return e()}finally{ce=t}}var Cr=void 0,Mt=0,uo=0,En=0;function Fa(e){if(ce!==void 0){var t=e.n;if(t===void 0||t.t!==ce)return t={i:0,S:e,p:ce.s,n:void 0,t:ce,e:void 0,x:void 0,r:t},ce.s!==void 0&&(ce.s.n=t),ce.s=t,e.n=t,32&ce.f&&e.S(t),t;if(t.i===-1)return t.i=0,t.n!==void 0&&(t.n.p=t.p,t.p!==void 0&&(t.p.n=t.n),t.p=ce.s,t.n=void 0,ce.s.n=t,ce.s=t),t}}function Ce(e,t){this.v=e,this.i=0,this.n=void 0,this.t=void 0,this.W=t==null?void 0:t.watched,this.Z=t==null?void 0:t.unwatched,this.name=t==null?void 0:t.name}Ce.prototype.brand=du;Ce.prototype.h=function(){return!0};Ce.prototype.S=function(e){var t=this,r=this.t;r!==e&&e.e===void 0&&(e.x=r,this.t=e,r!==void 0?r.e=e:ja(function(){var n;(n=t.W)==null||n.call(t)}))};Ce.prototype.U=function(e){var t=this;if(this.t!==void 0){var r=e.e,n=e.x;r!==void 0&&(r.x=n,e.e=void 0),n!==void 0&&(n.e=r,e.x=void 0),e===this.t&&(this.t=n,n===void 0&&ja(function(){var o;(o=t.Z)==null||o.call(t)}))}};Ce.prototype.subscribe=function(e){var t=this;return Bt(function(){var r=t.value,n=ce;ce=void 0;try{e(r)}finally{ce=n}},{name:"sub"})};Ce.prototype.valueOf=function(){return this.value};Ce.prototype.toString=function(){return this.value+""};Ce.prototype.toJSON=function(){return this.value};Ce.prototype.peek=function(){var e=ce;ce=void 0;try{return this.value}finally{ce=e}};Object.defineProperty(Ce.prototype,"value",{get:function(){var e=Fa(this);return e!==void 0&&(e.i=this.i),this.v},set:function(e){if(e!==this.v){if(uo>100)throw new Error("Cycle detected");this.v=e,this.i++,En++,Mt++;try{for(var t=this.t;t!==void 0;t=t.x)t.t.N()}finally{On()}}}});function At(e,t){return new Ce(e,t)}function Ua(e){for(var t=e.s;t!==void 0;t=t.n)if(t.S.i!==t.i||!t.S.h()||t.S.i!==t.i)return!0;return!1}function Na(e){for(var t=e.s;t!==void 0;t=t.n){var r=t.S.n;if(r!==void 0&&(t.r=r),t.S.n=t,t.i=-1,t.n===void 0){e.s=t;break}}}function Da(e){for(var t=e.s,r=void 0;t!==void 0;){var n=t.p;t.i===-1?(t.S.U(t),n!==void 0&&(n.n=t.n),t.n!==void 0&&(t.n.p=n)):r=t,t.S.n=t.r,t.r!==void 0&&(t.r=void 0),t=n}e.s=r}function Gt(e,t){Ce.call(this,void 0),this.x=e,this.s=void 0,this.g=En-1,this.f=4,this.W=t==null?void 0:t.watched,this.Z=t==null?void 0:t.unwatched,this.name=t==null?void 0:t.name}Gt.prototype=new Ce;Gt.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===En))return!0;if(this.g=En,this.f|=1,this.i>0&&!Ua(this))return this.f&=-2,!0;var e=ce;try{Na(this),ce=this;var t=this.x();(16&this.f||this.v!==t||this.i===0)&&(this.v=t,this.f&=-17,this.i++)}catch(r){this.v=r,this.f|=16,this.i++}return ce=e,Da(this),this.f&=-2,!0};Gt.prototype.S=function(e){if(this.t===void 0){this.f|=36;for(var t=this.s;t!==void 0;t=t.n)t.S.S(t)}Ce.prototype.S.call(this,e)};Gt.prototype.U=function(e){if(this.t!==void 0&&(Ce.prototype.U.call(this,e),this.t===void 0)){this.f&=-33;for(var t=this.s;t!==void 0;t=t.n)t.S.U(t)}};Gt.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var e=this.t;e!==void 0;e=e.x)e.t.N()}};Object.defineProperty(Gt.prototype,"value",{get:function(){if(1&this.f)throw new Error("Cycle detected");var e=Fa(this);if(this.h(),e!==void 0&&(e.i=this.i),16&this.f)throw this.v;return this.v}});function ia(e,t){return new Gt(e,t)}function Wa(e){var t=e.u;if(e.u=void 0,typeof t=="function"){Mt++;var r=ce;ce=void 0;try{t()}catch(n){throw e.f&=-2,e.f|=8,yo(e),n}finally{ce=r,On()}}}function yo(e){for(var t=e.s;t!==void 0;t=t.n)t.S.U(t);e.x=void 0,e.s=void 0,Wa(e)}function vu(e){if(ce!==this)throw new Error("Out-of-order effect");Da(this),ce=e,this.f&=-2,8&this.f&&yo(this),On()}function dr(e,t){this.x=e,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32,this.name=t==null?void 0:t.name}dr.prototype.c=function(){var e=this.S();try{if(8&this.f||this.x===void 0)return;var t=this.x();typeof t=="function"&&(this.u=t)}finally{e()}};dr.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,Wa(this),Na(this),Mt++;var e=ce;return ce=this,vu.bind(this,e)};dr.prototype.N=function(){2&this.f||(this.f|=2,this.o=Cr,Cr=this)};dr.prototype.d=function(){this.f|=8,1&this.f||yo(this)};dr.prototype.dispose=function(){this.d()};function Bt(e,t){var r=new dr(e,t);try{r.c()}catch(o){throw r.d(),o}var n=r.d.bind(r);return n[Symbol.dispose]=n,n}var Va,_o,io,za=[];Bt(function(){Va=this.N})();function hr(e,t){B[e]=t.bind(null,B[e]||function(){})}function Tn(e){io&&io(),io=e&&e.S()}function qa(e){var t=this,r=e.data,n=gu(r);n.value=r;var o=mr(function(){for(var s=t,c=t.__v;c=c.__;)if(c.__c){c.__c.__$f|=4;break}var l=ia(function(){var m=n.value.value;return m===0?0:m===!0?"":m||""}),u=ia(function(){return!Array.isArray(l.value)&&!va(l.value)}),p=Bt(function(){if(this.N=Ka,u.value){var m=l.value;s.__v&&s.__v.__e&&s.__v.__e.nodeType===3&&(s.__v.__e.data=m)}}),d=t.__$u.d;return t.__$u.d=function(){p(),d.call(this)},[u,l]},[]),i=o[0],a=o[1];return i.value?a.peek():a.value}qa.displayName="ReactiveTextNode";Object.defineProperties(Ce.prototype,{constructor:{configurable:!0,value:void 0},type:{configurable:!0,value:qa},props:{configurable:!0,get:function(){return{data:this}}},__b:{configurable:!0,value:1}});hr("__b",function(e,t){if(typeof t.type=="function"&&typeof window<"u"&&window.__PREACT_SIGNALS_DEVTOOLS__&&window.__PREACT_SIGNALS_DEVTOOLS__.exitComponent(),typeof t.type=="string"){var r,n=t.props;for(var o in n)if(o!=="children"){var i=n[o];i instanceof Ce&&(r||(t.__np=r={}),r[o]=i,n[o]=i.peek())}}e(t)});hr("__r",function(e,t){if(typeof t.type=="function"&&typeof window<"u"&&window.__PREACT_SIGNALS_DEVTOOLS__&&window.__PREACT_SIGNALS_DEVTOOLS__.enterComponent(t),t.type!==qe){Tn();var r,n=t.__c;n&&(n.__$f&=-2,(r=n.__$u)===void 0&&(n.__$u=r=(function(o){var i;return Bt(function(){i=this}),i.c=function(){n.__$f|=1,n.setState({})},i})())),_o=n,Tn(r)}e(t)});hr("__e",function(e,t,r,n){typeof window<"u"&&window.__PREACT_SIGNALS_DEVTOOLS__&&window.__PREACT_SIGNALS_DEVTOOLS__.exitComponent(),Tn(),_o=void 0,e(t,r,n)});hr("diffed",function(e,t){typeof t.type=="function"&&typeof window<"u"&&window.__PREACT_SIGNALS_DEVTOOLS__&&window.__PREACT_SIGNALS_DEVTOOLS__.exitComponent(),Tn(),_o=void 0;var r;if(typeof t.type=="string"&&(r=t.__e)){var n=t.__np,o=t.props;if(n){var i=r.U;if(i)for(var a in i){var s=i[a];s!==void 0&&!(a in n)&&(s.d(),i[a]=void 0)}else i={},r.U=i;for(var c in n){var l=i[c],u=n[c];l===void 0?(l=bu(r,c,u,o),i[c]=l):l.o(u,o)}}}e(t)});function bu(e,t,r,n){var o=t in e&&e.ownerSVGElement===void 0,i=At(r);return{o:function(a,s){i.value=a,n=s},d:Bt(function(){this.N=Ka;var a=i.value.value;n[t]!==a&&(n[t]=a,o?e[t]=a:a?e.setAttribute(t,a):e.removeAttribute(t))})}}hr("unmount",function(e,t){if(typeof t.type=="string"){var r=t.__e;if(r){var n=r.U;if(n){r.U=void 0;for(var o in n){var i=n[o];i&&i.d()}}}}else{var a=t.__c;if(a){var s=a.__$u;s&&(a.__$u=void 0,s.d())}}e(t)});hr("__h",function(e,t,r,n){(n<3||n===9)&&(t.__$f|=2),e(t,r,n)});lt.prototype.shouldComponentUpdate=function(e,t){var r=this.__$u,n=r&&r.s!==void 0;for(var o in t)return!0;if(this.__f||typeof this.u=="boolean"&&this.u===!0){var i=2&this.__$f;if(!(n||i||4&this.__$f)||1&this.__$f)return!0}else if(!(n||4&this.__$f)||3&this.__$f)return!0;for(var a in e)if(a!=="__source"&&e[a]!==this.props[a])return!0;for(var s in this.props)if(!(s in e))return!0;return!1};function gu(e,t){return wn(function(){return At(e,t)})[0]}var yu=function(e){queueMicrotask(function(){queueMicrotask(e)})};function _u(){hu(function(){for(var e;e=za.shift();)Va.call(e)})}function Ka(){za.push(this)===1&&(B.requestAnimationFrame||yu)(_u)}var po=[0];for(let e=0;e<32;e++)po.push(po[e]|1<<e);function xu(e){return new Uint32Array(e)}var aa=class{constructor(e,t=xu(Math.ceil(e/32))){this.size=e,this.data=t}get(e){return this.data[e>>>5]>>>e&1}set(e){this.data[e>>>5]|=1<<(e&31)}forEach(e){let t=this.size&31;for(let r=0;r<this.data.length;r++){if(this.data[r]===0)continue;let n=this.data[r];t&&r===this.data.length-1&&(n=n&po[t]);for(let o=0,i=32-Math.clz32(n);o<i;o++)n&1<<o&&e((r<<5)+o)}}};function wu(e){fr.value=e,e.items.find(t=>{var r;return(r=t.tags)==null?void 0:r.length})&&(matchMedia("(max-width: 768px)").matches||Ba())}function zt(){et.value=He(k({},et.value),{hideSearch:!et.value.hideSearch})}function Ba(){et.value=He(k({},et.value),{hideFilters:!et.value.hideFilters})}function yn(){return et.value.selectedItem}function fo(e){et.value=He(k({},et.value),{selectedItem:e})}function Eu(){var e,t;return(t=(e=fr.value)==null?void 0:e.items)!=null?t:[]}function Ln(){return typeof Oe.value.input=="string"?Oe.value.input:""}function Ga(e){let t=Ya();e.length&&!t.length?Oe.value=He(k({},Oe.value),{page:void 0,input:e}):!e.length&&t.length?Oe.value=He(k({},Oe.value),{page:void 0,input:{type:"operator",data:{operator:"not",operands:[]}}}):Oe.value=He(k({},Oe.value),{page:void 0,input:e})}function Tu(){typeof ct.value.pagination.next<"u"&&(Oe.value=He(k({},Oe.value),{page:ct.value.pagination.next}))}function Su(e){let t=Oe.value.filter.input;if("type"in t&&t.type==="operator"){for(let r of t.data.operands)if("type"in r&&r.type==="value"&&typeof r.data.value=="string"&&r.data.value===e)return!0}return!1}function Ya(){let e=Oe.value.filter.input,t=[];if("type"in e&&e.type==="operator")for(let r of e.data.operands)"type"in r&&r.type==="value"&&typeof r.data.value=="string"&&t.push(r.data.value);return t}function Ou(e){let t=Oe.value.filter.input,r=[];if("type"in t&&t.type==="operator")for(let n of t.data.operands)"type"in n&&n.type==="value"&&typeof n.data.value=="string"&&r.push(n.data.value);if(r.includes(e)){let n=r.indexOf(e);n>-1&&r.splice(n,1)}else r.push(e);Oe.value=He(k({},Oe.value),{page:void 0,filter:He(k({},Oe.value.filter),{input:{type:"operator",data:{operator:"and",operands:r.map(n=>({type:"value",data:{field:"tags",value:n}}))}}})}),Ga(Ln())}function Lu(){return ct.value.items}function Mu(){return ct.value.total}function ku(){var e;for(let t of(e=ct.value.aggregations)!=null?e:[])if(t.type==="term")return t.data.value;return[]}function ur(){return et.value.hideSearch}function Au(){return et.value.hideFilters}function Ja(){var e;return(e=Xa.value.highlight)!=null?e:!1}var et=At({hideSearch:!0,hideFilters:!0,selectedItem:0}),Xa=At({}),fr=At(),sa=At(),Oe=At({input:"",filter:{input:{type:"operator",data:{operator:"and",operands:[]}},aggregation:{input:[{type:"term",data:{field:"tags"}}]}}}),ct=At({items:[],query:{select:{documents:new aa(0),terms:new aa(0)},values:[]},pagination:{total:0}});function Cu(e,t,r){for(let n=0;t<r;){switch(n=n<<8^32|e.charCodeAt(++t),n){case 97:case 98:case 99:case 101:case 104:case 105:case 108:case 109:case 112:case 115:case 116:case 119:case 24946:case 25185:case 25455:case 25965:case 26989:case 26990:case 27753:case 28005:case 28769:case 29551:case 29810:case 30562:case 6386277:case 6447475:case 6647138:case 6909552:case 7104878:case 7169396:case 7364978:case 7565173:case 7631457:case 1701667429:case 1768845429:case 1869967971:case 1885434465:case 1936684402:case 1953653091:continue;case 25202:case 26738:case 6516588:case 6909287:case 7823986:case 1634885997:case 1634887009:case 1650553701:case 1818848875:case 1835165028:case 1835365473:case 1852863860:case 1918985067:case 1970430821:switch(e.charCodeAt(++t)){case 9:case 10:case 32:case 47:case 62:return!0}}break}return!1}function Hu(e,t,r=0,n=e.length){let o=0,i=r;for(let a=0;i<n;i++)switch(a=e.charCodeAt(i),a){case 60:i>r&&t(0,o,r,r=i);continue;case 62:e.charCodeAt(r+1)===47?t(2,--o,r,r=i+1):Cu(e,r,n)?t(3,o,r,r=i+1):t(1,o++,r,r=i+1)}i>r&&t(0,o,r,i)}function $u(e,t=0,r=e.length){let n=++t;e:for(let l=0;n<r;n++)switch(l=e.charCodeAt(n),l){case 9:case 10:case 32:case 62:break e}let o=e.slice(t,t=n),i=[],a=0,s=0,c=0;for(let l=0;n<r;n++){let u=e.charCodeAt(n);switch(a){case 0:switch(u){case 9:case 10:case 32:t===n?t++:(s=1,a=1);break;case 61:s=1,a=2;break;case 47:t++;case 62:t<n&&(s=1);break}break;case 1:switch(u){case 9:case 10:case 32:continue;case 61:a=2,t=n+1;continue;default:a=0,t=n,l++}continue;case 2:switch(u){case 9:case 10:case 32:t===n?t++:c===0&&(s=2,a=0);break;case 34:case 39:switch(c){case 0:c=u,t=n+1;continue;case u:s=2,a=0,c=0}break;case 62:t<n&&(s=2);break}}switch(s){case 1:i[l]=[e.slice(t,n),""],s=0,t=n+1;break;case 2:i[l++][1]=e.slice(t,n),s=0,t=n+1;break}}return{tag:o,attrs:i.length?Object.fromEntries(i):null}}function Pu(e,t,r){return e.slice(t,r)}function Iu(e){return(t,r,n,o)=>{let i=[],a=[],{onElement:s,onText:c=Pu}=typeof r=="function"?{onElement:r}:r,l=0,u=0;return e(t,(p,d,m,h)=>{if(p===0)i[l++]=c(t,m,h),a[u++]={value:null,depth:d};else if(p&1&&(a[u++]={value:$u(t,m,h),depth:d}),p&2)for(let v=0;u>=0;v++){let{value:_,depth:x}=a[--u];if(x>d)continue;let E=i.slice(l-=v,l+v);i[l++]=s(_,E),u++;break}},n,o),i.slice(0,l)}}function Ru(e){return e.replace(/[&<>]/g,t=>{switch(t.charCodeAt(0)){case 38:return"&";case 60:return"<";case 62:return">"}})}function _n(e){return e.replace(/&(amp|[lg]t);/g,t=>{switch(t.charCodeAt(1)){case 97:return"&";case 108:return"<";case 103:return">"}})}function ju(e,t){return{start:e.start+t,end:e.end+t,value:e.value}}function Fu(e,t,r){return e.slice(t,r)}function Uu(e){let{onHighlight:t,onText:r=Fu}=typeof e=="function"?{onHighlight:e}:e;return(n,o,i=0,a=n.length)=>{var l;let s=[],c=(l=o==null?void 0:o.ranges)!=null?l:[];for(let u=0,p=i;u<c.length;u++){let d=c[u].start;if(d>a)break;let m=c[u].end;if(m<p)continue;d=Math.max(d,i),m=Math.min(m,a),d>i&&s.push(r(n,i,d));let{value:h}=c[u];s.push(t(n,{start:d,end:i=m,value:h}))}return i<a&&s.push(r(n,i,a)),s}}var Nu={fuzzy:"m"},Du=0;function N(e,t,r,n,o,i){t||(t={});var a,s,c=t;if("ref"in c)for(s in c={},t)s=="ref"?a=t[s]:c[s]=t[s];var l={type:e,props:c,key:r,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Du,__i:-1,__u:0,__source:o,__self:i};if(typeof e=="function"&&(a=e.defaultProps))for(s in a)c[s]===void 0&&(c[s]=a[s]);return B.vnode&&B.vnode(l),l}var Za=Iu(Hu),Qa=Uu({onText(e,t,r){return _n(e.slice(t,r))},onHighlight(e,{start:t,end:r,value:n}){let o=Math.min(r,t+n);return t===r?null:(n===-1&&(o=r),N("mark",{className:Kt({[Nu.fuzzy]:n===-1}),children:[N("u",{children:_n(e.slice(t,o))}),_n(e.slice(o,r))]}))}}),Wu=new Set(["p","pre","li","ul","ol","div"]),Vu=new Set(["code","span","sup","sub","em","strong","b","i","kbd","samp","mark","u","a"]);function zu(e){return e.filter(t=>t!==null&&typeof t<"u"&&t!==!1&&!(typeof t=="string"&&t.trim().length===0))}function es(e,t){let r=Za(e,{onElement(n,o){return kt(n.tag,n.attrs,...o)},onText(n,o,i){return Qa(n,t==null?void 0:t.value.highlight,o,i)}});return N(qe,{children:r})}function qu(e,t){var n;let r=[];for(let o=0,i=0;o<e.length;o++){let a=[];if((n=t==null?void 0:t.value.highlight)!=null&&n.ranges)for(let s of t.value.highlight.ranges)a.push(ju(s,-i));r.push(es(e[o],He(k({},t),{value:He(k({},t==null?void 0:t.value),{highlight:{ranges:a}})}))),i+=e[o].length}return r}function Ku(e,t,r=320){var u,p,d;let n=(u=t==null?void 0:t.value.highlight)==null?void 0:u.ranges.find(m=>m.start<m.end),o=Math.floor(r*.25),i=Math.floor(r*1.75),a=n?Math.max(0,n.start-o):0,s=n?Math.min(e.length,n.end+i):Math.min(e.length,2*r),c=[];for(let m of(d=(p=t==null?void 0:t.value.highlight)==null?void 0:p.ranges)!=null?d:[])m.end<=a||m.start>=s||c.push(He(k({},m),{start:Math.max(m.start,a),end:Math.min(m.end,s)}));let l=Za(e,{onElement(m,h){var _;let v=zu(h);if(v.length!==0)return Vu.has(m.tag)?kt(m.tag,(_=m.attrs)!=null?_:{},...v):m.tag==="li"?N(qe,{children:["\u2013 ",v," "]}):Wu.has(m.tag)?N(qe,{children:[" ",v," "]}):N(qe,{children:v})},onText(m,h,v){let _=Math.max(h,a),x=Math.min(v,s);if(!(_>=x))return Qa(m,{ranges:c},_,x)}});return N(qe,{children:[a>0&&"...",l]})}function ts(e,t={highlight:!0}){Xa.value=t;let r=new Worker(e);r.onmessage=n=>{let o=n.data;switch(o.type){case 1:sa.value=!0;break;case 3:typeof o.data.pagination.prev<"u"?ct.value=He(k({},ct.value),{pagination:o.data.pagination,items:[...ct.value.items,...o.data.items]}):(ct.value=o.data,fo(0));break}},Bt(()=>{fr.value&&r.postMessage({type:0,data:fr.value})}),Bt(()=>{sa.value&&r.postMessage({type:2,data:Oe.value})})}var ca={container:"p",hidden:"v"};function Bu(e){return N("div",{class:Kt(ca.container,{[ca.hidden]:e.hidden}),onClick:()=>zt()})}var la={container:"r",disabled:"c"};function ua(e){return N("button",{class:Kt(la.container,{[la.disabled]:!e.onClick}),onClick:e.onClick,children:e.children})}var pa=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Gu=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,n)=>n?n.toUpperCase():r.toLowerCase()),fa=e=>{let t=Gu(e);return t.charAt(0).toUpperCase()+t.slice(1)},Yu=(...e)=>e.filter((t,r,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===r).join(" ").trim(),Ju={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},Xu=c=>{var l=c,{color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:n,children:o,iconNode:i,class:a=""}=l,s=xr(l,["color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","class"]);return kt("svg",k(He(k({},Ju),{width:String(t),height:t,stroke:e,"stroke-width":n?Number(r)*24/Number(t):r,class:["lucide",a].join(" ")}),s),[...i.map(([u,p])=>kt(u,p)),...$r(o)])},rs=(e,t)=>{let r=a=>{var s=a,{class:n="",children:o}=s,i=xr(s,["class","children"]);return kt(Xu,He(k({},i),{iconNode:t,class:Yu(`lucide-${pa(fa(e))}`,`lucide-${pa(e)}`,n)}),o)};return r.displayName=fa(e),r},Zu=rs("list-filter",[["path",{d:"M2 5h20",key:"1fs1ex"}],["path",{d:"M6 12h12",key:"8npq4p"}],["path",{d:"M9 19h6",key:"456am0"}]]),Qu=rs("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]),Hw=Cl(Hl(),1);function ep({threshold:e=0,root:t=null,rootMargin:r="0%",freezeOnceVisible:n=!1,initialIsIntersecting:o=!1,onChange:i}={}){var a;let[s,c]=wn(null),[l,u]=wn(()=>({isIntersecting:o,entry:void 0})),p=qt();p.current=i;let d=((a=l.entry)==null?void 0:a.isIntersecting)&&n;vt(()=>{if(!s||!("IntersectionObserver"in window)||d)return;let v,_=new IntersectionObserver(x=>{let E=Array.isArray(_.thresholds)?_.thresholds:[_.thresholds];x.forEach(y=>{let Z=y.isIntersecting&&E.some(ve=>y.intersectionRatio>=ve);u({isIntersecting:Z,entry:y}),p.current&&p.current(Z,y),Z&&n&&v&&(v(),v=void 0)})},{threshold:e,root:t,rootMargin:r});return _.observe(s),()=>{_.disconnect()}},[s,JSON.stringify(e),t,r,d,n]);let m=qt(null);vt(()=>{var v;!s&&(v=l.entry)!=null&&v.target&&!n&&!d&&m.current!==l.entry.target&&(m.current=l.entry.target,u({isIntersecting:o,entry:void 0}))},[s,l.entry,n,d,o]);let h=[c,!!l.isIntersecting,l.entry];return h.ref=h[0],h.isIntersecting=h[1],h.entry=h[2],h}var dt={container:"n",hidden:"l",content:"y",pop:"d",badge:"w",sidebar:"e",controls:"k",results:"z",loadmore:"j"};function tp(e){let{isIntersecting:t,ref:r}=ep({threshold:0});vt(()=>{t&&Tu()},[t]);let n=qt(null);vt(()=>{n.current&&typeof Oe.value.page>"u"&&n.current.scrollTo({top:0,behavior:"smooth"})},[Oe.value]);let o=Ya();return N("div",{class:Kt(dt.container,{[dt.hidden]:e.hidden}),children:[N("div",{class:dt.content,children:[N("div",{class:dt.controls,children:[N(ua,{onClick:zt,children:N(Qu,{})}),N(np,{focus:!e.hidden}),N(ua,{onClick:Ba,children:[N(Zu,{}),o.length>0&&N("span",{class:dt.badge,children:o.length})]})]}),N("div",{class:dt.results,ref:n,children:[N(op,{keyboard:!e.hidden}),N("div",{class:dt.loadmore,ref:r})]})]}),N("div",{class:Kt(dt.sidebar,{[dt.hidden]:Au()}),children:N(rp,{})})]})}var Lt={container:"X",list:"F",heading:"I",title:"R",item:"o",active:"g",value:"q",count:"A"};function rp(e){let t=ku();return t.sort((r,n)=>n.node.count-r.node.count),N("div",{class:Lt.container,children:[N("h3",{class:Lt.heading,children:"Filters"}),N("h4",{class:Lt.title,children:"Tags"}),N("ol",{class:Lt.list,children:t.map(r=>N("li",{class:Kt(Lt.item,{[Lt.active]:Su(r.node.value)}),onClick:()=>Ou(r.node.value),children:[N("span",{class:Lt.value,children:r.node.value}),N("span",{class:Lt.count,children:r.node.count})]}))})]})}var ma={container:"f"};function np(e){let t=qt(null);return vt(()=>{var r,n;e.focus?(r=t.current)==null||r.focus():(n=t.current)==null||n.blur()},[e.focus]),N("div",{class:ma.container,children:N("input",{ref:t,type:"text",class:ma.content,value:_n(Ln()),onInput:r=>Ga(Ru(r.currentTarget.value)),autocapitalize:"off",autocomplete:"off",autocorrect:"off",placeholder:"Search",spellcheck:!1,role:"combobox"})})}var st={container:"b",heading:"B",item:"i",active:"h",wrapper:"C",meta:"D",actions:"s",title:"x",path:"t",excerpt:"u",more:"E"};function ns(){let[e,t]=wn(!1);return vt(()=>{let r=()=>t(!0),n=()=>t(!1);return document.addEventListener("compositionstart",r),document.addEventListener("compositionend",n),()=>{document.removeEventListener("compositionstart",r),document.removeEventListener("compositionend",n)}},[]),e}function op(e){var s;let t=Eu(),r=Lu(),n=yn(),o=qt([]),i=ns();vt(()=>{let c=o.current[n];c&&c.scrollIntoView({block:"center",behavior:"smooth"})},[n]),Ia(e.keyboard,c=>{if(i)return;let l=yn();c.key==="ArrowDown"?(c.preventDefault(),fo(Math.min(l+1,r.length-1))):c.key==="ArrowUp"&&(c.preventDefault(),fo(Math.max(l-1,0)))},[e.keyboard,i]);let a=(s=Mu())!=null?s:0;return N(qe,{children:[r.length>0&&N("h3",{class:st.heading,children:[N("span",{class:st.bubble,children:new Intl.NumberFormat("en-US").format(a)})," ","results"]}),N("ol",{class:st.container,children:r.map((c,l)=>{var _,x,E,y;let u=c.matches.find(({field:Z})=>Z==="text"),p=es(t[c.id].title,c.matches.find(({field:Z})=>Z==="title")),d=qu((_=t[c.id].path)!=null?_:[],c.matches.find(({field:Z})=>Z==="path")),m=Ku(t[c.id].text,u),h=Math.max(0,((y=(E=(x=u==null?void 0:u.value.highlight)==null?void 0:x.ranges)==null?void 0:E.filter(Z=>Z.start<Z.end).length)!=null?y:0)-1),v=t[c.id].location;if(Ja()){let Z=encodeURIComponent(Ln()),[ve,L]=v.split("#",2);v=`${ve}?h=${Z.replace(/%20/g,"+")}`,typeof L<"u"&&(v+=`#${L}`)}return N("li",{children:N("a",{ref:Z=>{o.current[l]=Z},href:v,onClick:()=>zt(),class:Kt(st.item,{[st.active]:l===yn()}),children:N("div",{class:st.wrapper,children:[N("div",{class:st.meta,children:N("menu",{class:st.path,children:d.map(Z=>N("li",{children:Z}))})}),N("h2",{class:st.title,children:p}),m&&N("div",{class:st.excerpt,children:m})]})})})})})]})}var ip={container:"a"};function ap(e){let t=ns();return Ia(!0,r=>{var n,o,i,a,s;if(!t)if((r.metaKey||r.ctrlKey)&&r.key==="k")r.preventDefault(),zt();else if((r.metaKey||r.ctrlKey)&&r.key==="j")document.body.classList.toggle("dark");else if(r.key==="Enter"&&!ur()){r.preventDefault();let c=yn(),l=(o=(n=ct.value)==null?void 0:n.items[c])==null?void 0:o.id;if((a=(i=fr.value)==null?void 0:i.items[l])!=null&&a.location){zt();let u=(s=fr.value)==null?void 0:s.items[l].location;if(Ja()){let p=encodeURIComponent(Ln()),[d,m]=u.split("#",2);u=`${d}?h=${p.replace(/%20/g,"+")}`,typeof m<"u"&&(u+=`#${m}`)}window.location.href=u}}else r.key==="Escape"&&!ur()&&(r.preventDefault(),zt())},[t]),N("div",{class:ip.container,children:[N(Bu,{hidden:ur()}),N(tp,{hidden:ur()})]})}function os(e,t){wu(e),Ul(N(ap,{}),t)}function xo(){zt()}function sp(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function cp(){return R(b(window,"compositionstart").pipe(f(()=>!0)),b(window,"compositionend").pipe(f(()=>!1))).pipe(J(!1))}function is(){let e=b(window,"keydown").pipe(f(t=>({mode:ur()?"global":"search",type:t.key,meta:t.ctrlKey||t.metaKey,claim(){t.preventDefault(),t.stopPropagation()}})),O(({mode:t,type:r})=>{if(t==="global"){let n=Tt();if(typeof n!="undefined")return!sp(n,r)}return!0}),xe());return cp().pipe(g(t=>t?w:e))}function Ue(){return new URL(location.href)}function bt(e,t=!1){if(X("navigation.instant")&&!t){let r=A("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function as(){return new I}function ss(){return location.hash.slice(1)}function cs(e){let t=A("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function wo(e){return R(b(window,"hashchange"),e).pipe(f(ss),J(ss()),O(t=>t.length>0),f(decodeURIComponent),ne(1))}function ls(e){return wo(e).pipe(f(t=>we(`[id="${t}"]`)),O(t=>typeof t!="undefined"))}function jr(e){let t=matchMedia(e);return un(r=>t.addListener(()=>r(t.matches))).pipe(J(t.matches))}function us(){let e=matchMedia("print");return R(b(window,"beforeprint").pipe(f(()=>!0)),b(window,"afterprint").pipe(f(()=>!1))).pipe(J(e.matches))}function Eo(e,t){return e.pipe(g(r=>r?t():w))}function To(e,t){return new F(r=>{let n=new XMLHttpRequest;return n.open("GET",`${e}`),n.responseType="blob",n.addEventListener("load",()=>{n.status>=200&&n.status<300?(r.next(n.response),r.complete()):r.error(new Error(n.statusText))}),n.addEventListener("error",()=>{r.error(new Error("Network error"))}),n.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(n.addEventListener("progress",o=>{var i;if(o.lengthComputable)t.progress$.next(o.loaded/o.total*100);else{let a=(i=n.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(o.loaded/+a*100)}}),t.progress$.next(5)),n.send(),()=>n.abort()})}function tt(e,t){return To(e,t).pipe(g(r=>r.text()),f(r=>JSON.parse(r)),ne(1))}function Mn(e,t){let r=new DOMParser;return To(e,t).pipe(g(n=>n.text()),f(n=>r.parseFromString(n,"text/html")),ne(1))}function ps(e,t){let r=new DOMParser;return To(e,t).pipe(g(n=>n.text()),f(n=>r.parseFromString(n,"text/xml")),ne(1))}var So={drawer:Y("[data-md-toggle=drawer]"),search:Y("[data-md-toggle=search]")};function Oo(e,t){So[e].checked!==t&&So[e].click()}function kn(e){let t=So[e];return b(t,"change").pipe(f(()=>t.checked),J(t.checked))}function fs(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function ms(){return R(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(f(fs),J(fs()))}function ds(){return{width:innerWidth,height:innerHeight}}function hs(){return b(window,"resize",{passive:!0}).pipe(f(ds),J(ds()))}function vs(){return oe([ms(),hs()]).pipe(f(([e,t])=>({offset:e,size:t})),ne(1))}function An(e,{viewport$:t,header$:r}){let n=t.pipe(he("size")),o=oe([n,r]).pipe(f(()=>St(e)));return oe([r,t,o]).pipe(f(([{height:i},{offset:a,size:s},{x:c,y:l}])=>({offset:{x:a.x-c,y:a.y-l+i},size:s})))}var lp=Y("#__config"),vr=JSON.parse(lp.textContent);vr.base=`${new URL(vr.base,Ue())}`;function Ne(){return vr}function X(e){return vr.features.includes(e)}function Yt(e,t){return typeof t!="undefined"?vr.translations[e].replace("#",t.toString()):vr.translations[e]}function gt(e,t=document){return Y(`[data-md-component=${e}]`,t)}function Te(e,t=document){return $(`[data-md-component=${e}]`,t)}function up(e){let t=Y(".md-typeset > :first-child",e);return b(t,"click",{once:!0}).pipe(f(()=>Y(".md-typeset",e)),f(r=>({hash:__md_hash(r.innerHTML)})))}function bs(e){if(!X("announce.dismiss")||!e.childElementCount)return w;if(!e.hidden){let t=Y(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return j(()=>{let t=new I;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),up(e).pipe(P(r=>t.next(r)),q(()=>t.complete()),f(r=>k({ref:e},r)))})}function pp(e,{target$:t}){return t.pipe(f(r=>({hidden:r!==e})))}function gs(e,t){let r=new I;return r.subscribe(({hidden:n})=>{e.hidden=n}),pp(e,t).pipe(P(n=>r.next(n)),q(()=>r.complete()),f(n=>k({ref:e},n)))}function Lo(e,t){return t==="inline"?A("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},A("div",{class:"md-tooltip__inner md-typeset"})):A("div",{class:"md-tooltip",id:e,role:"tooltip"},A("div",{class:"md-tooltip__inner md-typeset"}))}function Cn(...e){return A("div",{class:"md-tooltip2",role:"dialog"},A("div",{class:"md-tooltip2__inner md-typeset"},e))}function ys(...e){return A("div",{class:"md-tooltip2",role:"tooltip"},A("div",{class:"md-tooltip2__inner md-typeset"},e))}function _s(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return A("aside",{class:"md-annotation",tabIndex:0},Lo(t),A("a",{href:r,class:"md-annotation__index",tabIndex:-1},A("span",{"data-md-annotation-id":e})))}else return A("aside",{class:"md-annotation",tabIndex:0},Lo(t),A("span",{class:"md-annotation__index",tabIndex:-1},A("span",{"data-md-annotation-id":e})))}function xs(e){return A("button",{class:"md-code__button",title:Yt("clipboard.copy"),"data-clipboard-target":`#${e} > code`,"data-md-type":"copy"})}function ws(){return A("button",{class:"md-code__button",title:"Toggle line selection","data-md-type":"select"})}function Es(){return A("nav",{class:"md-code__nav"})}var dp=Zt(Hn());function Ss(e){return A("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>A("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?Ai(r):r)))}function Mo(e){let t=`tabbed-control tabbed-control--${e}`;return A("div",{class:t,hidden:!0},A("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function Os(e){return A("div",{class:"md-typeset__scrollwrap"},A("div",{class:"md-typeset__table"},e))}function hp(e){var n;let t=Ne(),r=new URL(`../${e.version}/`,t.base);return A("li",{class:"md-version__item"},A("a",{href:`${r}`,class:"md-version__link"},e.title,((n=t.version)==null?void 0:n.alias)&&e.aliases.length>0&&A("span",{class:"md-version__alias"},e.aliases[0])))}function Ls(e,t){var n;let r=Ne();return e=e.filter(o=>{var i;return!((i=o.properties)!=null&&i.hidden)}),A("div",{class:"md-version"},A("button",{class:"md-version__current","aria-label":Yt("select.version")},t.title,((n=r.version)==null?void 0:n.alias)&&t.aliases.length>0&&A("span",{class:"md-version__alias"},t.aliases[0])),A("ul",{class:"md-version__list"},e.map(hp)))}var vp=0;function bp(e,t=250){let r=oe([lr(e),Dt(e,t)]).pipe(f(([o,i])=>o||i),se()),n=j(()=>Pi(e)).pipe(ae(Wt),kr(1),Qe(r),f(()=>Ii(e)));return r.pipe(Lr(o=>o),g(()=>oe([r,n])),f(([o,i])=>({active:o,offset:i})),xe())}function Fr(e,t,r=250){let{content$:n,viewport$:o}=t,i=`__tooltip2_${vp++}`;return j(()=>{let a=new I,s=new qn(!1);a.pipe(be(),_e(!1)).subscribe(s);let c=s.pipe(Or(u=>ze(+!u*250,Gn)),se(),g(u=>u?n:w),P(u=>u.id=i),xe());oe([a.pipe(f(({active:u})=>u)),c.pipe(g(u=>Dt(u,250)),J(!1))]).pipe(f(u=>u.some(p=>p))).subscribe(s);let l=s.pipe(O(u=>u),fe(c,o),f(([u,p,{size:d}])=>{let m=e.getBoundingClientRect(),h=m.width/2;if(p.role==="tooltip")return{x:h,y:8+m.height};if(m.y>=d.height/2){let{height:v}=Ae(p);return{x:h,y:-16-v}}else return{x:h,y:16+m.height}}));return oe([c,a,l]).subscribe(([u,{offset:p},d])=>{u.style.setProperty("--md-tooltip-host-x",`${p.x}px`),u.style.setProperty("--md-tooltip-host-y",`${p.y}px`),u.style.setProperty("--md-tooltip-x",`${d.x}px`),u.style.setProperty("--md-tooltip-y",`${d.y}px`),u.classList.toggle("md-tooltip2--top",d.y<0),u.classList.toggle("md-tooltip2--bottom",d.y>=0)}),s.pipe(O(u=>u),fe(c,(u,p)=>p),O(u=>u.role==="tooltip")).subscribe(u=>{let p=Ae(Y(":scope > *",u));u.style.setProperty("--md-tooltip-width",`${p.width}px`),u.style.setProperty("--md-tooltip-tail","0px")}),s.pipe(se(),Ie(je),fe(c)).subscribe(([u,p])=>{p.classList.toggle("md-tooltip2--active",u)}),oe([s.pipe(O(u=>u)),c]).subscribe(([u,p])=>{p.role==="dialog"?(e.setAttribute("aria-controls",i),e.setAttribute("aria-haspopup","dialog")):e.setAttribute("aria-describedby",i)}),s.pipe(O(u=>!u)).subscribe(()=>{e.removeAttribute("aria-controls"),e.removeAttribute("aria-describedby"),e.removeAttribute("aria-haspopup")}),bp(e,r).pipe(P(u=>a.next(u)),q(()=>a.complete()),f(u=>k({ref:e},u)))})}function Je(e,{viewport$:t},r=document.body){return Fr(e,{content$:new F(n=>{let o=e.title,i=ys(o);return n.next(i),e.removeAttribute("title"),r.append(i),()=>{i.remove(),e.setAttribute("title",o)}}),viewport$:t},0)}function gp(e,t){let r=j(()=>oe([Ri(e),Wt(t)])).pipe(f(([{x:n,y:o},i])=>{let{width:a,height:s}=Ae(e);return{x:n-i.x+a/2,y:o-i.y+s/2}}));return lr(e).pipe(g(n=>r.pipe(f(o=>({active:n,offset:o})),Me(+!n||1/0))))}function Ms(e,t,{target$:r}){let[n,o]=Array.from(e.children);return j(()=>{let i=new I,a=i.pipe(be(),_e(!0));return i.subscribe({next({offset:s}){e.style.setProperty("--md-tooltip-x",`${s.x}px`),e.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),Ot(e).pipe(ee(a)).subscribe(s=>{e.toggleAttribute("data-md-visible",s)}),R(i.pipe(O(({active:s})=>s)),i.pipe(Ye(250),O(({active:s})=>!s))).subscribe({next({active:s}){s?e.prepend(n):n.remove()},complete(){e.prepend(n)}}),i.pipe(Ze(16,je)).subscribe(({active:s})=>{n.classList.toggle("md-tooltip--active",s)}),i.pipe(kr(125,je),O(()=>!!e.offsetParent),f(()=>e.offsetParent.getBoundingClientRect()),f(({x:s})=>s)).subscribe({next(s){s?e.style.setProperty("--md-tooltip-0",`${-s}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),b(o,"click").pipe(ee(a),O(s=>!(s.metaKey||s.ctrlKey))).subscribe(s=>{s.stopPropagation(),s.preventDefault()}),b(o,"mousedown").pipe(ee(a),fe(i)).subscribe(([s,{active:c}])=>{var l;if(s.button!==0||s.metaKey||s.ctrlKey)s.preventDefault();else if(c){s.preventDefault();let u=e.parentElement.closest(".md-annotation");u instanceof HTMLElement?u.focus():(l=Tt())==null||l.blur()}}),r.pipe(ee(a),O(s=>s===n),Ft(125)).subscribe(()=>e.focus()),gp(e,t).pipe(P(s=>i.next(s)),q(()=>i.complete()),f(s=>k({ref:e},s)))})}function yp(e){let t=Ne();if(e.tagName!=="CODE")return[e];let r=[".c",".c1",".cm"];if(t.annotate){let n=e.closest("[class|=language]");if(n)for(let o of Array.from(n.classList)){if(!o.startsWith("language-"))continue;let[,i]=o.split("-");i in t.annotate&&r.push(...t.annotate[i])}}return $(r.join(", "),e)}function _p(e){let t=[];for(let r of yp(e)){let n=[],o=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=o.nextNode();i;i=o.nextNode())n.push(i);for(let i of n){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,s,c]=a;if(typeof c=="undefined"){let l=i.splitText(a.index);i=l.splitText(s.length),t.push(l)}else{i.textContent=s,t.push(i);break}}}}return t}function ks(e,t){t.append(...Array.from(e.childNodes))}function $n(e,t,{target$:r,print$:n}){let o=t.closest("[id]"),i=o==null?void 0:o.id,a=new Map;for(let s of _p(t)){let[,c]=s.textContent.match(/\((\d+)\)/);we(`:scope > li:nth-child(${c})`,e)&&(a.set(c,_s(c,i)),s.replaceWith(a.get(c)))}return a.size===0?w:j(()=>{let s=new I,c=s.pipe(be(),_e(!0)),l=[];for(let[u,p]of a)l.push([Y(".md-typeset",p),Y(`:scope > li:nth-child(${u})`,e)]);return n.pipe(ee(c)).subscribe(u=>{e.hidden=!u,e.classList.toggle("md-annotation-list",u);for(let[p,d]of l)u?ks(p,d):ks(d,p)}),R(...[...a].map(([,u])=>Ms(u,t,{target$:r}))).pipe(q(()=>s.complete()),xe())})}function As(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return As(t)}}function Cs(e,t){return j(()=>{let r=As(e);return typeof r!="undefined"?$n(r,e,t):w})}var $s=Zt(Ao());var xp=0,Hs=R(b(window,"keydown").pipe(f(()=>!0)),R(b(window,"keyup"),b(window,"contextmenu")).pipe(f(()=>!1))).pipe(J(!1),ne(1));function Ps(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return Ps(t)}}function wp(e){return Re(e).pipe(f(({width:t})=>({scrollable:Ar(e).width>t})),he("scrollable"))}function Is(e,t){let{matches:r}=matchMedia("(hover)"),n=j(()=>{let o=new I,i=o.pipe(eo(1));o.subscribe(({scrollable:m})=>{m&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let a=[],s=e.closest("pre"),c=s.closest("[id]"),l=c?c.id:xp++;s.id=`__code_${l}`;let u=[],p=e.closest(".highlight");if(p instanceof HTMLElement){let m=Ps(p);if(typeof m!="undefined"&&(p.classList.contains("annotate")||X("content.code.annotate"))){let h=$n(m,e,t);u.push(Re(p).pipe(ee(i),f(({width:v,height:_})=>v&&_),se(),g(v=>v?h:w)))}}let d=$(":scope > span[id]",e);if(d.length&&(e.classList.add("md-code__content"),e.closest(".select")||X("content.code.select")&&!e.closest(".no-select"))){let m=+d[0].id.split("-").pop(),h=ws();a.push(h),X("content.tooltips")&&u.push(Je(h,{viewport$}));let v=b(h,"click").pipe(Mr(L=>!L,!1),P(()=>h.blur()),xe());v.subscribe(L=>{h.classList.toggle("md-code__button--active",L)});let _=de(d).pipe(ae(L=>Dt(L).pipe(f(M=>[L,M]))));v.pipe(g(L=>L?_:w)).subscribe(([L,M])=>{let W=we(".hll.select",L);if(W&&!M)W.replaceWith(...Array.from(W.childNodes));else if(!W&&M){let te=document.createElement("span");te.className="hll select",te.append(...Array.from(L.childNodes).slice(1)),L.append(te)}});let x=de(d).pipe(ae(L=>b(L,"mousedown").pipe(P(M=>M.preventDefault()),f(()=>L)))),E=v.pipe(g(L=>L?x:w),fe(Hs),f(([L,M])=>{var te;let W=d.indexOf(L)+m;if(M===!1)return[W,W];{let ue=$(".hll",e).map(le=>d.indexOf(le.parentElement)+m);return(te=window.getSelection())==null||te.removeAllRanges(),[Math.min(W,...ue),Math.max(W,...ue)]}})),y=wo(w).pipe(O(L=>L.startsWith(`__codelineno-${l}-`)));y.subscribe(L=>{let[,,M]=L.split("-"),W=M.split(":").map(ue=>+ue-m+1);W.length===1&&W.push(W[0]);for(let ue of $(".hll:not(.select)",e))ue.replaceWith(...Array.from(ue.childNodes));let te=d.slice(W[0]-1,W[1]);for(let ue of te){let le=document.createElement("span");le.className="hll",le.append(...Array.from(ue.childNodes).slice(1)),ue.append(le)}}),y.pipe(Me(1),Ie(ye)).subscribe(L=>{if(L.includes(":")){let M=document.getElementById(L.split(":")[0]);M&&setTimeout(()=>{let W=M,te=-64;for(;W!==document.body;)te+=W.offsetTop,W=W.offsetParent;window.scrollTo({top:te})},1)}});let ve=de($('a[href^="#__codelineno"]',p)).pipe(ae(L=>b(L,"click").pipe(P(M=>M.preventDefault()),f(()=>L)))).pipe(ee(i),fe(Hs),f(([L,M])=>{let te=+Y(`[id="${L.hash.slice(1)}"]`).parentElement.id.split("-").pop();if(M===!1)return[te,te];{let ue=$(".hll",e).map(le=>+le.parentElement.id.split("-").pop());return[Math.min(te,...ue),Math.max(te,...ue)]}}));R(E,ve).subscribe(L=>{let M=`#__codelineno-${l}-`;L[0]===L[1]?M+=L[0]:M+=`${L[0]}:${L[1]}`,history.replaceState({},"",M),window.dispatchEvent(new HashChangeEvent("hashchange",{newURL:window.location.origin+window.location.pathname+M,oldURL:window.location.href}))})}if($s.default.isSupported()&&(e.closest(".copy")||X("content.code.copy")&&!e.closest(".no-copy"))){let m=xs(s.id);a.push(m),X("content.tooltips")&&u.push(Je(m,{viewport$}))}if(a.length){let m=Es();m.append(...a),s.insertBefore(m,e)}return wp(e).pipe(P(m=>o.next(m)),q(()=>o.complete()),f(m=>k({ref:e},m)),Ut(R(...u).pipe(ee(i))))});return X("content.lazy")?Ot(e).pipe(O(o=>o),Me(1),g(()=>n)):n}function Ep(e,{target$:t,print$:r}){let n=!0;return R(t.pipe(f(o=>o.closest("details:not([open])")),O(o=>e===o),f(()=>({action:"open",reveal:!0}))),r.pipe(O(o=>o||!n),P(()=>n=e.open),f(o=>({action:o?"open":"close"}))))}function Rs(e,t){return j(()=>{let r=new I;return r.subscribe(({action:n,reveal:o})=>{e.toggleAttribute("open",n==="open"),o&&e.scrollIntoView()}),Ep(e,t).pipe(P(n=>r.next(n)),q(()=>r.complete()),f(n=>k({ref:e},n)))})}var Ns=Zt(Hn());var js,Fs,Co={},Us=!1;function Ds(e,t){return t()?at(e).pipe(me(()=>D(void 0)),f(()=>{})):D(void 0)}function Tp(e){if(!e)return[];if(e.startsWith("[")&&e.endsWith("]"))try{let t=JSON.parse(e);if(Array.isArray(t))return t.filter(r=>typeof r=="string")}catch(t){}return e.split(/[,\s]+/).map(t=>t.trim()).filter(t=>t.length>0)}function Sp(e){var o,i;let t=e.querySelector(".pyodide-editor-bar .pyodide-bar-item"),n=((o=t==null?void 0:t.textContent)!=null?o:"").match(/session:\s*([^)]+)\)?/i);return((i=n==null?void 0:n[1])==null?void 0:i.trim())||"default"}function Op(e){var i,a;let t=e.querySelector("[id$='--editor']"),r=e.querySelector("[id$='--run']"),n=e.querySelector("[id$='--clear']"),o=e.querySelector("[id$='--output']");if(!t||!r||!n||!o)throw new Error("Invalid Pyodide structure");return{root:e,editor:t,output:o,run:r,clear:n,source:(a=(i=t.textContent)==null?void 0:i.trimEnd())!=null?a:"",session:Sp(e),install:Tp(e.dataset.install)}}function Lp(e,t){return e in Co||(Co[e]=t.globals.get("dict")()),Co[e]}function Nr(e,t){e.innerHTML=(0,Ns.default)(t)}function Ho(e){e.innerHTML=""}function Mp(e){return new Option(e).innerHTML}function kp(){return new Promise(e=>requestAnimationFrame(()=>e()))}function Ap(e,t,r,n){return pt(this,null,function*(){let o=[];e.setStdout({batched(i){o.push(i),Nr(r,`${o.join(` +`)} +`)}});try{let i=yield e.runPythonAsync(t.getValue(),{globals:Lp(n,e)});typeof i!="undefined"&&i!==null&&(o.push(String(i)),Nr(r,`${o.join(` +`)} +`))}catch(i){o.push(Mp(String(i))),Nr(r,`${o.join(` +`)} +`)}})}function Cp(){return Fs||(Fs=Ds("https://unpkg.com/pyodide@314.0.2/pyodide.js",()=>typeof loadPyodide=="undefined"||loadPyodide instanceof Element).pipe(f(()=>pt(null,null,function*(){try{let e=yield loadPyodide({indexURL:"https://unpkg.com/pyodide@314.0.2/"});return yield e.loadPackage("micropip"),e}catch(e){return null}})),ne(1))),Fs}function Hp(){Us||(ace.define("ace/theme/zensical",["require","exports","module","ace/lib/dom"],(e,t)=>{t.isDark=!1,t.cssClass="ace-zensical",t.cssText=""}),Us=!0)}function Ws(e){return js||(js=Ds("https://unpkg.com/ace-builds@1.44.0/src-noconflict/ace.js",()=>typeof ace=="undefined"||ace instanceof Element).pipe(ne(1))),new F(t=>{let r=!0,n,o,i=Op(e);i.root.setAttribute("data-md-exec-state","ready");let a=()=>Ho(i.output),s=()=>pt(null,null,function*(){return o||(o=pt(null,null,function*(){if(i.root.setAttribute("data-md-exec-state","loading"),Nr(i.output,"Initializing..."),yield kp(),!r)return null;let u=yield ln(Cp()).then(p=>p);if(!r||!u)return null;if(i.install.length>0)try{let p=u.pyimport("micropip");for(let d of i.install)yield p.install(d)}catch(p){return Ho(i.output),Nr(i.output,`Could not install one or more packages: ${i.install.join(", ")} +${String(p)}`),i.root.setAttribute("data-md-exec-state","error"),null}return r?(Ho(i.output),i.root.setAttribute("data-md-exec-state","ready"),u):null})),o}),c=()=>{pt(null,null,function*(){let u=yield s();!r||!u||!n||Ap(u,n,i.output,i.session)})},l=u=>{u.ctrlKey&&u.key.toLowerCase()==="enter"&&(u.preventDefault(),i.run.click())};return i.run.addEventListener("click",c),i.clear.addEventListener("click",a),i.root.addEventListener("keydown",l),pt(null,null,function*(){yield ln(js),r&&(Hp(),i.editor.textContent="",n=ace.edit(i.editor),n.setTheme("ace/theme/zensical"),n.session.setMode("ace/mode/python"),n.setOption("fontFamily","var(--md-code-font)"),n.setOption("minLines",0),n.setOption("maxLines",1/0),n.session.setValue(i.source),n.gotoLine(1,0,!1),n.clearSelection(),n.resize(),n.renderer.updateFull())}),t.next({ref:i.root}),()=>{r=!1,i.run.removeEventListener("click",c),i.clear.removeEventListener("click",a),i.root.removeEventListener("keydown",l),n==null||n.destroy(),i.root.removeAttribute("data-md-exec-state")}})}var Vs;function $p(){return typeof GLightbox=="undefined"||GLightbox instanceof Element?at("https://unpkg.com/glightbox@3/dist/js/glightbox.min.js").pipe(me(()=>w),f(()=>{})):D(void 0)}function Pp(){return Ci("https://unpkg.com/glightbox@3/dist/css/glightbox.min.css").pipe(me(()=>w),f(()=>{}))}function zs(e){return Vs||(Vs=$p().pipe(f(()=>new GLightbox(k({touchNavigation:!0,loop:!1,zoomable:!0,draggable:!0,openEffect:"zoom",closeEffect:"zoom",slideEffect:"slide",onOpen:()=>{document.activeElement instanceof HTMLElement&&document.activeElement.blur()}},typeof GLightboxOptions!="undefined"?GLightboxOptions:{}))),ne(1))),Pp().pipe(g(()=>Vs),g(t=>(t.reload(),e.map(r=>({ref:r})))))}var qs=0,Ks=new Map;function Ip(e){let t=document.createElement("h3");t.innerHTML=e.innerHTML;let r=[t],n=e.nextElementSibling;for(;n&&!(n instanceof HTMLHeadingElement);)r.push(n.cloneNode(!0)),n=n.nextElementSibling;return r}function Rp(e,t){for(let r of $("[href], [src]",e))for(let n of["href","src"]){let o=r.getAttribute(n);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){r[n]=new URL(r.getAttribute(n),t).toString();break}}for(let r of $("[name^=__], [for]",e))for(let n of["id","for","name"]){let o=r.getAttribute(n);o&&r.setAttribute(n,`${o}$preview_${qs}`)}return qs++,D(e)}function jp(e){let t=Ks.get(e.toString());return t?D(t):Mn(e).pipe(g(r=>Rp(r,e)),f(r=>(Ks.set(e.toString(),r),r)))}function Bs(e,t){let{sitemap$:r}=t;if(!(e instanceof HTMLAnchorElement))return w;if(!(X("navigation.instant.preview")||e.hasAttribute("data-preview")))return w;e.removeAttribute("title");let n=oe([lr(e),Dt(e).pipe(ke(1))]).pipe(f(([i,a])=>i||a),se(),O(i=>i));return Rt([r,n]).pipe(g(([i])=>{let a=new URL(e.href);return a.search=a.hash="",i.has(`${a}`)?D(a):w}),g(i=>jp(i)),g(i=>{let a=e.hash?`article [id="${decodeURIComponent(e.hash.slice(1))}"]`:"article h1",s=we(a,i);return typeof s=="undefined"?w:D(Ip(s))})).pipe(g(i=>{let a=new F(s=>{let c=Cn(...i);return s.next(c),document.body.append(c),()=>c.remove()});return Fr(e,k({content$:a},t))}))}var Gs=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.marker{fill:var(--md-mermaid-edge-color);stroke:var(--md-mermaid-edge-color)}.edgeLabel .label rect{fill:#0000}.flowchartTitleText{fill:var(--md-mermaid-label-fg-color)}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel p,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel p{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}.classDiagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs marker.marker.composition.class path,defs marker.marker.dependency.class path,defs marker.marker.extension.class path{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs marker.marker.aggregation.class path{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}.statediagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}a .nodeLabel{text-decoration:underline}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs [id$=-barbEnd]{fill:var(--md-mermaid-edge-color);stroke:var(--md-mermaid-edge-color)}[id^=entity] path,[id^=entity] rect{fill:var(--md-default-bg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs .marker.oneOrMore.er *,defs .marker.onlyOne.er *,defs .marker.zeroOrMore.er *,defs .marker.zeroOrOne.er *{stroke:var(--md-mermaid-edge-color)!important}text:not([class]):last-child{fill:var(--md-mermaid-label-fg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}.actor-line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan,.sectionTitle{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}[id$=-arrowhead] path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}[id$=-sequencenumber],defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}[class^=activation]{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-label-fg-color);stroke-width:1.5px}";var $o,Up=0;function Np(){return typeof mermaid=="undefined"||mermaid instanceof Element?at("https://unpkg.com/mermaid@11/dist/mermaid.min.js"):D(void 0)}function Ys(e){return e.classList.remove("mermaid"),$o||($o=Np().pipe(P(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Gs,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),f(()=>{}),ne(1))),$o.subscribe(()=>pt(null,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${Up++}`,r=A("div",{class:"mermaid"}),n=e.textContent,{svg:o,fn:i}=yield mermaid.render(t,n),a=r.attachShadow({mode:"closed"});a.innerHTML=o,e.replaceWith(r),i==null||i(a)})),$o.pipe(f(()=>({ref:e})))}var Js=A("table");function Xs(e){return e.replaceWith(Js),Js.replaceWith(Os(e)),D({ref:e})}function Dp(e){let t=e.find(r=>r.checked)||e[0];return R(...e.map(r=>b(r,"change").pipe(f(()=>Y(`label[for="${r.id}"]`))))).pipe(J(Y(`label[for="${t.id}"]`)),f(r=>({active:r})))}function Zs(e,{viewport$:t,target$:r}){let n=Y(".tabbed-labels",e),o=$(":scope > input",e),i=Mo("prev");e.append(i);let a=Mo("next");return e.append(a),j(()=>{let s=new I,c=s.pipe(be(),_e(!0));oe([s,Re(e),Ot(e)]).pipe(ee(c),Ze(1,je)).subscribe({next([{active:l},u]){let p=St(l),{width:d}=Ae(l);e.style.setProperty("--md-indicator-x",`${p.x}px`),e.style.setProperty("--md-indicator-width",`${d}px`);let m=dn(n);(p.x<m.x||p.x+d>m.x+u.width)&&n.scrollTo({left:Math.max(0,p.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),oe([Wt(n),Re(n)]).pipe(ee(c)).subscribe(([l,u])=>{let p=Ar(n);i.hidden=l.x<16,a.hidden=l.x>p.width-u.width-16}),R(b(i,"click").pipe(f(()=>-1)),b(a,"click").pipe(f(()=>1))).pipe(ee(c)).subscribe(l=>{let{width:u}=Ae(n);n.scrollBy({left:u*l,behavior:"smooth"})}),r.pipe(ee(c),O(l=>o.includes(l))).subscribe(l=>l.click()),n.classList.add("tabbed-labels--linked");for(let l of o){let u=Y(`label[for="${l.id}"]`);u.replaceChildren(A("a",{href:`#${u.htmlFor}`,tabIndex:-1},...Array.from(u.childNodes))),b(u.firstElementChild,"click").pipe(ee(c),O(p=>!(p.metaKey||p.ctrlKey)),P(p=>{p.preventDefault(),p.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${u.htmlFor}`),u.click()})}return X("content.tabs.link")&&s.pipe(ke(1),fe(t)).subscribe(([{active:l},{offset:u}])=>{let p=l.innerText.trim();if(l.hasAttribute("data-md-switching"))l.removeAttribute("data-md-switching");else{let d=e.offsetTop-u.y;for(let h of $("[data-tabs]"))for(let v of $(":scope > input",h)){let _=Y(`label[for="${v.id}"]`);if(_!==l&&_.innerText.trim()===p){_.setAttribute("data-md-switching",""),v.click();break}}window.scrollTo({top:e.offsetTop-d});let m=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([p,...m])])}}),s.pipe(ee(c)).subscribe(()=>{for(let l of $("audio, video",e))l.offsetWidth&&l.autoplay?l.play().catch(()=>{}):l.pause()}),Dp(o).pipe(P(l=>s.next(l)),q(()=>s.complete()),f(l=>k({ref:e},l)))}).pipe(It(ye))}function Qs(e,t){let{viewport$:r,target$:n,print$:o}=t;return R(...$(".annotate:not(.highlight)",e).map(i=>Cs(i,{target$:n,print$:o})),...$(".pyodide",e).map(i=>Ws(i)),...$("pre:not(.mermaid) > code",e).filter(i=>!i.closest(".pyodide")).map(i=>Is(i,{target$:n,print$:o})),...$("a",e).map(i=>Bs(i,t)),...$("pre.mermaid",e).map(i=>Ys(i)),...[$(".glightbox",e)].filter(i=>i.length>0).map(i=>zs(i)),...$("table:not([class])",e).map(i=>Xs(i)),...$("details",e).map(i=>Rs(i,{target$:n,print$:o})),...$("[data-tabs]",e).map(i=>Zs(i,{viewport$:r,target$:n})),...$("[title]:not([data-preview])",e).filter(()=>X("content.tooltips")).map(i=>Je(i,{viewport$:r})),...$(".footnote-ref",e).filter(()=>X("content.footnote.tooltips")).map(i=>Fr(i,{content$:new F(a=>{let s=new URL(i.href).hash.slice(1),c=Array.from(document.getElementById(s).cloneNode(!0).children),l=Cn(...c);return a.next(l),document.body.append(l),()=>l.remove()}),viewport$:r})))}function Wp(e,{alert$:t}){return t.pipe(g(r=>R(D(!0),D(!1).pipe(Ft(2e3))).pipe(f(n=>({message:r,active:n})))))}function ec(e,t){let r=Y(".md-typeset",e);return j(()=>{let n=new I;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),Wp(e,t).pipe(P(o=>n.next(o)),q(()=>n.complete()),f(o=>k({ref:e},o)))})}function Vp({viewport$:e}){if(!X("header.autohide"))return D(!1);let t=e.pipe(f(({offset:{y:o}})=>o),jt(2,1),f(([o,i])=>[o<i,i]),he(0)),r=oe([e,t]).pipe(O(([{offset:o},[,i]])=>Math.abs(i-o.y)>100),f(([,[o]])=>o),se()),n=kn("search");return oe([e,n]).pipe(f(([{offset:o},i])=>o.y>400&&!i),se(),g(o=>o?r:D(!1)),J(!1))}function tc(e,t){return j(()=>oe([Re(e),Vp(t)])).pipe(f(([{height:r},n])=>({height:r,hidden:n})),se((r,n)=>r.height===n.height&&r.hidden===n.hidden),ne(1))}function rc(e,{viewport$:t,header$:r,main$:n}){return j(()=>{let o=new I,i=o.pipe(be(),_e(!0));o.pipe(he("active"),Qe(r)).subscribe(([{active:s},{hidden:c}])=>{e.classList.toggle("md-header--shadow",s&&!c),e.hidden=c});let a=de($("[title]",e)).pipe(O(()=>X("content.tooltips")),ae(s=>Je(s,{viewport$:t})));return n.subscribe(o),r.pipe(ee(i),f(s=>k({ref:e},s)),Ut(a.pipe(ee(i))))})}function zp(e,{viewport$:t,header$:r}){return An(e,{viewport$:t,header$:r}).pipe(f(({offset:{y:n}})=>{let{height:o}=Ae(e);return{active:o>0&&n>=o}}),he("active"))}function nc(e,t){return j(()=>{let r=new I;r.subscribe({next({active:o}){e.classList.toggle("md-header__title--active",o)},complete(){e.classList.remove("md-header__title--active")}});let n=we(".md-content h1");return typeof n=="undefined"?w:zp(n,t).pipe(P(o=>r.next(o)),q(()=>r.complete()),f(o=>k({ref:e},o)))})}function oc(e,{viewport$:t,header$:r}){let n=r.pipe(f(({height:i})=>i),se()),o=n.pipe(g(()=>Re(e).pipe(f(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),he("bottom"))));return oe([n,o,t]).pipe(f(([i,{top:a,bottom:s},{offset:{y:c},size:{height:l}}])=>(l=Math.max(0,l-Math.max(0,a-c,i)-Math.max(0,l+c-s)),{offset:a-i,height:l,active:a-i<=c})),se((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function qp(e){let t=__md_get("__palette")||{index:e.findIndex(n=>matchMedia(n.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return D(...e).pipe(ae(n=>b(n,"change").pipe(f(()=>n))),J(e[r]),f(n=>({index:e.indexOf(n),color:{media:n.getAttribute("data-md-color-media"),scheme:n.getAttribute("data-md-color-scheme"),primary:n.getAttribute("data-md-color-primary"),accent:n.getAttribute("data-md-color-accent")}})),ne(1))}function ic(e){let t=$("input",e),r=A("meta",{name:"theme-color"});document.head.appendChild(r);let n=A("meta",{name:"color-scheme"});document.head.appendChild(n);let o=jr("(prefers-color-scheme: light)");return j(()=>{let i=new I;return i.subscribe(a=>{if(document.body.setAttribute("data-md-color-switching",""),a.color.media==="(prefers-color-scheme)"){let s=matchMedia("(prefers-color-scheme: light)"),c=document.querySelector(s.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");a.color.scheme=c.getAttribute("data-md-color-scheme"),a.color.primary=c.getAttribute("data-md-color-primary"),a.color.accent=c.getAttribute("data-md-color-accent")}for(let[s,c]of Object.entries(a.color))document.body.setAttribute(`data-md-color-${s}`,c);for(let s=0;s<t.length;s++){let c=t[s].nextElementSibling;c instanceof HTMLElement&&(c.hidden=a.index!==s)}__md_set("__palette",a)}),b(e,"keydown").pipe(O(a=>a.key==="Enter"),fe(i,(a,s)=>s)).subscribe(({index:a})=>{a=(a+1)%t.length,t[a].click(),t[a].focus()}),i.pipe(f(()=>{let a=gt("header"),s=window.getComputedStyle(a);return n.content=s.colorScheme,s.backgroundColor.match(/\d+/g).map(c=>(+c).toString(16).padStart(2,"0")).join("")})).subscribe(a=>r.content=`#${a}`),i.pipe(Ie(ye)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),qp(t).pipe(ee(o.pipe(ke(1))),Nt(),P(a=>i.next(a)),q(()=>i.complete()),f(a=>k({ref:e},a)))})}function ac(e,{progress$:t}){return j(()=>{let r=new I;return r.subscribe(({value:n})=>{e.style.setProperty("--md-progress-value",`${n}`)}),t.pipe(P(n=>r.next({value:n})),q(()=>r.complete()),f(n=>({ref:e,value:n})))})}var sc=`.m u{text-decoration:underline!important;text-decoration-style:wavy!important;text-decoration-thickness:1px!important}.p{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-color:rgba(var(--color-backdrop)/var(--alpha-lighter));cursor:pointer;height:100%;pointer-events:auto;position:absolute;transition:opacity .25s;width:100%}.p.v{opacity:0;pointer-events:none;transition:opacity .35s}.r{align-items:center;background-color:initial;border:none;border-radius:var(--space-2);cursor:pointer;display:flex;flex-shrink:0;font-family:var(--font-family);height:36px;justify-content:center;outline:none;padding:0;position:relative;transition:background-color .25s,color .25s;width:36px;z-index:1}.r svg{stroke:rgb(var(--color-foreground));height:18px;opacity:.5;width:18px}.r:before{background-color:rgb(var(--color-background-subtle));border-radius:var(--border-radius-2);content:"";inset:0;opacity:0;position:absolute;transform:scale(.75);transition:transform 125ms,opacity 125ms;z-index:0}.r:hover:before{opacity:1;transform:scale(1)}.r.c{cursor:auto}.r.c:before{display:none}.n{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-color:rgba(var(--color-background)/var(--alpha-light));border:1px solid rgb(var(--color-foreground)/var(--alpha-lightest));border-radius:var(--space-3);box-shadow:0 0 60px #0000000d;display:flex;height:480px;overflow:hidden;pointer-events:auto;position:absolute;transition:transform .25s cubic-bezier(.16,1,.3,1),opacity .25s;width:640px}.n.l{opacity:0;pointer-events:none;transform:scale(1.1);transition:transform .25s .15s,opacity .15s}@media (max-width:680px){.n{border-radius:0;height:100%;width:100%}}.y{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;min-width:0}@keyframes d{0%{transform:scale(0)}50%{transform:scale(1.2)}to{transform:scale(1)}}.w{animation:d .25s ease-in-out;background:var(--color-highlight);border-radius:100%;color:#fff;font-size:8px;font-weight:700;height:12px;padding-top:1px;position:absolute;right:4px;top:4px;width:12px}.e{background-color:rgb(var(--color-background-subtle)/var(--alpha-lighter));border-left:1px solid rgb(var(--color-foreground)/var(--alpha-lightest));flex-shrink:0;overflow-y:scroll;position:relative;transition:width .35s cubic-bezier(.16,1,.3,1),opacity .25s;width:200px}.e>*{transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.e.l{opacity:0;width:0}.e.l>*{transform:translate(-48px)}@media (max-width:680px){.e{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-color:rgba(var(--color-background-subtle)/var(--alpha-light));box-shadow:0 0 60px #00000026;height:100%;position:absolute;right:0;top:0}}.k{border-bottom:1px solid rgb(var(--color-foreground)/var(--alpha-lightest));display:flex;gap:var(--space-1);padding:var(--space-2)}.z{-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain}.j{padding:8px 10px}.X{color:rgb(var(--color-foreground)/var(--alpha-light));padding:var(--space-2);position:absolute;width:100%}.F,.X{display:flex;flex-direction:column}.F{gap:2px;list-style:none;padding:0}.F,.I{margin:0}.I{font-size:16px;font-weight:400}.I,.R{padding:8px}.R{font-size:14px;margin:4px 0 0;opacity:.5}.R,.o{font-size:12px}.o{cursor:pointer;display:flex;padding:4px 8px;position:relative}.o:before{background-color:var(--color-highlight-transparent);border-radius:var(--space-1);content:"";inset:0;opacity:0;position:absolute;transform:scale(.75);transition:transform 125ms,opacity 125ms;z-index:0}.o.g:before,.o:hover:before{opacity:1;transform:scale(1)}.o.g,.o:hover{color:var(--color-highlight)}.q{flex-grow:1}.A,.q{position:relative}.A{font-weight:700}.f{flex-grow:1}.f input{background:#0000;border:none;color:rgb(var(--color-foreground));font-family:var(--font-family);font-size:16px;height:100%;letter-spacing:-.25px;outline:none;width:100%}.b{color:rgb(var(--color-foreground)/var(--alpha-light));display:flex;flex-direction:column;gap:2px;line-height:1.3;list-style:none;margin:var(--space-2);margin-top:0;padding:0}.B,.b li{margin:0}.B{color:rgb(var(--color-foreground)/var(--alpha-lighter));font-size:12px;margin-top:var(--space-2);padding:0 18px}.i{border-radius:var(--space-2);color:inherit;cursor:pointer;display:flex;flex-direction:row;flex-grow:1;padding:8px 10px;position:relative;text-decoration:none}.i:before{background-color:rgb(var(--color-background-subtle));border-radius:var(--border-radius-2);content:"";display:block;inset:0;opacity:0;position:absolute;transform:scale(.9);transition:transform 125ms,opacity 125ms;z-index:0}@media (pointer:fine){.i.h:before,.i:hover:before{opacity:1;transform:scale(1)}}.i mark{background:#0000;color:var(--color-highlight)}.i u{text-decoration:underline}.C{flex-direction:column;flex-grow:1;gap:5.5px}.C,.D{display:flex;min-width:0}.D{align-items:flex-start;gap:var(--space-2);justify-content:space-between}.s{align-items:flex-end;align-self:flex-end;display:flex;flex-direction:column;gap:6px;justify-content:flex-end;margin-right:-8px;margin-top:auto;opacity:0;position:relative;transform:translate(-2px);transition:transform 125ms,opacity 125ms;z-index:0}@media (pointer:fine){.h>.s,:hover>.s{opacity:1;transform:none}}.x{font-size:14px;margin:0;position:relative}.x code{background:rgb(var(--color-background-subtle));border-radius:var(--space-1);font-size:13px;padding:2px 4px}.t{color:rgb(var(--color-foreground)/.45);display:inline-flex;flex:1 1 auto;flex-wrap:wrap;font-size:12px;gap:var(--space-1);list-style:none;margin:0;min-width:0;padding:0;position:relative}.t li{white-space:nowrap}.t li:after{content:"/";display:inline;margin-left:var(--space-1)}.t li:last-child:after{content:"";display:none}.u{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:rgb(var(--color-foreground));display:-webkit-box;font-size:12px;line-height:1.5;overflow:hidden;position:relative}.u code{background:rgb(var(--color-background-subtle));border-radius:var(--space-1);padding:2px 4px}.E,.u code{font-size:11px}.E{color:rgb(var(--color-foreground)/.45);line-height:1;white-space:nowrap;z-index:1}.a{--space-1:4px;--space-2:calc(var(--space-1)*2);--space-3:calc(var(--space-2)*2);--space-4:calc(var(--space-3)*2);--space-5:calc(var(--space-4)*2);--alpha-light:0.7;--alpha-lighter:0.54;--alpha-lightest:0.07;--color-highlight:var(--md-accent-fg-color,#526cfe);--color-highlight-transparent:var( + --md-accent-fg-color--transparent,#526cfe1a + );--border-radius-1:var(--space-1);--border-radius-2:var(--space-2);--border-radius-3:calc(var(--space-1) + var(--space-2));--font-family:var( + --md-text-font-family,Inter,Roboto Flex,system-ui,sans-serif + );--font-size:16px;--line-height:1.5;--letter-spacing:-0.5px;-webkit-font-smoothing:antialiased;align-items:center;display:flex;font-family:var(--font-family);font-size:var(--font-size);height:100vh;justify-content:center;letter-spacing:var(--letter-spacing);line-height:var(--line-height);pointer-events:none;position:absolute;width:100vw}@media (pointer:coarse){.a{height:-webkit-fill-available}}.a *,.a :after,.a :before{box-sizing:border-box}`;function cc(e,{index$:t}){let r=Ne(),n=document.createElement("div");document.body.appendChild(n),n.style.position="fixed",n.style.height="100%",n.style.top="0",n.style.zIndex="4";let o=n.attachShadow({mode:"open"});o.appendChild(A("style",{},sc.toString()));try{ts(r.search,{highlight:r.features.includes("search.highlight")}),de(t).subscribe(i=>{for(let a of i.items)a.location=new URL(`./${a.location}`,r.base).toString();os(i,o)}),b(e,"click").subscribe(()=>{xo()}),kn("search").pipe(ke(1)).subscribe(()=>xo())}catch(i){e.hidden=!0;let a=Y("label[for=__search]");a.hidden=!0}return Ge}var lc=Zt(Hn());function uc(e,{index$:t,location$:r}){return oe([t,r.pipe(J(Ue()),O(n=>!!n.searchParams.get("h")))]).pipe(f(([n,o])=>Bp(n.config)(o.searchParams.get("h"))),f(n=>{var a;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let s=i.nextNode();s;s=i.nextNode())if((a=s.parentElement)!=null&&a.offsetHeight){let c=s.textContent,l=n(c);l.length>c.length&&o.set(s,l)}for(let[s,c]of o){let{childNodes:l}=A("span",null,c);s.replaceWith(...Array.from(l))}return{ref:e,nodes:o}}))}function Bp(e){let t=e.separator.split("|").map(o=>o.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":o).join("|"),r=new RegExp(t,"img"),n=(o,i,a)=>`${i}<mark data-md-highlight>${a}</mark>`;return o=>{o=o.replace(/\s+/g," ").replace(/&/g,"&").trim();let i=new RegExp(`(^|${e.separator}|)(${o.split(r).map(a=>a.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&")).filter(a=>a.length>=2).join("|")})`,"img");return a=>(0,lc.default)(a).replace(i,n).replace(/<\/mark>(\s+)<mark[^>]*>/img,"$1")}}function Gp(e,{viewport$:t,main$:r}){let n=e.closest(".md-grid"),o=n.offsetTop-n.parentElement.offsetTop;return oe([r,t]).pipe(f(([{offset:i,height:a},{offset:{y:s}}])=>(a=a+Math.min(o,Math.max(0,s-i))-o,{height:a,locked:s>=i+o})),se((i,a)=>i.height===a.height&&i.locked===a.locked))}function Po(e,n){var o=n,{header$:t}=o,r=xr(o,["header$"]);let i=Y(".md-sidebar__scrollwrap",e),{y:a}=St(i);return j(()=>{let s=new I,c=s.pipe(be(),_e(!0)),l=s.pipe(Ze(0,je));return l.pipe(fe(t)).subscribe({next([{height:u},{height:p}]){i.style.height=`${u-2*a}px`,e.style.top=`${p}px`},complete(){i.style.height="",e.style.top=""}}),l.pipe(Lr()).subscribe(()=>{for(let u of $(".md-nav__link--active[href]",e)){if(!u.clientHeight)continue;let p=u.closest(".md-sidebar__scrollwrap");if(typeof p!="undefined"){let d=u.offsetTop-p.offsetTop,{height:m}=Ae(p);p.scrollTo({top:d-m/2})}}}),de($("label[tabindex]",e)).pipe(ae(u=>b(u,"click").pipe(Ie(ye),f(()=>u),ee(c)))).subscribe(u=>{let p=Y(`[id="${u.htmlFor}"]`);Y(`[aria-labelledby="${u.id}"]`).setAttribute("aria-expanded",`${p.checked}`)}),X("content.tooltips")&&de($("abbr[title]",e)).pipe(ae(u=>Je(u,{viewport$})),ee(c)).subscribe(),Gp(e,r).pipe(P(u=>s.next(u)),q(()=>s.complete()),f(u=>k({ref:e},u)))})}function pc(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return Rt(tt(`${r}/releases/latest`).pipe(me(()=>w),f(n=>({version:n.tag_name})),it({})),tt(r).pipe(me(()=>w),f(n=>({stars:n.stargazers_count,forks:n.forks_count})),it({}))).pipe(f(([n,o])=>k(k({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return tt(r).pipe(f(n=>({repositories:n.public_repos})),it({}))}}function fc(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return Rt(tt(`${r}/releases/permalink/latest`).pipe(me(()=>w),f(({tag_name:n})=>({version:n})),it({})),tt(r).pipe(me(()=>w),f(({star_count:n,forks_count:o})=>({stars:n,forks:o})),it({}))).pipe(f(([n,o])=>k(k({},n),o)))}function mc(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,n]=t;return pc(r,n)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,n]=t;return fc(r,n)}return w}var Yp;function Jp(e){return Yp||(Yp=j(()=>{let t=__md_get("__source",sessionStorage);if(t)return D(t);if(Te("consent").length){let n=__md_get("__consent");if(!(n&&n.github))return w}return mc(e.href).pipe(P(n=>__md_set("__source",n,sessionStorage)))}).pipe(me(()=>w),O(t=>Object.keys(t).length>0),f(t=>({facts:t})),ne(1)))}function dc(e){let t=Y(":scope > :last-child",e);return j(()=>{let r=new I;return r.subscribe(({facts:n})=>{t.appendChild(Ss(n)),t.classList.add("md-source__repository--active")}),Jp(e).pipe(P(n=>r.next(n)),q(()=>r.complete()),f(n=>k({ref:e},n)))})}function Xp(e,{viewport$:t,header$:r}){return Re(document.body).pipe(g(()=>An(e,{header$:r,viewport$:t})),f(({offset:{y:n}})=>({hidden:n>=10})),he("hidden"))}function hc(e,t){return j(()=>{let r=new I;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(X("navigation.tabs.sticky")?D({hidden:!1}):Xp(e,t)).pipe(P(n=>r.next(n)),q(()=>r.complete()),f(n=>k({ref:e},n)))})}function Zp(e,{viewport$:t,header$:r}){let n=new Map,o=$(".md-nav__link",e);for(let s of o){let c=decodeURIComponent(s.hash.substring(1)),l=we(`[id="${c}"]`);typeof l!="undefined"&&n.set(s,l)}let i=r.pipe(he("height"),f(({height:s})=>{let c=gt("main"),l=Y(":scope > :first-child",c);return s+.9*(l.offsetTop-c.offsetTop)}),xe());return Re(document.body).pipe(he("height"),g(s=>j(()=>{let c=[];return D([...n].reduce((l,[u,p])=>{for(;c.length&&n.get(c[c.length-1]).tagName>=p.tagName;)c.pop();let d=p.offsetTop;for(;!d&&p.parentElement;)p=p.parentElement,d=p.offsetTop;let m=p.offsetParent;for(;m;m=m.offsetParent)d+=m.offsetTop;return l.set([...c=[...c,u]].reverse(),d)},new Map))}).pipe(f(c=>new Map([...c].sort(([,l],[,u])=>l-u))),Qe(i),g(([c,l])=>t.pipe(Mr(([u,p],{offset:{y:d},size:m})=>{let h=d+m.height>=Math.floor(s.height);for(;p.length;){let[,v]=p[0];if(v-l<d||h)u=[...u,p.shift()];else break}for(;u.length;){let[,v]=u[u.length-1];if(v-l>=d&&!h)p=[u.pop(),...p];else break}return[u,p]},[[],[...c]]),se((u,p)=>u[0]===p[0]&&u[1]===p[1])))))).pipe(f(([s,c])=>({prev:s.map(([l])=>l),next:c.map(([l])=>l)})),J({prev:[],next:[]}),jt(2,1),f(([s,c])=>s.prev.length<c.prev.length?{prev:c.prev.slice(Math.max(0,s.prev.length-1),c.prev.length),next:[]}:{prev:c.prev.slice(-1),next:c.next.slice(0,c.next.length-s.next.length)}))}function vc(e,{viewport$:t,header$:r,main$:n,target$:o}){return j(()=>{let i=new I,a=i.pipe(be(),_e(!0));i.subscribe(({prev:c,next:l})=>{for(let[u]of l)u.classList.remove("md-nav__link--passed"),u.classList.remove("md-nav__link--active");for(let[u,[p]]of c.entries())p.classList.add("md-nav__link--passed"),p.classList.toggle("md-nav__link--active",u===c.length-1)});let s=we(".md-sidebar--secondary");if(typeof s!="undefined"&&b(document.body,"click").subscribe(c=>{let l=c.target;if(!s.contains(l)){let u=we(".md-nav__toggle",s);typeof u!="undefined"&&(u.checked=!1)}}),X("toc.follow")){let c=R(t.pipe(Ye(1),f(()=>{})),t.pipe(Ye(250),f(()=>"smooth")));i.pipe(O(({prev:l})=>l.length>0),Qe(n.pipe(Ie(ye))),fe(c)).subscribe(([[{prev:l}],u])=>{let[p]=l[l.length-1];if(p.offsetHeight){let d=$i(p);if(typeof d!="undefined"){let m=p.offsetTop-d.offsetTop,{height:h}=Ae(d);d.scrollTo({top:m-h/2,behavior:u})}}})}return X("navigation.tracking")&&t.pipe(ee(a),he("offset"),Ye(250),ke(1),ee(o.pipe(ke(1))),Nt({delay:250}),fe(i)).subscribe(([,{prev:c}])=>{let l=Ue(),u=c[c.length-1];if(u&&u.length){let[p]=u,{hash:d}=new URL(p.href);l.hash!==d&&(l.hash=d,history.replaceState({},"",`${l}`))}else l.hash="",history.replaceState({},"",`${l}`)}),Zp(e,{viewport$:t,header$:r}).pipe(P(c=>i.next(c)),q(()=>i.complete()),f(c=>k({ref:e},c)))})}function Qp(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(f(({offset:{y:a}})=>a),jt(2,1),f(([a,s])=>a>s&&s>0),se()),i=r.pipe(f(({active:a})=>a));return oe([i,o]).pipe(f(([a,s])=>!(a&&s)),se(),ee(n.pipe(ke(1))),_e(!0),Nt({delay:250}),f(a=>({hidden:a})))}function bc(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new I,a=i.pipe(be(),_e(!0));return i.subscribe({next({hidden:s}){e.hidden=s,s?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(ee(a),he("height")).subscribe(({height:s})=>{e.style.top=`${s+16}px`}),b(e,"click").subscribe(s=>{s.preventDefault(),window.scrollTo({top:0})}),Qp(e,{viewport$:t,main$:n,target$:o}).pipe(P(s=>i.next(s)),q(()=>i.complete()),f(s=>k({ref:e},s)))}function gc(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,t.port&&(e.port=t.port),e}function ef(e,t){let r=new Map;for(let n of $("url",e)){let o=Y("loc",n),i=[gc(new URL(o.textContent),t)];r.set(`${i[0]}`,i);for(let a of $("[rel=alternate]",n)){let s=a.getAttribute("href");s!=null&&i.push(gc(new URL(s),t))}}return r}function br(e){return ps(new URL("sitemap.xml",e)).pipe(f(t=>ef(t,new URL(e))),me(()=>D(new Map)),xe())}function yc({document$:e}){let t=new Map;e.pipe(g(()=>$("link[rel=alternate]")),f(r=>new URL(r.href)),O(r=>!t.has(r.toString())),ae(r=>br(r).pipe(f(n=>[r,n]),me(()=>w)))).subscribe(([r,n])=>{t.set(r.toString().replace(/\/$/,""),n)}),b(document.body,"click").pipe(O(r=>!r.metaKey&&!r.ctrlKey),g(r=>{if(r.target instanceof Element){let n=r.target.closest("a");if(n&&!n.target){let o=[...t].find(([p])=>n.href.startsWith(`${p}/`));if(typeof o=="undefined")return w;let[i,a]=o,s=Ue();if(s.href.startsWith(i))return w;let c=Ne(),l=s.href.replace(c.base,"");l=`${i}/${l}`;let u=a.has(l.split("#")[0])?new URL(l,c.base):new URL(i);return r.preventDefault(),D(u)}}return w})).subscribe(r=>bt(r,!0))}var Io=Zt(Ao());function tf(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function _c({alert$:e}){Io.default.isSupported()&&new F(t=>{new Io.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||tf(Y(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(P(t=>{t.trigger.focus()}),f(()=>Yt("clipboard.copied"))).subscribe(e)}function xc(e,t){if(!(e.target instanceof Element))return w;let r=e.target.closest("a");if(r===null)return w;if(r.target||e.metaKey||e.ctrlKey)return w;let n=new URL(r.href);return n.search=n.hash="",t.has(`${n}`)?(e.preventDefault(),D(r)):w}function wc(e){let t=new Map;for(let r of $(":scope > *",e.head))t.set(r.outerHTML,r);return t}function Ec(e){for(let t of $("[href], [src]",e))for(let r of["href","src"]){let n=t.getAttribute(r);if(n&&!/^(?:[a-z]+:)?\/\//i.test(n)){t[r]=t[r];break}}return D(e)}function rf(e){var r;if(e.tagName!=="STYLE")return!1;let t=(r=e.textContent)!=null?r:"";return t.includes(".ace_editor")||t.includes(".ace-zensical")||t.includes(".ace_scroller")||t.includes(".ace_gutter")}function nf(e){for(let n of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...X("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let o=we(n),i=we(n,e);typeof o!="undefined"&&typeof i!="undefined"&&o.replaceWith(i)}let t=wc(document);for(let[n,o]of wc(e))t.has(n)?t.delete(n):document.head.appendChild(o);for(let n of t.values()){let o=n.getAttribute("name");o!=="theme-color"&&o!=="color-scheme"&&!rf(n)&&n.remove()}let r=gt("container");return ot($("script",r)).pipe(g(n=>{let o=e.createElement("script");if(n.src){for(let i of n.getAttributeNames())o.setAttribute(i,n.getAttribute(i));return n.replaceWith(o),new F(i=>{o.onload=()=>i.complete()})}else return o.textContent=n.textContent,n.replaceWith(o),w}),be(),_e(document))}function Tc({sitemap$:e,location$:t,viewport$:r,progress$:n}){if(location.protocol==="file:")return Ge;D(document).subscribe(Ec);let o=b(document.body,"click").pipe(Qe(e),g(([s,c])=>xc(s,c)),f(({href:s})=>new URL(s)),xe()),i=b(window,"popstate").pipe(f(Ue),xe());o.pipe(fe(r)).subscribe(([s,{offset:c}])=>{history.replaceState(c,""),history.pushState(null,"",s)}),R(o,i).subscribe(t);let a=t.pipe(J(Ue()),mn(),O(([s,c])=>s.pathname!==c.pathname),f(([,s])=>s),g(s=>Mn(s,{progress$:n}).pipe(me(()=>(bt(s,!0),w)))),g(Ec),g(nf),xe());return R(a.pipe(fe(t,(s,c)=>c)),a.pipe(g(()=>t),he("hash")),t.pipe(J(Ue()),mn(),O(([s,c])=>s.pathname===c.pathname&&s.hash!==c.hash),f(([,s])=>s)),t.pipe(se((s,c)=>s.pathname===c.pathname&&s.hash===c.hash),g(()=>o),P(()=>history.back()))).subscribe(s=>{var c,l;history.state!==null||!s.hash?window.scrollTo(0,(l=(c=history.state)==null?void 0:c.y)!=null?l:0):(history.scrollRestoration="auto",cs(s.hash),history.scrollRestoration="manual")}),t.subscribe(()=>{history.scrollRestoration="manual"}),b(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),r.pipe(he("offset"),Ye(100)).subscribe(({offset:s})=>{history.replaceState(s,"")}),X("navigation.instant.prefetch")&&R(b(document.body,"mousemove"),b(document.body,"focusin")).pipe(Qe(e),g(([s,c])=>xc(s,c)),Ye(25),Qn(({href:s})=>s),fn(s=>{let c=document.createElement("link");return c.rel="prefetch",c.href=s.toString(),document.head.appendChild(c),b(c,"load").pipe(f(()=>c),Me(1))})).subscribe(s=>s.remove()),a}function Sc(e){var u;let{selectedVersionSitemap:t,selectedVersionBaseURL:r,currentLocation:n,currentBaseURL:o}=e,i=(u=Ro(o))==null?void 0:u.pathname;if(i===void 0)return;let a=of(n.pathname,i);if(a===void 0)return;let s=sf(t.keys());if(!t.has(s))return;let c=Ro(a,s);if(!c||!t.has(c.href))return;let l=Ro(a,r);if(l)return l.hash=n.hash,l.search=n.search,l}function Ro(e,t){try{return new URL(e,t)}catch(r){return}}function of(e,t){if(e.startsWith(t))return e.slice(t.length)}function af(e,t){let r=Math.min(e.length,t.length),n;for(n=0;n<r&&e[n]===t[n];++n);return n}function sf(e){let t;for(let r of e)t===void 0?t=r:t=t.slice(0,af(t,r));return t!=null?t:""}function Oc({document$:e}){let t=Ne(),r=tt(new URL("../versions.json",t.base)).pipe(me(()=>w)),n=r.pipe(f(o=>{let[,i]=t.base.match(/([^/]+)\/?$/);return o.find(({version:a,aliases:s})=>a===i||s.includes(i))||o[0]}));r.pipe(f(o=>new Map(o.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),g(o=>b(document.body,"click").pipe(O(i=>!i.metaKey&&!i.ctrlKey),fe(n),g(([i,a])=>{if(i.target instanceof Element){let s=i.target.closest("a");if(s&&!s.target&&o.has(s.href)){let c=s.href;return!i.target.closest(".md-version")&&o.get(c)===a?w:(i.preventDefault(),D(new URL(c)))}}return w}),g(i=>br(i).pipe(f(a=>{var s;return(s=Sc({selectedVersionSitemap:a,selectedVersionBaseURL:i,currentLocation:Ue(),currentBaseURL:t.base}))!=null?s:i})))))).subscribe(o=>bt(o,!0)),oe([r,n]).subscribe(([o,i])=>{Y(".md-header__topic").appendChild(Ls(o,i))}),e.pipe(g(()=>n)).subscribe(o=>{var s;let i=new URL(t.base),a=__md_get("__outdated",sessionStorage,i);if(a===null){a=!0;let c=((s=t.version)==null?void 0:s.default)||"latest";Array.isArray(c)||(c=[c]);e:for(let l of c)for(let u of o.aliases.concat(o.version))if(new RegExp(l,"i").test(u)){a=!1;break e}__md_set("__outdated",a,sessionStorage,i)}if(a)for(let c of Te("outdated"))c.hidden=!1})}function Lc({document$:e,viewport$:t}){e.pipe(g(()=>$(".md-ellipsis")),ae(r=>Ot(r).pipe(ee(e.pipe(ke(1))),O(n=>n),f(()=>r),Me(1))),O(r=>r.offsetWidth<r.scrollWidth),ae(r=>{let n=r.innerText,o=r.closest("a")||r;return o.title=n,X("content.tooltips")?Je(o,{viewport$:t}).pipe(ee(e.pipe(ke(1))),q(()=>o.removeAttribute("title"))):w})).subscribe(),X("content.tooltips")&&e.pipe(g(()=>$(".md-status")),ae(r=>Je(r,{viewport$:t}))).subscribe()}function Mc({document$:e,tablet$:t}){e.pipe(g(()=>$(".md-toggle--indeterminate")),P(r=>{r.indeterminate=!0,r.checked=!1}),ae(r=>b(r,"change").pipe(ro(()=>r.classList.contains("md-toggle--indeterminate")),f(()=>r))),fe(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function cf(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function kc({document$:e}){e.pipe(g(()=>$("[data-md-scrollfix]")),P(t=>t.removeAttribute("data-md-scrollfix")),O(cf),ae(t=>b(t,"touchstart").pipe(f(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n=="string"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));function lf(){return location.protocol==="file:"?at(`${new URL("search.js",Pn.base)}`).pipe(f(()=>__index),me(()=>Ge),ne(1)):tt(new URL("search.json",Pn.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var yt=Mi(),Wr=as(),gr=ls(Wr),Cc=is(),Ke=vs(),jo=jr("(min-width: 60em)"),Hc=jr("(min-width: 76.25em)"),$c=us(),Pn=Ne(),Pc=we(".md-search")?lf():Ge,Fo=new I;_c({alert$:Fo});yc({document$:yt});var Uo=new I,Ic=br(Pn.base);X("navigation.instant")&&Tc({sitemap$:Ic,location$:Wr,viewport$:Ke,progress$:Uo}).subscribe(yt);var Ac;((Ac=Pn.version)==null?void 0:Ac.provider)==="mike"&&Oc({document$:yt});R(Wr,gr).pipe(Ft(125)).subscribe(()=>{Oo("drawer",!1),Oo("search",!1)});Cc.pipe(O(({mode:e,meta:t})=>e==="global"&&!t)).subscribe(e=>{switch(e.type){case",":case"p":let t=document.querySelector("link[rel=prev]");t instanceof HTMLLinkElement&&bt(t);break;case".":case"n":let r=document.querySelector("link[rel=next]");r instanceof HTMLLinkElement&&bt(r);break;case"/":let n=document.querySelector("[data-md-component=search] button");n instanceof HTMLButtonElement&&n.click();break;case"Enter":let o=Tt();o instanceof HTMLLabelElement&&o.click()}});Lc({viewport$:Ke,document$:yt});Mc({document$:yt,tablet$:jo});kc({document$:yt});var Ct=tc(gt("header"),{viewport$:Ke}),Dr=yt.pipe(f(()=>gt("main")),g(e=>oc(e,{viewport$:Ke,header$:Ct})),ne(1)),uf=R(...Te("consent").map(e=>gs(e,{target$:gr})),...Te("dialog").map(e=>ec(e,{alert$:Fo})),...Te("palette").map(e=>ic(e)),...Te("progress").map(e=>ac(e,{progress$:Uo})),...Te("search").map(e=>cc(e,{index$:Pc})),...Te("source").map(e=>dc(e))),pf=j(()=>R(...Te("announce").map(e=>bs(e)),...Te("content").map(e=>Qs(e,{sitemap$:Ic,viewport$:Ke,target$:gr,print$:$c})),...Te("content").map(e=>X("search.highlight")?uc(e,{index$:Pc,location$:Wr}):w),...Te("header").map(e=>rc(e,{viewport$:Ke,header$:Ct,main$:Dr})),...Te("header-title").map(e=>nc(e,{viewport$:Ke,header$:Ct})),...Te("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Eo(Hc,()=>Po(e,{viewport$:Ke,header$:Ct,main$:Dr})):Eo(jo,()=>Po(e,{viewport$:Ke,header$:Ct,main$:Dr}))),...Te("tabs").map(e=>hc(e,{viewport$:Ke,header$:Ct})),...Te("toc").map(e=>vc(e,{viewport$:Ke,header$:Ct,main$:Dr,target$:gr})),...Te("top").map(e=>bc(e,{viewport$:Ke,header$:Ct,main$:Dr,target$:gr})))),Rc=yt.pipe(g(()=>pf),Ut(uf),ne(1));Rc.subscribe();window.document$=yt;window.location$=Wr;window.target$=gr;window.keyboard$=Cc;window.viewport$=Ke;window.tablet$=jo;window.screen$=Hc;window.print$=$c;window.alert$=Fo;window.progress$=Uo;window.component$=Rc;})(); diff --git a/site/assets/javascripts/bundle.ee611ef6.min.js b/site/assets/javascripts/bundle.ee611ef6.min.js deleted file mode 100644 index 00471bcbd..000000000 --- a/site/assets/javascripts/bundle.ee611ef6.min.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict";(()=>{var Lc=Object.create;var Cn=Object.defineProperty,Mc=Object.defineProperties,kc=Object.getOwnPropertyDescriptor,Ac=Object.getOwnPropertyDescriptors,Cc=Object.getOwnPropertyNames,Dr=Object.getOwnPropertySymbols,Hc=Object.getPrototypeOf,Hn=Object.prototype.hasOwnProperty,jo=Object.prototype.propertyIsEnumerable;var Ro=(e,t,r)=>t in e?Cn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k=(e,t)=>{for(var r in t||(t={}))Hn.call(t,r)&&Ro(e,r,t[r]);if(Dr)for(var r of Dr(t))jo.call(t,r)&&Ro(e,r,t[r]);return e},He=(e,t)=>Mc(e,Ac(t));var gr=(e,t)=>{var r={};for(var n in e)Hn.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Dr)for(var n of Dr(e))t.indexOf(n)<0&&jo.call(e,n)&&(r[n]=e[n]);return r};var $n=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}};var $c=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Cc(t))!Hn.call(e,o)&&o!==r&&Cn(e,o,{get:()=>t[o],enumerable:!(n=kc(t,o))||n.enumerable});return e};var _r=(e,t,r)=>(r=e!=null?Lc(Hc(e)):{},$c(t||!e||!e.__esModule?Cn(r,"default",{value:e,enumerable:!0}):r,e));var Fo=(e,t,r)=>new Promise((n,o)=>{var i=c=>{try{s(r.next(c))}catch(l){o(l)}},a=c=>{try{s(r.throw(c))}catch(l){o(l)}},s=c=>c.done?n(c.value):Promise.resolve(c.value).then(i,a);s((r=r.apply(e,t)).next())});var No=$n((Pn,Uo)=>{(function(e,t){typeof Pn=="object"&&typeof Uo!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(Pn,(function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(_){return!!(_&&_!==document&&_.nodeName!=="HTML"&&_.nodeName!=="BODY"&&"classList"in _&&"contains"in _.classList)}function c(_){var Z=_.type,ve=_.tagName;return!!(ve==="INPUT"&&a[Z]&&!_.readOnly||ve==="TEXTAREA"&&!_.readOnly||_.isContentEditable)}function l(_){_.classList.contains("focus-visible")||(_.classList.add("focus-visible"),_.setAttribute("data-focus-visible-added",""))}function u(_){_.hasAttribute("data-focus-visible-added")&&(_.classList.remove("focus-visible"),_.removeAttribute("data-focus-visible-added"))}function p(_){_.metaKey||_.altKey||_.ctrlKey||(s(r.activeElement)&&l(r.activeElement),n=!0)}function d(_){n=!1}function m(_){s(_.target)&&(n||c(_.target))&&l(_.target)}function h(_){s(_.target)&&(_.target.classList.contains("focus-visible")||_.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(_.target))}function v(_){document.visibilityState==="hidden"&&(o&&(n=!0),y())}function y(){document.addEventListener("mousemove",E),document.addEventListener("mousedown",E),document.addEventListener("mouseup",E),document.addEventListener("pointermove",E),document.addEventListener("pointerdown",E),document.addEventListener("pointerup",E),document.addEventListener("touchmove",E),document.addEventListener("touchstart",E),document.addEventListener("touchend",E)}function x(){document.removeEventListener("mousemove",E),document.removeEventListener("mousedown",E),document.removeEventListener("mouseup",E),document.removeEventListener("pointermove",E),document.removeEventListener("pointerdown",E),document.removeEventListener("pointerup",E),document.removeEventListener("touchmove",E),document.removeEventListener("touchstart",E),document.removeEventListener("touchend",E)}function E(_){_.target.nodeName&&_.target.nodeName.toLowerCase()==="html"||(n=!1,x())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",d,!0),document.addEventListener("pointerdown",d,!0),document.addEventListener("touchstart",d,!0),document.addEventListener("visibilitychange",v,!0),y(),r.addEventListener("focus",m,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)}))});var To=$n((D0,ys)=>{"use strict";var rp=/["'&<>]/;ys.exports=np;function np(e){var t=""+e,r=rp.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i<t.length;i++){switch(t.charCodeAt(i)){case 34:n=""";break;case 38:n="&";break;case 39:n="'";break;case 60:n="<";break;case 62:n=">";break;default:continue}a!==i&&(o+=t.substring(a,i)),a=i+1,o+=n}return a!==i?o+t.substring(a,i):o}});var Lo=$n((jr,Oo)=>{(function(t,r){typeof jr=="object"&&typeof Oo=="object"?Oo.exports=r():typeof define=="function"&&define.amd?define([],r):typeof jr=="object"?jr.ClipboardJS=r():t.ClipboardJS=r()})(jr,function(){return(function(){var e={686:(function(n,o,i){"use strict";i.d(o,{default:function(){return vr}});var a=i(279),s=i.n(a),c=i(370),l=i.n(c),u=i(817),p=i.n(u);function d(G){try{return document.execCommand(G)}catch(H){return!1}}var m=function(H){var C=p()(H);return d("cut"),C},h=m;function v(G){var H=document.documentElement.getAttribute("dir")==="rtl",C=document.createElement("textarea");C.style.fontSize="12pt",C.style.border="0",C.style.padding="0",C.style.margin="0",C.style.position="absolute",C.style[H?"right":"left"]="-9999px";var W=window.pageYOffset||document.documentElement.scrollTop;return C.style.top="".concat(W,"px"),C.setAttribute("readonly",""),C.value=G,C}var y=function(H,C){var W=v(H);C.container.appendChild(W);var V=p()(W);return d("copy"),W.remove(),V},x=function(H){var C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},W="";return typeof H=="string"?W=y(H,C):H instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(H==null?void 0:H.type)?W=y(H.value,C):(W=p()(H),d("copy")),W},E=x;function _(G){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_=function(C){return typeof C}:_=function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C},_(G)}var Z=function(){var H=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},C=H.action,W=C===void 0?"copy":C,V=H.container,Q=H.target,Ve=H.text;if(W!=="copy"&&W!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(Q!==void 0)if(Q&&_(Q)==="object"&&Q.nodeType===1){if(W==="copy"&&Q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(W==="cut"&&(Q.hasAttribute("readonly")||Q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Ve)return E(Ve,{container:V});if(Q)return W==="cut"?h(Q):E(Q,{container:V})},ve=Z;function L(G){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?L=function(C){return typeof C}:L=function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C},L(G)}function M(G,H){if(!(G instanceof H))throw new TypeError("Cannot call a class as a function")}function D(G,H){for(var C=0;C<H.length;C++){var W=H[C];W.enumerable=W.enumerable||!1,W.configurable=!0,"value"in W&&(W.writable=!0),Object.defineProperty(G,W.key,W)}}function te(G,H,C){return H&&D(G.prototype,H),C&&D(G,C),G}function ue(G,H){if(typeof H!="function"&&H!==null)throw new TypeError("Super expression must either be null or a function");G.prototype=Object.create(H&&H.prototype,{constructor:{value:G,writable:!0,configurable:!0}}),H&&le(G,H)}function le(G,H){return le=Object.setPrototypeOf||function(W,V){return W.__proto__=V,W},le(G,H)}function De(G){var H=lt();return function(){var W=rt(G),V;if(H){var Q=rt(this).constructor;V=Reflect.construct(W,arguments,Q)}else V=W.apply(this,arguments);return bt(this,V)}}function bt(G,H){return H&&(L(H)==="object"||typeof H=="function")?H:We(G)}function We(G){if(G===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return G}function lt(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(G){return!1}}function rt(G){return rt=Object.setPrototypeOf?Object.getPrototypeOf:function(C){return C.__proto__||Object.getPrototypeOf(C)},rt(G)}function Yt(G,H){var C="data-clipboard-".concat(G);if(H.hasAttribute(C))return H.getAttribute(C)}var At=(function(G){ue(C,G);var H=De(C);function C(W,V){var Q;return M(this,C),Q=H.call(this),Q.resolveOptions(V),Q.listenClick(W),Q}return te(C,[{key:"resolveOptions",value:function(){var V=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof V.action=="function"?V.action:this.defaultAction,this.target=typeof V.target=="function"?V.target:this.defaultTarget,this.text=typeof V.text=="function"?V.text:this.defaultText,this.container=L(V.container)==="object"?V.container:document.body}},{key:"listenClick",value:function(V){var Q=this;this.listener=l()(V,"click",function(Ve){return Q.onClick(Ve)})}},{key:"onClick",value:function(V){var Q=V.delegateTarget||V.currentTarget,Ve=this.action(Q)||"copy",Jt=ve({action:Ve,container:this.container,target:this.target(Q),text:this.text(Q)});this.emit(Jt?"success":"error",{action:Ve,text:Jt,trigger:Q,clearSelection:function(){Q&&Q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(V){return Yt("action",V)}},{key:"defaultTarget",value:function(V){var Q=Yt("target",V);if(Q)return document.querySelector(Q)}},{key:"defaultText",value:function(V){return Yt("text",V)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(V){var Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return E(V,Q)}},{key:"cut",value:function(V){return h(V)}},{key:"isSupported",value:function(){var V=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],Q=typeof V=="string"?[V]:V,Ve=!!document.queryCommandSupported;return Q.forEach(function(Jt){Ve=Ve&&!!document.queryCommandSupported(Jt)}),Ve}}]),C})(s()),vr=At}),828:(function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,c){for(;s&&s.nodeType!==o;){if(typeof s.matches=="function"&&s.matches(c))return s;s=s.parentNode}}n.exports=a}),438:(function(n,o,i){var a=i(828);function s(u,p,d,m,h){var v=l.apply(this,arguments);return u.addEventListener(d,v,h),{destroy:function(){u.removeEventListener(d,v,h)}}}function c(u,p,d,m,h){return typeof u.addEventListener=="function"?s.apply(null,arguments):typeof d=="function"?s.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return s(v,p,d,m,h)}))}function l(u,p,d,m){return function(h){h.delegateTarget=a(h.target,p),h.delegateTarget&&m.call(u,h)}}n.exports=c}),879:(function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}}),370:(function(n,o,i){var a=i(879),s=i(438);function c(d,m,h){if(!d&&!m&&!h)throw new Error("Missing required arguments");if(!a.string(m))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(d))return l(d,m,h);if(a.nodeList(d))return u(d,m,h);if(a.string(d))return p(d,m,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function l(d,m,h){return d.addEventListener(m,h),{destroy:function(){d.removeEventListener(m,h)}}}function u(d,m,h){return Array.prototype.forEach.call(d,function(v){v.addEventListener(m,h)}),{destroy:function(){Array.prototype.forEach.call(d,function(v){v.removeEventListener(m,h)})}}}function p(d,m,h){return s(document.body,d,m,h)}n.exports=c}),817:(function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),l=document.createRange();l.selectNodeContents(i),c.removeAllRanges(),c.addRange(l),a=c.toString()}return a}n.exports=o}),279:(function(n){function o(){}o.prototype={on:function(i,a,s){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var c=this;function l(){c.off(i,l),a.apply(s,arguments)}return l._=a,this.on(i,l,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),c=0,l=s.length;for(c;c<l;c++)s[c].fn.apply(s[c].ctx,a);return this},off:function(i,a){var s=this.e||(this.e={}),c=s[i],l=[];if(c&&a)for(var u=0,p=c.length;u<p;u++)c[u].fn!==a&&c[u].fn._!==a&&l.push(c[u]);return l.length?s[i]=l:delete s[i],this}},n.exports=o,n.exports.TinyEmitter=o})},t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}return(function(){r.n=function(n){var o=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(o,{a:o}),o}})(),(function(){r.d=function(n,o){for(var i in o)r.o(o,i)&&!r.o(n,i)&&Object.defineProperty(n,i,{enumerable:!0,get:o[i]})}})(),(function(){r.o=function(n,o){return Object.prototype.hasOwnProperty.call(n,o)}})(),r(686)})().default})});var GM=_r(No());var In=function(e,t){return In=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[o]=n[o])},In(e,t)};function pe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");In(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}function Do(e,t,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(p){a(p)}}function c(u){try{l(n.throw(u))}catch(p){a(p)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(e,t||[])).next())})}function Wr(e,t){var r={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(r=0)),r;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=t.call(e,r)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}function $e(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function re(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],a;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i}function oe(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n<o;n++)(i||!(n in t))&&(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))}function Ct(e){return this instanceof Ct?(this.v=e,this):new Ct(e)}function Wo(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(e,t||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",a),o[Symbol.asyncIterator]=function(){return this},o;function a(m){return function(h){return Promise.resolve(h).then(m,p)}}function s(m,h){n[m]&&(o[m]=function(v){return new Promise(function(y,x){i.push([m,v,y,x])>1||c(m,v)})},h&&(o[m]=h(o[m])))}function c(m,h){try{l(n[m](h))}catch(v){d(i[0][3],v)}}function l(m){m.value instanceof Ct?Promise.resolve(m.value.v).then(u,p):d(i[0][2],m)}function u(m){c("next",m)}function p(m){c("throw",m)}function d(m,h){m(h),i.shift(),i.length&&c(i[0][0],i[0][1])}}function Vo(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof $e=="function"?$e(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(a){return new Promise(function(s,c){a=e[i](a),o(s,c,a.done,a.value)})}}function o(i,a,s,c){Promise.resolve(c).then(function(l){i({value:l,done:s})},a)}}function F(e){return typeof e=="function"}function Xt(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Vr=Xt(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: -`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=r}});function ut(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var nt=(function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=$e(a),c=s.next();!c.done;c=s.next()){var l=c.value;l.remove(this)}}catch(v){t={error:v}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var u=this.initialTeardown;if(F(u))try{u()}catch(v){i=v instanceof Vr?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var d=$e(p),m=d.next();!m.done;m=d.next()){var h=m.value;try{zo(h)}catch(v){i=i!=null?i:[],v instanceof Vr?i=oe(oe([],re(i)),re(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{m&&!m.done&&(o=d.return)&&o.call(d)}finally{if(n)throw n.error}}}if(i)throw new Vr(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)zo(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&ut(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&ut(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e})();var Rn=nt.EMPTY;function zr(e){return e instanceof nt||e&&"closed"in e&&F(e.remove)&&F(e.add)&&F(e.unsubscribe)}function zo(e){F(e)?e():e.unsubscribe()}var Xe={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var Zt={setTimeout:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=Zt.delegate;return o!=null&&o.setTimeout?o.setTimeout.apply(o,oe([e,t],re(r))):setTimeout.apply(void 0,oe([e,t],re(r)))},clearTimeout:function(e){var t=Zt.delegate;return((t==null?void 0:t.clearTimeout)||clearTimeout)(e)},delegate:void 0};function qr(e){Zt.setTimeout(function(){var t=Xe.onUnhandledError;if(t)t(e);else throw e})}function Pe(){}var qo=(function(){return jn("C",void 0,void 0)})();function Ko(e){return jn("E",void 0,e)}function Bo(e){return jn("N",e,void 0)}function jn(e,t,r){return{kind:e,value:t,error:r}}var Ht=null;function Qt(e){if(Xe.useDeprecatedSynchronousErrorHandling){var t=!Ht;if(t&&(Ht={errorThrown:!1,error:null}),e(),t){var r=Ht,n=r.errorThrown,o=r.error;if(Ht=null,n)throw o}}else e()}function Go(e){Xe.useDeprecatedSynchronousErrorHandling&&Ht&&(Ht.errorThrown=!0,Ht.error=e)}var yr=(function(e){pe(t,e);function t(r){var n=e.call(this)||this;return n.isStopped=!1,r?(n.destination=r,zr(r)&&r.add(n)):n.destination=jc,n}return t.create=function(r,n,o){return new $t(r,n,o)},t.prototype.next=function(r){this.isStopped?Un(Bo(r),this):this._next(r)},t.prototype.error=function(r){this.isStopped?Un(Ko(r),this):(this.isStopped=!0,this._error(r))},t.prototype.complete=function(){this.isStopped?Un(qo,this):(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(r){this.destination.next(r)},t.prototype._error=function(r){try{this.destination.error(r)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t})(nt);var Pc=Function.prototype.bind;function Fn(e,t){return Pc.call(e,t)}var Ic=(function(){function e(t){this.partialObserver=t}return e.prototype.next=function(t){var r=this.partialObserver;if(r.next)try{r.next(t)}catch(n){Kr(n)}},e.prototype.error=function(t){var r=this.partialObserver;if(r.error)try{r.error(t)}catch(n){Kr(n)}else Kr(t)},e.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(r){Kr(r)}},e})(),$t=(function(e){pe(t,e);function t(r,n,o){var i=e.call(this)||this,a;if(F(r)||!r)a={next:r!=null?r:void 0,error:n!=null?n:void 0,complete:o!=null?o:void 0};else{var s;i&&Xe.useDeprecatedNextContext?(s=Object.create(r),s.unsubscribe=function(){return i.unsubscribe()},a={next:r.next&&Fn(r.next,s),error:r.error&&Fn(r.error,s),complete:r.complete&&Fn(r.complete,s)}):a=r}return i.destination=new Ic(a),i}return t})(yr);function Kr(e){Xe.useDeprecatedSynchronousErrorHandling?Go(e):qr(e)}function Rc(e){throw e}function Un(e,t){var r=Xe.onStoppedNotification;r&&Zt.setTimeout(function(){return r(e,t)})}var jc={closed:!0,next:Pe,error:Rc,complete:Pe};var er=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Le(e){return e}function Yo(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Nn(e)}function Nn(e){return e.length===0?Le:e.length===1?e[0]:function(r){return e.reduce(function(n,o){return o(n)},r)}}var N=(function(){function e(t){t&&(this._subscribe=t)}return e.prototype.lift=function(t){var r=new e;return r.source=this,r.operator=t,r},e.prototype.subscribe=function(t,r,n){var o=this,i=Uc(t)?t:new $t(t,r,n);return Qt(function(){var a=o,s=a.operator,c=a.source;i.add(s?s.call(i,c):c?o._subscribe(i):o._trySubscribe(i))}),i},e.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(r){t.error(r)}},e.prototype.forEach=function(t,r){var n=this;return r=Jo(r),new r(function(o,i){var a=new $t({next:function(s){try{t(s)}catch(c){i(c),a.unsubscribe()}},error:i,complete:o});n.subscribe(a)})},e.prototype._subscribe=function(t){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(t)},e.prototype[er]=function(){return this},e.prototype.pipe=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return Nn(t)(this)},e.prototype.toPromise=function(t){var r=this;return t=Jo(t),new t(function(n,o){var i;r.subscribe(function(a){return i=a},function(a){return o(a)},function(){return n(i)})})},e.create=function(t){return new e(t)},e})();function Jo(e){var t;return(t=e!=null?e:Xe.Promise)!==null&&t!==void 0?t:Promise}function Fc(e){return e&&F(e.next)&&F(e.error)&&F(e.complete)}function Uc(e){return e&&e instanceof yr||Fc(e)&&zr(e)}function Nc(e){return F(e==null?void 0:e.lift)}function S(e){return function(t){if(Nc(t))return t.lift(function(r){try{return e(r,this)}catch(n){this.error(n)}});throw new TypeError("Unable to lift unknown Observable type")}}function T(e,t,r,n,o){return new Dc(e,t,r,n,o)}var Dc=(function(e){pe(t,e);function t(r,n,o,i,a,s){var c=e.call(this,r)||this;return c.onFinalize=a,c.shouldUnsubscribe=s,c._next=n?function(l){try{n(l)}catch(u){r.error(u)}}:e.prototype._next,c._error=i?function(l){try{i(l)}catch(u){r.error(u)}finally{this.unsubscribe()}}:e.prototype._error,c._complete=o?function(){try{o()}catch(l){r.error(l)}finally{this.unsubscribe()}}:e.prototype._complete,c}return t.prototype.unsubscribe=function(){var r;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var n=this.closed;e.prototype.unsubscribe.call(this),!n&&((r=this.onFinalize)===null||r===void 0||r.call(this))}},t})(yr);var tr={schedule:function(e){var t=requestAnimationFrame,r=cancelAnimationFrame,n=tr.delegate;n&&(t=n.requestAnimationFrame,r=n.cancelAnimationFrame);var o=t(function(i){r=void 0,e(i)});return new nt(function(){return r==null?void 0:r(o)})},requestAnimationFrame:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=tr.delegate;return((r==null?void 0:r.requestAnimationFrame)||requestAnimationFrame).apply(void 0,oe([],re(e)))},cancelAnimationFrame:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=tr.delegate;return((r==null?void 0:r.cancelAnimationFrame)||cancelAnimationFrame).apply(void 0,oe([],re(e)))},delegate:void 0};var Xo=Xt(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}});var I=(function(e){pe(t,e);function t(){var r=e.call(this)||this;return r.closed=!1,r.currentObservers=null,r.observers=[],r.isStopped=!1,r.hasError=!1,r.thrownError=null,r}return t.prototype.lift=function(r){var n=new Zo(this,this);return n.operator=r,n},t.prototype._throwIfClosed=function(){if(this.closed)throw new Xo},t.prototype.next=function(r){var n=this;Qt(function(){var o,i;if(n._throwIfClosed(),!n.isStopped){n.currentObservers||(n.currentObservers=Array.from(n.observers));try{for(var a=$e(n.currentObservers),s=a.next();!s.done;s=a.next()){var c=s.value;c.next(r)}}catch(l){o={error:l}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}}})},t.prototype.error=function(r){var n=this;Qt(function(){if(n._throwIfClosed(),!n.isStopped){n.hasError=n.isStopped=!0,n.thrownError=r;for(var o=n.observers;o.length;)o.shift().error(r)}})},t.prototype.complete=function(){var r=this;Qt(function(){if(r._throwIfClosed(),!r.isStopped){r.isStopped=!0;for(var n=r.observers;n.length;)n.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var r;return((r=this.observers)===null||r===void 0?void 0:r.length)>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,s=o.observers;return i||a?Rn:(this.currentObservers=null,s.push(r),new nt(function(){n.currentObservers=null,ut(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new N;return r.source=this,r},t.create=function(r,n){return new Zo(r,n)},t})(N);var Zo=(function(e){pe(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Rn},t})(I);var Dn=(function(e){pe(t,e);function t(r){var n=e.call(this)||this;return n._value=r,n}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var n=e.prototype._subscribe.call(this,r);return!n.closed&&r.next(this._value),n},t.prototype.getValue=function(){var r=this,n=r.hasError,o=r.thrownError,i=r._value;if(n)throw o;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t})(I);var xr={now:function(){return(xr.delegate||Date).now()},delegate:void 0};var wr=(function(e){pe(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=xr);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,s=n._timestampProvider,c=n._windowTime;o||(i.push(r),!a&&i.push(s.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,s=a.slice(),c=0;c<s.length&&!r.closed;c+=i?1:2)r.next(s[c]);return this._checkFinalizedStatuses(r),n},t.prototype._trimBuffer=function(){var r=this,n=r._bufferSize,o=r._timestampProvider,i=r._buffer,a=r._infiniteTimeWindow,s=(a?1:2)*n;if(n<1/0&&s<i.length&&i.splice(0,i.length-s),!a){for(var c=o.now(),l=0,u=1;u<i.length&&i[u]<=c;u+=2)l=u;l&&i.splice(0,l+1)}},t})(I);var Qo=(function(e){pe(t,e);function t(r,n){return e.call(this)||this}return t.prototype.schedule=function(r,n){return n===void 0&&(n=0),this},t})(nt);var Er={setInterval:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=Er.delegate;return o!=null&&o.setInterval?o.setInterval.apply(o,oe([e,t],re(r))):setInterval.apply(void 0,oe([e,t],re(r)))},clearInterval:function(e){var t=Er.delegate;return((t==null?void 0:t.clearInterval)||clearInterval)(e)},delegate:void 0};var rr=(function(e){pe(t,e);function t(r,n){var o=e.call(this,r,n)||this;return o.scheduler=r,o.work=n,o.pending=!1,o}return t.prototype.schedule=function(r,n){var o;if(n===void 0&&(n=0),this.closed)return this;this.state=r;var i=this.id,a=this.scheduler;return i!=null&&(this.id=this.recycleAsyncId(a,i,n)),this.pending=!0,this.delay=n,this.id=(o=this.id)!==null&&o!==void 0?o:this.requestAsyncId(a,this.id,n),this},t.prototype.requestAsyncId=function(r,n,o){return o===void 0&&(o=0),Er.setInterval(r.flush.bind(r,this),o)},t.prototype.recycleAsyncId=function(r,n,o){if(o===void 0&&(o=0),o!=null&&this.delay===o&&this.pending===!1)return n;n!=null&&Er.clearInterval(n)},t.prototype.execute=function(r,n){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var o=this._execute(r,n);if(o)return o;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(r,n){var o=!1,i;try{this.work(r)}catch(a){o=!0,i=a||new Error("Scheduled action threw falsy error")}if(o)return this.unsubscribe(),i},t.prototype.unsubscribe=function(){if(!this.closed){var r=this,n=r.id,o=r.scheduler,i=o.actions;this.work=this.state=this.scheduler=null,this.pending=!1,ut(i,this),n!=null&&(this.id=this.recycleAsyncId(o,n,null)),this.delay=null,e.prototype.unsubscribe.call(this)}},t})(Qo);var Wn=(function(){function e(t,r){r===void 0&&(r=e.now),this.schedulerActionCtor=t,this.now=r}return e.prototype.schedule=function(t,r,n){return r===void 0&&(r=0),new this.schedulerActionCtor(this,t).schedule(n,r)},e.now=xr.now,e})();var nr=(function(e){pe(t,e);function t(r,n){n===void 0&&(n=Wn.now);var o=e.call(this,r,n)||this;return o.actions=[],o._active=!1,o}return t.prototype.flush=function(r){var n=this.actions;if(this._active){n.push(r);return}var o;this._active=!0;do if(o=r.execute(r.state,r.delay))break;while(r=n.shift());if(this._active=!1,o){for(;r=n.shift();)r.unsubscribe();throw o}},t})(Wn);var _e=new nr(rr),Vn=_e;var ei=(function(e){pe(t,e);function t(r,n){var o=e.call(this,r,n)||this;return o.scheduler=r,o.work=n,o}return t.prototype.schedule=function(r,n){return n===void 0&&(n=0),n>0?e.prototype.schedule.call(this,r,n):(this.delay=n,this.state=r,this.scheduler.flush(this),this)},t.prototype.execute=function(r,n){return n>0||this.closed?e.prototype.execute.call(this,r,n):this._execute(r,n)},t.prototype.requestAsyncId=function(r,n,o){return o===void 0&&(o=0),o!=null&&o>0||o==null&&this.delay>0?e.prototype.requestAsyncId.call(this,r,n,o):(r.flush(this),0)},t})(rr);var ti=(function(e){pe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t})(nr);var zn=new ti(ei);var ri=(function(e){pe(t,e);function t(r,n){var o=e.call(this,r,n)||this;return o.scheduler=r,o.work=n,o}return t.prototype.requestAsyncId=function(r,n,o){return o===void 0&&(o=0),o!==null&&o>0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=tr.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var a=r.actions;n!=null&&n===r._scheduled&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==n&&(tr.cancelAnimationFrame(n),r._scheduled=void 0)},t})(rr);var ni=(function(e){pe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n;r?n=r.id:(n=this._scheduled,this._scheduled=void 0);var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t})(nr);var je=new ni(ri);var w=new N(function(e){return e.complete()});function Br(e){return e&&F(e.schedule)}function qn(e){return e[e.length-1]}function _t(e){return F(qn(e))?e.pop():void 0}function Be(e){return Br(qn(e))?e.pop():void 0}function Gr(e,t){return typeof qn(e)=="number"?e.pop():t}var or=(function(e){return e&&typeof e.length=="number"&&typeof e!="function"});function Yr(e){return F(e==null?void 0:e.then)}function Jr(e){return F(e[er])}function Xr(e){return Symbol.asyncIterator&&F(e==null?void 0:e[Symbol.asyncIterator])}function Zr(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Wc(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Qr=Wc();function en(e){return F(e==null?void 0:e[Qr])}function tn(e){return Wo(this,arguments,function(){var r,n,o,i;return Wr(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,Ct(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,Ct(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Ct(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function rn(e){return F(e==null?void 0:e.getReader)}function q(e){if(e instanceof N)return e;if(e!=null){if(Jr(e))return Vc(e);if(or(e))return zc(e);if(Yr(e))return qc(e);if(Xr(e))return oi(e);if(en(e))return Kc(e);if(rn(e))return Bc(e)}throw Zr(e)}function Vc(e){return new N(function(t){var r=e[er]();if(F(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function zc(e){return new N(function(t){for(var r=0;r<e.length&&!t.closed;r++)t.next(e[r]);t.complete()})}function qc(e){return new N(function(t){e.then(function(r){t.closed||(t.next(r),t.complete())},function(r){return t.error(r)}).then(null,qr)})}function Kc(e){return new N(function(t){var r,n;try{for(var o=$e(e),i=o.next();!i.done;i=o.next()){var a=i.value;if(t.next(a),t.closed)return}}catch(s){r={error:s}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}t.complete()})}function oi(e){return new N(function(t){Gc(e,t).catch(function(r){return t.error(r)})})}function Bc(e){return oi(tn(e))}function Gc(e,t){var r,n,o,i;return Do(this,void 0,void 0,function(){var a,s;return Wr(this,function(c){switch(c.label){case 0:c.trys.push([0,5,6,11]),r=Vo(e),c.label=1;case 1:return[4,r.next()];case 2:if(n=c.sent(),!!n.done)return[3,4];if(a=n.value,t.next(a),t.closed)return[2];c.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return s=c.sent(),o={error:s},[3,11];case 6:return c.trys.push([6,,9,10]),n&&!n.done&&(i=r.return)?[4,i.call(r)]:[3,8];case 7:c.sent(),c.label=8;case 8:return[3,10];case 9:if(o)throw o.error;return[7];case 10:return[7];case 11:return t.complete(),[2]}})})}function Fe(e,t,r,n,o){n===void 0&&(n=0),o===void 0&&(o=!1);var i=t.schedule(function(){r(),o?e.add(this.schedule(null,n)):this.unsubscribe()},n);if(e.add(i),!o)return i}function Ie(e,t){return t===void 0&&(t=0),S(function(r,n){r.subscribe(T(n,function(o){return Fe(n,e,function(){return n.next(o)},t)},function(){return Fe(n,e,function(){return n.complete()},t)},function(o){return Fe(n,e,function(){return n.error(o)},t)}))})}function Pt(e,t){return t===void 0&&(t=0),S(function(r,n){n.add(e.schedule(function(){return r.subscribe(n)},t))})}function ii(e,t){return q(e).pipe(Pt(t),Ie(t))}function ai(e,t){return q(e).pipe(Pt(t),Ie(t))}function si(e,t){return new N(function(r){var n=0;return t.schedule(function(){n===e.length?r.complete():(r.next(e[n++]),r.closed||this.schedule())})})}function ci(e,t){return new N(function(r){var n;return Fe(r,t,function(){n=e[Qr](),Fe(r,t,function(){var o,i,a;try{o=n.next(),i=o.value,a=o.done}catch(s){r.error(s);return}a?r.complete():r.next(i)},0,!0)}),function(){return F(n==null?void 0:n.return)&&n.return()}})}function nn(e,t){if(!e)throw new Error("Iterable cannot be null");return new N(function(r){Fe(r,t,function(){var n=e[Symbol.asyncIterator]();Fe(r,t,function(){n.next().then(function(o){o.done?r.complete():r.next(o.value)})},0,!0)})})}function li(e,t){return nn(tn(e),t)}function ui(e,t){if(e!=null){if(Jr(e))return ii(e,t);if(or(e))return si(e,t);if(Yr(e))return ai(e,t);if(Xr(e))return nn(e,t);if(en(e))return ci(e,t);if(rn(e))return li(e,t)}throw Zr(e)}function me(e,t){return t?ui(e,t):q(e)}function K(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e);return me(e,r)}function on(e,t){var r=F(e)?e:function(){return e},n=function(o){return o.error(r())};return new N(t?function(o){return t.schedule(n,0,o)}:n)}var an=Xt(function(e){return function(){e(this),this.name="EmptyError",this.message="no elements in sequence"}});function pi(e){return e instanceof Date&&!isNaN(e)}function f(e,t){return S(function(r,n){var o=0;r.subscribe(T(n,function(i){n.next(e.call(t,i,o++))}))})}var Yc=Array.isArray;function Jc(e,t){return Yc(t)?e.apply(void 0,oe([],re(t))):e(t)}function yt(e){return f(function(t){return Jc(e,t)})}var Xc=Array.isArray,Zc=Object.getPrototypeOf,Qc=Object.prototype,el=Object.keys;function fi(e){if(e.length===1){var t=e[0];if(Xc(t))return{args:t,keys:null};if(tl(t)){var r=el(t);return{args:r.map(function(n){return t[n]}),keys:r}}}return{args:e,keys:null}}function tl(e){return e&&typeof e=="object"&&Zc(e)===Qc}function mi(e,t){return e.reduce(function(r,n,o){return r[n]=t[o],r},{})}function ne(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e),n=_t(e),o=fi(e),i=o.args,a=o.keys;if(i.length===0)return me([],r);var s=new N(Kn(i,r,a?function(c){return mi(a,c)}:Le));return n?s.pipe(yt(n)):s}function Kn(e,t,r){return r===void 0&&(r=Le),function(n){di(t,function(){for(var o=e.length,i=new Array(o),a=o,s=o,c=function(u){di(t,function(){var p=me(e[u],t),d=!1;p.subscribe(T(n,function(m){i[u]=m,d||(d=!0,s--),s||n.next(r(i.slice()))},function(){--a||n.complete()}))},n)},l=0;l<o;l++)c(l)},n)}}function di(e,t,r){e?Fe(r,e,t):t()}function hi(e,t,r,n,o,i,a,s){var c=[],l=0,u=0,p=!1,d=function(){p&&!c.length&&!l&&t.complete()},m=function(v){return l<n?h(v):c.push(v)},h=function(v){i&&t.next(v),l++;var y=!1;q(r(v,u++)).subscribe(T(t,function(x){o==null||o(x),i?m(x):t.next(x)},function(){y=!0},void 0,function(){if(y)try{l--;for(var x=function(){var E=c.shift();a?Fe(t,a,function(){return h(E)}):h(E)};c.length&&l<n;)x();d()}catch(E){t.error(E)}}))};return e.subscribe(T(t,m,function(){p=!0,d()})),function(){s==null||s()}}function ie(e,t,r){return r===void 0&&(r=1/0),F(t)?ie(function(n,o){return f(function(i,a){return t(n,i,o,a)})(q(e(n,o)))},r):(typeof t=="number"&&(r=t),S(function(n,o){return hi(n,o,e,r)}))}function ir(e){return e===void 0&&(e=1/0),ie(Le,e)}function vi(){return ir(1)}function ot(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return vi()(me(e,Be(e)))}function j(e){return new N(function(t){q(e()).subscribe(t)})}var rl=["addListener","removeListener"],nl=["addEventListener","removeEventListener"],ol=["on","off"];function b(e,t,r,n){if(F(r)&&(n=r,r=void 0),n)return b(e,t,r).pipe(yt(n));var o=re(sl(e)?nl.map(function(s){return function(c){return e[s](t,c,r)}}):il(e)?rl.map(bi(e,t)):al(e)?ol.map(bi(e,t)):[],2),i=o[0],a=o[1];if(!i&&or(e))return ie(function(s){return b(s,t,r)})(q(e));if(!i)throw new TypeError("Invalid event target");return new N(function(s){var c=function(){for(var l=[],u=0;u<arguments.length;u++)l[u]=arguments[u];return s.next(1<l.length?l:l[0])};return i(c),function(){return a(c)}})}function bi(e,t){return function(r){return function(n){return e[r](t,n)}}}function il(e){return F(e.addListener)&&F(e.removeListener)}function al(e){return F(e.on)&&F(e.off)}function sl(e){return F(e.addEventListener)&&F(e.removeEventListener)}function sn(e,t,r){return r?sn(e,t).pipe(yt(r)):new N(function(n){var o=function(){for(var a=[],s=0;s<arguments.length;s++)a[s]=arguments[s];return n.next(a.length===1?a[0]:a)},i=e(o);return F(t)?function(){return t(o,i)}:void 0})}function ze(e,t,r){e===void 0&&(e=0),r===void 0&&(r=Vn);var n=-1;return t!=null&&(Br(t)?r=t:n=t),new N(function(o){var i=pi(e)?+e-r.now():e;i<0&&(i=0);var a=0;return r.schedule(function(){o.closed||(o.next(a++),0<=n?this.schedule(void 0,n):o.complete())},i)})}function R(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e),n=Gr(e,1/0),o=e;return o.length?o.length===1?q(o[0]):ir(n)(me(o,r)):w}var Ge=new N(Pe);var cl=Array.isArray;function cn(e){return e.length===1&&cl(e[0])?e[0]:e}function O(e,t){return S(function(r,n){var o=0;r.subscribe(T(n,function(i){return e.call(t,i,o++)&&n.next(i)}))})}function It(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=_t(e),n=cn(e);return n.length?new N(function(o){var i=n.map(function(){return[]}),a=n.map(function(){return!1});o.add(function(){i=a=null});for(var s=function(l){q(n[l]).subscribe(T(o,function(u){if(i[l].push(u),i.every(function(d){return d.length})){var p=i.map(function(d){return d.shift()});o.next(r?r.apply(void 0,oe([],re(p))):p),i.some(function(d,m){return!d.length&&a[m]})&&o.complete()}},function(){a[l]=!0,!i[l].length&&o.complete()}))},c=0;!o.closed&&c<n.length;c++)s(c);return function(){i=a=null}}):w}function gi(e){return S(function(t,r){var n=!1,o=null,i=null,a=!1,s=function(){if(i==null||i.unsubscribe(),i=null,n){n=!1;var l=o;o=null,r.next(l)}a&&r.complete()},c=function(){i=null,a&&r.complete()};t.subscribe(T(r,function(l){n=!0,o=l,i||q(e(l)).subscribe(i=T(r,s,c))},function(){a=!0,(!n||!i||i.closed)&&r.complete()}))})}function Ze(e,t){return t===void 0&&(t=_e),gi(function(){return ze(e,t)})}function Rt(e,t){return t===void 0&&(t=null),t=t!=null?t:e,S(function(r,n){var o=[],i=0;r.subscribe(T(n,function(a){var s,c,l,u,p=null;i++%t===0&&o.push([]);try{for(var d=$e(o),m=d.next();!m.done;m=d.next()){var h=m.value;h.push(a),e<=h.length&&(p=p!=null?p:[],p.push(h))}}catch(x){s={error:x}}finally{try{m&&!m.done&&(c=d.return)&&c.call(d)}finally{if(s)throw s.error}}if(p)try{for(var v=$e(p),y=v.next();!y.done;y=v.next()){var h=y.value;ut(o,h),n.next(h)}}catch(x){l={error:x}}finally{try{y&&!y.done&&(u=v.return)&&u.call(v)}finally{if(l)throw l.error}}},function(){var a,s;try{for(var c=$e(o),l=c.next();!l.done;l=c.next()){var u=l.value;n.next(u)}}catch(p){a={error:p}}finally{try{l&&!l.done&&(s=c.return)&&s.call(c)}finally{if(a)throw a.error}}n.complete()},void 0,function(){o=null}))})}function de(e){return S(function(t,r){var n=null,o=!1,i;n=t.subscribe(T(r,void 0,void 0,function(a){i=q(e(a,de(e)(t))),n?(n.unsubscribe(),n=null,i.subscribe(r)):o=!0})),o&&(n.unsubscribe(),n=null,i.subscribe(r))})}function _i(e,t,r,n,o){return function(i,a){var s=r,c=t,l=0;i.subscribe(T(a,function(u){var p=l++;c=s?e(c,u,p):(s=!0,u),n&&a.next(c)},o&&(function(){s&&a.next(c),a.complete()})))}}function Bn(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=_t(e);return r?Yo(Bn.apply(void 0,oe([],re(e))),yt(r)):S(function(n,o){Kn(oe([n],re(cn(e))))(o)})}function Qe(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Bn.apply(void 0,oe([],re(e)))}function Tr(e){return S(function(t,r){var n=!1,o=null,i=null,a=function(){if(i==null||i.unsubscribe(),i=null,n){n=!1;var s=o;o=null,r.next(s)}};t.subscribe(T(r,function(s){i==null||i.unsubscribe(),n=!0,o=s,i=T(r,a,Pe),q(e(s)).subscribe(i)},function(){a(),r.complete()},void 0,function(){o=i=null}))})}function Ye(e,t){return t===void 0&&(t=_e),S(function(r,n){var o=null,i=null,a=null,s=function(){if(o){o.unsubscribe(),o=null;var l=i;i=null,n.next(l)}};function c(){var l=a+e,u=t.now();if(u<l){o=this.schedule(void 0,l-u),n.add(o);return}s()}r.subscribe(T(n,function(l){i=l,a=t.now(),o||(o=t.schedule(c,e),n.add(o))},function(){s(),n.complete()},void 0,function(){i=o=null}))})}function it(e){return S(function(t,r){var n=!1;t.subscribe(T(r,function(o){n=!0,r.next(o)},function(){n||r.next(e),r.complete()}))})}function Me(e){return e<=0?function(){return w}:S(function(t,r){var n=0;t.subscribe(T(r,function(o){++n<=e&&(r.next(o),e<=n&&r.complete())}))})}function be(){return S(function(e,t){e.subscribe(T(t,Pe))})}function yi(e){return f(function(){return e})}function Gn(e,t){return t?function(r){return ot(t.pipe(Me(1),be()),r.pipe(Gn(e)))}:ie(function(r,n){return q(e(r,n)).pipe(Me(1),yi(r))})}function jt(e,t){t===void 0&&(t=_e);var r=ze(e,t);return Gn(function(){return r})}function Yn(e,t){return S(function(r,n){var o=new Set;r.subscribe(T(n,function(i){var a=e?e(i):i;o.has(a)||(o.add(a),n.next(i))})),t&&q(t).subscribe(T(n,function(){return o.clear()},Pe))})}function se(e,t){return t===void 0&&(t=Le),e=e!=null?e:ll,S(function(r,n){var o,i=!0;r.subscribe(T(n,function(a){var s=t(a);(i||!e(o,s))&&(i=!1,o=s,n.next(a))}))})}function ll(e,t){return e===t}function he(e,t){return se(function(r,n){return t?t(r[e],n[e]):r[e]===n[e]})}function xi(e){return e===void 0&&(e=ul),S(function(t,r){var n=!1;t.subscribe(T(r,function(o){n=!0,r.next(o)},function(){return n?r.complete():r.error(e())}))})}function ul(){return new an}function ye(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(r){return ot(r,K.apply(void 0,oe([],re(e))))}}function ln(e,t){return t?function(r){return r.pipe(ln(function(n,o){return q(e(n,o)).pipe(f(function(i,a){return t(n,i,o,a)}))}))}:S(function(r,n){var o=0,i=null,a=!1;r.subscribe(T(n,function(s){i||(i=T(n,void 0,function(){i=null,a&&n.complete()}),q(e(s,o++)).subscribe(i))},function(){a=!0,!i&&n.complete()}))})}function z(e){return S(function(t,r){try{t.subscribe(r)}finally{r.add(e)}})}function Sr(e,t){var r=arguments.length>=2;return function(n){return n.pipe(e?O(function(o,i){return e(o,i,n)}):Le,Me(1),r?it(t):xi(function(){return new an}))}}function Jn(e){return e<=0?function(){return w}:S(function(t,r){var n=[];t.subscribe(T(r,function(o){n.push(o),e<n.length&&n.shift()},function(){var o,i;try{for(var a=$e(n),s=a.next();!s.done;s=a.next()){var c=s.value;r.next(c)}}catch(l){o={error:l}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}r.complete()},void 0,function(){n=null}))})}function wi(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e),n=Gr(e,1/0);return S(function(o,i){ir(n)(me(oe([o],re(e)),r)).subscribe(i)})}function Ft(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return wi.apply(void 0,oe([],re(e)))}function un(){return S(function(e,t){var r,n=!1;e.subscribe(T(t,function(o){var i=r;r=o,n&&t.next([i,o]),n=!0}))})}function Ut(e){var t,r=1/0,n;return e!=null&&(typeof e=="object"?(t=e.count,r=t===void 0?1/0:t,n=e.delay):r=e),r<=0?function(){return w}:S(function(o,i){var a=0,s,c=function(){if(s==null||s.unsubscribe(),s=null,n!=null){var u=typeof n=="number"?ze(n):q(n(a)),p=T(i,function(){p.unsubscribe(),l()});u.subscribe(p)}else l()},l=function(){var u=!1;s=o.subscribe(T(i,void 0,function(){++a<r?s?c():u=!0:i.complete()})),u&&c()};l()})}function Or(e,t){return S(_i(e,t,arguments.length>=2,!0))}function xe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new I}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,c=s===void 0?!0:s;return function(l){var u,p,d,m=0,h=!1,v=!1,y=function(){p==null||p.unsubscribe(),p=void 0},x=function(){y(),u=d=void 0,h=v=!1},E=function(){var _=u;x(),_==null||_.unsubscribe()};return S(function(_,Z){m++,!v&&!h&&y();var ve=d=d!=null?d:r();Z.add(function(){m--,m===0&&!v&&!h&&(p=Xn(E,c))}),ve.subscribe(Z),!u&&m>0&&(u=new $t({next:function(L){return ve.next(L)},error:function(L){v=!0,y(),p=Xn(x,o,L),ve.error(L)},complete:function(){h=!0,y(),p=Xn(x,a),ve.complete()}}),q(_).subscribe(u))})(l)}}function Xn(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];if(t===!0){e();return}if(t!==!1){var o=new $t({next:function(){o.unsubscribe(),e()}});return q(t.apply(void 0,oe([],re(r)))).subscribe(o)}}function ae(e,t,r){var n,o,i,a,s=!1;return e&&typeof e=="object"?(n=e.bufferSize,a=n===void 0?1/0:n,o=e.windowTime,t=o===void 0?1/0:o,i=e.refCount,s=i===void 0?!1:i,r=e.scheduler):a=e!=null?e:1/0,xe({connector:function(){return new wr(a,t,r)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:s})}function ke(e){return O(function(t,r){return e<=r})}function J(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=Be(e);return S(function(n,o){(r?ot(e,n,r):ot(e,n)).subscribe(o)})}function g(e,t){return S(function(r,n){var o=null,i=0,a=!1,s=function(){return a&&!o&&n.complete()};r.subscribe(T(n,function(c){o==null||o.unsubscribe();var l=0,u=i++;q(e(c,u)).subscribe(o=T(n,function(p){return n.next(t?t(c,p,u,l++):p)},function(){o=null,s()}))},function(){a=!0,s()}))})}function ee(e){return S(function(t,r){q(e).subscribe(T(r,function(){return r.complete()},Pe)),!r.closed&&t.subscribe(r)})}function Zn(e,t){return t===void 0&&(t=!1),S(function(r,n){var o=0;r.subscribe(T(n,function(i){var a=e(i,o++);(a||t)&&n.next(i),!a&&n.complete()}))})}function P(e,t,r){var n=F(e)||t||r?{next:e,error:t,complete:r}:e;return n?S(function(o,i){var a;(a=n.subscribe)===null||a===void 0||a.call(n);var s=!0;o.subscribe(T(i,function(c){var l;(l=n.next)===null||l===void 0||l.call(n,c),i.next(c)},function(){var c;s=!1,(c=n.complete)===null||c===void 0||c.call(n),i.complete()},function(c){var l;s=!1,(l=n.error)===null||l===void 0||l.call(n,c),i.error(c)},function(){var c,l;s&&((c=n.unsubscribe)===null||c===void 0||c.call(n)),(l=n.finalize)===null||l===void 0||l.call(n)}))}):Le}function Ei(e,t){return S(function(r,n){var o=t!=null?t:{},i=o.leading,a=i===void 0?!0:i,s=o.trailing,c=s===void 0?!1:s,l=!1,u=null,p=null,d=!1,m=function(){p==null||p.unsubscribe(),p=null,c&&(y(),d&&n.complete())},h=function(){p=null,d&&n.complete()},v=function(x){return p=q(e(x)).subscribe(T(n,m,h))},y=function(){if(l){l=!1;var x=u;u=null,n.next(x),!d&&v(x)}};r.subscribe(T(n,function(x){l=!0,u=x,!(p&&!p.closed)&&(a?y():v(x))},function(){d=!0,!(c&&l&&p&&!p.closed)&&n.complete()}))})}function Lr(e,t,r){t===void 0&&(t=_e);var n=ze(e,t);return Ei(function(){return n},r)}function fe(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=_t(e);return S(function(n,o){for(var i=e.length,a=new Array(i),s=e.map(function(){return!1}),c=!1,l=function(p){q(e[p]).subscribe(T(o,function(d){a[p]=d,!c&&!s[p]&&(s[p]=!0,(c=s.every(Le))&&(s=null))},Pe))},u=0;u<i;u++)l(u);n.subscribe(T(o,function(p){if(c){var d=oe([p],re(a));o.next(r?r.apply(void 0,oe([],re(d))):d)}}))})}function Ti(){let e=new wr(1);return b(document,"DOMContentLoaded",{once:!0}).subscribe(()=>e.next(document)),e}function $(e,t=document){return Array.from(t.querySelectorAll(e))}function Y(e,t=document){let r=we(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function we(e,t=document){return t.querySelector(e)||void 0}function xt(){var e,t,r,n;return(n=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?n:void 0}var pl=R(b(document.body,"focusin"),b(document.body,"focusout")).pipe(Ye(1),J(void 0),f(()=>xt()||document.body),ae(1));function ar(e){return pl.pipe(f(t=>e.contains(t)),se())}function Nt(e,t){let{matches:r}=matchMedia("(hover)");return j(()=>(r?R(b(e,"mouseenter").pipe(f(()=>!0)),b(e,"mouseleave").pipe(f(()=>!1))):R(b(e,"touchstart").pipe(f(()=>!0)),b(e,"touchend").pipe(f(()=>!1)),b(e,"touchcancel").pipe(f(()=>!1)))).pipe(t?Tr(o=>ze(+!o*t)):Le,J(!0,e.matches(":hover"))))}function Si(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Si(e,r)}function A(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)Si(n,o);return n}function Oi(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function wt(e){let t=A("script",{src:e});return j(()=>(document.head.appendChild(t),R(b(t,"load"),b(t,"error").pipe(g(()=>on(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(f(()=>{}),z(()=>document.head.removeChild(t)),Me(1))))}function Li(e){let t=A("link",{rel:"stylesheet",href:e});return document.head.appendChild(t),R(b(t,"load"),b(t,"error").pipe(g(()=>on(()=>new ReferenceError(`Invalid styles: ${e}`))))).pipe(f(()=>{}),Me(1))}var Mi=new I,fl=j(()=>typeof ResizeObserver=="undefined"?wt("https://unpkg.com/resize-observer-polyfill"):K(void 0)).pipe(f(()=>new ResizeObserver(e=>e.forEach(t=>Mi.next(t)))),g(e=>R(Ge,K(e)).pipe(z(()=>e.disconnect()))),ae(1));function Ae(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Re(e){let t=e;for(;t.clientWidth===0&&t.parentElement;)t=t.parentElement;return fl.pipe(P(r=>r.observe(t)),g(r=>Mi.pipe(O(n=>n.target===t),z(()=>r.unobserve(t)))),f(()=>Ae(e)),J(Ae(e)))}function Mr(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ki(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}function Ai(e){let t=[],r=e.parentElement;for(;r;)(e.clientWidth>r.clientWidth||e.clientHeight>r.clientHeight)&&t.push(r),r=(e=r).parentElement;return t.length===0&&t.push(document.documentElement),t}function Et(e){return{x:e.offsetLeft,y:e.offsetTop}}function Ci(e){let t=e.getBoundingClientRect();return{x:t.x+window.scrollX,y:t.y+window.scrollY}}function Hi(e){return R(b(window,"load"),b(window,"resize")).pipe(Ze(0,je),f(()=>Et(e)),J(Et(e)))}function pn(e){return{x:e.scrollLeft,y:e.scrollTop}}function Dt(e){return R(b(e,"scroll"),b(window,"scroll"),b(window,"resize")).pipe(Ze(0,je),f(()=>pn(e)),J(pn(e)))}var $i=new I,ml=j(()=>K(new IntersectionObserver(e=>{for(let t of e)$i.next(t)},{threshold:0}))).pipe(g(e=>R(Ge,K(e)).pipe(z(()=>e.disconnect()))),ae(1));function Tt(e){return ml.pipe(P(t=>t.observe(e)),g(t=>$i.pipe(O(({target:r})=>r===e),z(()=>t.unobserve(e)),f(({isIntersecting:r})=>r))))}var dl=Object.create,ua=Object.defineProperty,hl=Object.getOwnPropertyDescriptor,vl=Object.getOwnPropertyNames,bl=Object.getPrototypeOf,gl=Object.prototype.hasOwnProperty,_l=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),yl=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of vl(t))!gl.call(e,o)&&o!==r&&ua(e,o,{get:()=>t[o],enumerable:!(n=hl(t,o))||n.enumerable});return e},xl=(e,t,r)=>(r=e!=null?dl(bl(e)):{},yl(t||!e||!e.__esModule?ua(r,"default",{value:e,enumerable:!0}):r,e)),wl=_l((e,t)=>{var r="Expected a function",n=NaN,o="[object Symbol]",i=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt,u=typeof global=="object"&&global&&global.Object===Object&&global,p=typeof self=="object"&&self&&self.Object===Object&&self,d=u||p||Function("return this")(),m=Object.prototype,h=m.toString,v=Math.max,y=Math.min,x=function(){return d.Date.now()};function E(M,D,te){var ue,le,De,bt,We,lt,rt=0,Yt=!1,At=!1,vr=!0;if(typeof M!="function")throw new TypeError(r);D=L(D)||0,_(te)&&(Yt=!!te.leading,At="maxWait"in te,De=At?v(L(te.maxWait)||0,D):De,vr="trailing"in te?!!te.trailing:vr);function G(Se){var gt=ue,br=le;return ue=le=void 0,rt=Se,bt=M.apply(br,gt),bt}function H(Se){return rt=Se,We=setTimeout(V,D),Yt?G(Se):bt}function C(Se){var gt=Se-lt,br=Se-rt,Io=D-gt;return At?y(Io,De-br):Io}function W(Se){var gt=Se-lt,br=Se-rt;return lt===void 0||gt>=D||gt<0||At&&br>=De}function V(){var Se=x();if(W(Se))return Q(Se);We=setTimeout(V,C(Se))}function Q(Se){return We=void 0,vr&&ue?G(Se):(ue=le=void 0,bt)}function Ve(){We!==void 0&&clearTimeout(We),rt=0,ue=lt=le=We=void 0}function Jt(){return We===void 0?bt:Q(x())}function Nr(){var Se=x(),gt=W(Se);if(ue=arguments,le=this,lt=Se,gt){if(We===void 0)return H(lt);if(At)return We=setTimeout(V,D),G(lt)}return We===void 0&&(We=setTimeout(V,D)),bt}return Nr.cancel=Ve,Nr.flush=Jt,Nr}function _(M){var D=typeof M;return!!M&&(D=="object"||D=="function")}function Z(M){return!!M&&typeof M=="object"}function ve(M){return typeof M=="symbol"||Z(M)&&h.call(M)==o}function L(M){if(typeof M=="number")return M;if(ve(M))return n;if(_(M)){var D=typeof M.valueOf=="function"?M.valueOf():M;M=_(D)?D+"":D}if(typeof M!="string")return M===0?M:+M;M=M.replace(i,"");var te=s.test(M);return te||c.test(M)?l(M.slice(2),te?2:8):a.test(M)?n:+M}t.exports=E}),wn,B,pa,fa,Wt,Pi,ma,da,ha,lo,ro,no,El,Ar={},va=[],Tl=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Pr=Array.isArray;function ft(e,t){for(var r in t)e[r]=t[r];return e}function uo(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function Lt(e,t,r){var n,o,i,a={};for(i in t)i=="key"?n=t[i]:i=="ref"?o=t[i]:a[i]=t[i];if(arguments.length>2&&(a.children=arguments.length>3?wn.call(arguments,2):r),typeof e=="function"&&e.defaultProps!=null)for(i in e.defaultProps)a[i]===void 0&&(a[i]=e.defaultProps[i]);return dn(e,a,n,o,null)}function dn(e,t,r,n,o){var i={type:e,props:t,key:r,ref:n,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o!=null?o:++pa,__i:-1,__u:0};return o==null&&B.vnode!=null&&B.vnode(i),i}function qe(e){return e.children}function ct(e,t){this.props=e,this.context=t}function cr(e,t){if(t==null)return e.__?cr(e.__,e.__i+1):null;for(var r;t<e.__k.length;t++)if((r=e.__k[t])!=null&&r.__e!=null)return r.__e;return typeof e.type=="function"?cr(e):null}function ba(e){var t,r;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((r=e.__k[t])!=null&&r.__e!=null){e.__e=e.__c.base=r.__e;break}return ba(e)}}function Ii(e){(!e.__d&&(e.__d=!0)&&Wt.push(e)&&!gn.__r++||Pi!=B.debounceRendering)&&((Pi=B.debounceRendering)||ma)(gn)}function gn(){for(var e,t,r,n,o,i,a,s=1;Wt.length;)Wt.length>s&&Wt.sort(da),e=Wt.shift(),s=Wt.length,e.__d&&(r=void 0,n=void 0,o=(n=(t=e).__v).__e,i=[],a=[],t.__P&&((r=ft({},n)).__v=n.__v+1,B.vnode&&B.vnode(r),po(t.__P,r,n,t.__n,t.__P.namespaceURI,32&n.__u?[o]:null,i,o!=null?o:cr(n),!!(32&n.__u),a),r.__v=n.__v,r.__.__k[r.__i]=r,ya(i,r,a),n.__e=n.__=null,r.__e!=o&&ba(r)));gn.__r=0}function ga(e,t,r,n,o,i,a,s,c,l,u){var p,d,m,h,v,y,x,E=n&&n.__k||va,_=t.length;for(c=Sl(r,t,E,c,_),p=0;p<_;p++)(m=r.__k[p])!=null&&(d=m.__i==-1?Ar:E[m.__i]||Ar,m.__i=p,y=po(e,m,d,o,i,a,s,c,l,u),h=m.__e,m.ref&&d.ref!=m.ref&&(d.ref&&fo(d.ref,null,m),u.push(m.ref,m.__c||h,m)),v==null&&h!=null&&(v=h),(x=!!(4&m.__u))||d.__k===m.__k?c=_a(m,c,e,x):typeof m.type=="function"&&y!==void 0?c=y:h&&(c=h.nextSibling),m.__u&=-7);return r.__e=v,c}function Sl(e,t,r,n,o){var i,a,s,c,l,u=r.length,p=u,d=0;for(e.__k=new Array(o),i=0;i<o;i++)(a=t[i])!=null&&typeof a!="boolean"&&typeof a!="function"?(c=i+d,(a=e.__k[i]=typeof a=="string"||typeof a=="number"||typeof a=="bigint"||a.constructor==String?dn(null,a,null,null,null):Pr(a)?dn(qe,{children:a},null,null,null):a.constructor==null&&a.__b>0?dn(a.type,a.props,a.key,a.ref?a.ref:null,a.__v):a).__=e,a.__b=e.__b+1,s=null,(l=a.__i=Ol(a,r,c,p))!=-1&&(p--,(s=r[l])&&(s.__u|=2)),s==null||s.__v==null?(l==-1&&(o>u?d--:o<u&&d++),typeof a.type!="function"&&(a.__u|=4)):l!=c&&(l==c-1?d--:l==c+1?d++:(l>c?d--:d++,a.__u|=4))):e.__k[i]=null;if(p)for(i=0;i<u;i++)(s=r[i])!=null&&!(2&s.__u)&&(s.__e==n&&(n=cr(s)),wa(s,s));return n}function _a(e,t,r,n){var o,i;if(typeof e.type=="function"){for(o=e.__k,i=0;o&&i<o.length;i++)o[i]&&(o[i].__=e,t=_a(o[i],t,r,n));return t}e.__e!=t&&(n&&(t&&e.type&&!t.parentNode&&(t=cr(e)),r.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function Cr(e,t){return t=t||[],e==null||typeof e=="boolean"||(Pr(e)?e.some(function(r){Cr(r,t)}):t.push(e)),t}function Ol(e,t,r,n){var o,i,a,s=e.key,c=e.type,l=t[r],u=l!=null&&(2&l.__u)==0;if(l===null&&e.key==null||u&&s==l.key&&c==l.type)return r;if(n>(u?1:0)){for(o=r-1,i=r+1;o>=0||i<t.length;)if((l=t[a=o>=0?o--:i++])!=null&&!(2&l.__u)&&s==l.key&&c==l.type)return a}return-1}function Ri(e,t,r){t[0]=="-"?e.setProperty(t,r!=null?r:""):e[t]=r==null?"":typeof r!="number"||Tl.test(t)?r:r+"px"}function fn(e,t,r,n,o){var i,a;e:if(t=="style")if(typeof r=="string")e.style.cssText=r;else{if(typeof n=="string"&&(e.style.cssText=n=""),n)for(t in n)r&&t in r||Ri(e.style,t,"");if(r)for(t in r)n&&r[t]==n[t]||Ri(e.style,t,r[t])}else if(t[0]=="o"&&t[1]=="n")i=t!=(t=t.replace(ha,"$1")),a=t.toLowerCase(),t=a in e||t=="onFocusOut"||t=="onFocusIn"?a.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+i]=r,r?n?r.u=n.u:(r.u=lo,e.addEventListener(t,i?no:ro,i)):e.removeEventListener(t,i?no:ro,i);else{if(o=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=r!=null?r:"";break e}catch(s){}typeof r=="function"||(r==null||r===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&r==1?"":r))}}function ji(e){return function(t){if(this.l){var r=this.l[t.type+e];if(t.t==null)t.t=lo++;else if(t.t<r.u)return;return r(B.event?B.event(t):t)}}}function po(e,t,r,n,o,i,a,s,c,l){var u,p,d,m,h,v,y,x,E,_,Z,ve,L,M,D,te,ue,le=t.type;if(t.constructor!=null)return null;128&r.__u&&(c=!!(32&r.__u),i=[s=t.__e=r.__e]),(u=B.__b)&&u(t);e:if(typeof le=="function")try{if(x=t.props,E="prototype"in le&&le.prototype.render,_=(u=le.contextType)&&n[u.__c],Z=u?_?_.props.value:u.__:n,r.__c?y=(p=t.__c=r.__c).__=p.__E:(E?t.__c=p=new le(x,Z):(t.__c=p=new ct(x,Z),p.constructor=le,p.render=Ml),_&&_.sub(p),p.props=x,p.state||(p.state={}),p.context=Z,p.__n=n,d=p.__d=!0,p.__h=[],p._sb=[]),E&&p.__s==null&&(p.__s=p.state),E&&le.getDerivedStateFromProps!=null&&(p.__s==p.state&&(p.__s=ft({},p.__s)),ft(p.__s,le.getDerivedStateFromProps(x,p.__s))),m=p.props,h=p.state,p.__v=t,d)E&&le.getDerivedStateFromProps==null&&p.componentWillMount!=null&&p.componentWillMount(),E&&p.componentDidMount!=null&&p.__h.push(p.componentDidMount);else{if(E&&le.getDerivedStateFromProps==null&&x!==m&&p.componentWillReceiveProps!=null&&p.componentWillReceiveProps(x,Z),!p.__e&&p.shouldComponentUpdate!=null&&p.shouldComponentUpdate(x,p.__s,Z)===!1||t.__v==r.__v){for(t.__v!=r.__v&&(p.props=x,p.state=p.__s,p.__d=!1),t.__e=r.__e,t.__k=r.__k,t.__k.some(function(De){De&&(De.__=t)}),ve=0;ve<p._sb.length;ve++)p.__h.push(p._sb[ve]);p._sb=[],p.__h.length&&a.push(p);break e}p.componentWillUpdate!=null&&p.componentWillUpdate(x,p.__s,Z),E&&p.componentDidUpdate!=null&&p.__h.push(function(){p.componentDidUpdate(m,h,v)})}if(p.context=Z,p.props=x,p.__P=e,p.__e=!1,L=B.__r,M=0,E){for(p.state=p.__s,p.__d=!1,L&&L(t),u=p.render(p.props,p.state,p.context),D=0;D<p._sb.length;D++)p.__h.push(p._sb[D]);p._sb=[]}else do p.__d=!1,L&&L(t),u=p.render(p.props,p.state,p.context),p.state=p.__s;while(p.__d&&++M<25);p.state=p.__s,p.getChildContext!=null&&(n=ft(ft({},n),p.getChildContext())),E&&!d&&p.getSnapshotBeforeUpdate!=null&&(v=p.getSnapshotBeforeUpdate(m,h)),te=u,u!=null&&u.type===qe&&u.key==null&&(te=xa(u.props.children)),s=ga(e,Pr(te)?te:[te],t,r,n,o,i,a,s,c,l),p.base=t.__e,t.__u&=-161,p.__h.length&&a.push(p),y&&(p.__E=p.__=null)}catch(De){if(t.__v=null,c||i!=null)if(De.then){for(t.__u|=c?160:128;s&&s.nodeType==8&&s.nextSibling;)s=s.nextSibling;i[i.indexOf(s)]=null,t.__e=s}else{for(ue=i.length;ue--;)uo(i[ue]);oo(t)}else t.__e=r.__e,t.__k=r.__k,De.then||oo(t);B.__e(De,t,r)}else i==null&&t.__v==r.__v?(t.__k=r.__k,t.__e=r.__e):s=t.__e=Ll(r.__e,t,r,n,o,i,a,c,l);return(u=B.diffed)&&u(t),128&t.__u?void 0:s}function oo(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(oo)}function ya(e,t,r){for(var n=0;n<r.length;n++)fo(r[n],r[++n],r[++n]);B.__c&&B.__c(t,e),e.some(function(o){try{e=o.__h,o.__h=[],e.some(function(i){i.call(o)})}catch(i){B.__e(i,o.__v)}})}function xa(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:Pr(e)?e.map(xa):ft({},e)}function Ll(e,t,r,n,o,i,a,s,c){var l,u,p,d,m,h,v,y=r.props,x=t.props,E=t.type;if(E=="svg"?o="http://www.w3.org/2000/svg":E=="math"?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),i!=null){for(l=0;l<i.length;l++)if((m=i[l])&&"setAttribute"in m==!!E&&(E?m.localName==E:m.nodeType==3)){e=m,i[l]=null;break}}if(e==null){if(E==null)return document.createTextNode(x);e=document.createElementNS(o,E,x.is&&x),s&&(B.__m&&B.__m(t,i),s=!1),i=null}if(E==null)y===x||s&&e.data==x||(e.data=x);else{if(i=i&&wn.call(e.childNodes),y=r.props||Ar,!s&&i!=null)for(y={},l=0;l<e.attributes.length;l++)y[(m=e.attributes[l]).name]=m.value;for(l in y)if(m=y[l],l!="children"){if(l=="dangerouslySetInnerHTML")p=m;else if(!(l in x)){if(l=="value"&&"defaultValue"in x||l=="checked"&&"defaultChecked"in x)continue;fn(e,l,null,m,o)}}for(l in x)m=x[l],l=="children"?d=m:l=="dangerouslySetInnerHTML"?u=m:l=="value"?h=m:l=="checked"?v=m:s&&typeof m!="function"||y[l]===m||fn(e,l,m,y[l],o);if(u)s||p&&(u.__html==p.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(p&&(e.innerHTML=""),ga(t.type=="template"?e.content:e,Pr(d)?d:[d],t,r,n,E=="foreignObject"?"http://www.w3.org/1999/xhtml":o,i,a,i?i[0]:r.__k&&cr(r,0),s,c),i!=null)for(l=i.length;l--;)uo(i[l]);s||(l="value",E=="progress"&&h==null?e.removeAttribute("value"):h!=null&&(h!==e[l]||E=="progress"&&!h||E=="option"&&h!=y[l])&&fn(e,l,h,y[l],o),l="checked",v!=null&&v!=e[l]&&fn(e,l,v,y[l],o))}return e}function fo(e,t,r){try{if(typeof e=="function"){var n=typeof e.__u=="function";n&&e.__u(),n&&t==null||(e.__u=e(t))}else e.current=t}catch(o){B.__e(o,r)}}function wa(e,t,r){var n,o;if(B.unmount&&B.unmount(e),(n=e.ref)&&(n.current&&n.current!=e.__e||fo(n,null,t)),(n=e.__c)!=null){if(n.componentWillUnmount)try{n.componentWillUnmount()}catch(i){B.__e(i,t)}n.base=n.__P=null}if(n=e.__k)for(o=0;o<n.length;o++)n[o]&&wa(n[o],t,r||typeof e.type!="function");r||uo(e.__e),e.__c=e.__=e.__e=void 0}function Ml(e,t,r){return this.constructor(e,r)}function kl(e,t,r){var n,o,i,a;t==document&&(t=document.documentElement),B.__&&B.__(e,t),o=(n=typeof r=="function")?null:r&&r.__k||t.__k,i=[],a=[],po(t,e=(!n&&r||t).__k=Lt(qe,null,[e]),o||Ar,Ar,t.namespaceURI,!n&&r?[r]:o?null:t.firstChild?wn.call(t.childNodes):null,i,!n&&r?r:o?o.__e:t.firstChild,n,a),ya(i,e,a)}wn=va.slice,B={__e:function(e,t,r,n){for(var o,i,a;t=t.__;)if((o=t.__c)&&!o.__)try{if((i=o.constructor)&&i.getDerivedStateFromError!=null&&(o.setState(i.getDerivedStateFromError(e)),a=o.__d),o.componentDidCatch!=null&&(o.componentDidCatch(e,n||{}),a=o.__d),a)return o.__E=o}catch(s){e=s}throw e}},pa=0,fa=function(e){return e!=null&&e.constructor==null},ct.prototype.setState=function(e,t){var r;r=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=ft({},this.state),typeof e=="function"&&(e=e(ft({},r),this.props)),e&&ft(r,e),e!=null&&this.__v&&(t&&this._sb.push(t),Ii(this))},ct.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Ii(this))},ct.prototype.render=qe,Wt=[],ma=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,da=function(e,t){return e.__v.__b-t.__v.__b},gn.__r=0,ha=/(PointerCapture)$|Capture$/i,lo=0,ro=ji(!1),no=ji(!0),El=0;var Hr,ge,Qn,Fi,$r=0,Ea=[],Ee=B,Ui=Ee.__b,Ni=Ee.__r,Di=Ee.diffed,Wi=Ee.__c,Vi=Ee.unmount,zi=Ee.__;function mo(e,t){Ee.__h&&Ee.__h(ge,e,$r||t),$r=0;var r=ge.__H||(ge.__H={__:[],__h:[]});return e>=r.__.length&&r.__.push({}),r.__[e]}function _n(e){return $r=1,Al(Sa,e)}function Al(e,t,r){var n=mo(Hr++,2);if(n.t=e,!n.__c&&(n.__=[r?r(t):Sa(void 0,t),function(s){var c=n.__N?n.__N[0]:n.__[0],l=n.t(c,s);c!==l&&(n.__N=[l,n.__[1]],n.__c.setState({}))}],n.__c=ge,!ge.__f)){var o=function(s,c,l){if(!n.__c.__H)return!0;var u=n.__c.__H.__.filter(function(d){return!!d.__c});if(u.every(function(d){return!d.__N}))return!i||i.call(this,s,c,l);var p=n.__c.props!==s;return u.forEach(function(d){if(d.__N){var m=d.__[0];d.__=d.__N,d.__N=void 0,m!==d.__[0]&&(p=!0)}}),i&&i.call(this,s,c,l)||p};ge.__f=!0;var i=ge.shouldComponentUpdate,a=ge.componentWillUpdate;ge.componentWillUpdate=function(s,c,l){if(this.__e){var u=i;i=void 0,o(s,c,l),i=u}a&&a.call(this,s,c,l)},ge.shouldComponentUpdate=o}return n.__N||n.__}function mt(e,t){var r=mo(Hr++,3);!Ee.__s&&Ta(r.__H,t)&&(r.__=e,r.u=t,ge.__H.__h.push(r))}function zt(e){return $r=5,ur(function(){return{current:e}},[])}function ur(e,t){var r=mo(Hr++,7);return Ta(r.__H,t)&&(r.__=e(),r.__H=t,r.__h=e),r.__}function Cl(e,t){return $r=8,ur(function(){return e},t)}function Hl(){for(var e;e=Ea.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(hn),e.__H.__h.forEach(io),e.__H.__h=[]}catch(t){e.__H.__h=[],Ee.__e(t,e.__v)}}Ee.__b=function(e){ge=null,Ui&&Ui(e)},Ee.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),zi&&zi(e,t)},Ee.__r=function(e){Ni&&Ni(e),Hr=0;var t=(ge=e.__c).__H;t&&(Qn===ge?(t.__h=[],ge.__h=[],t.__.forEach(function(r){r.__N&&(r.__=r.__N),r.u=r.__N=void 0})):(t.__h.forEach(hn),t.__h.forEach(io),t.__h=[],Hr=0)),Qn=ge},Ee.diffed=function(e){Di&&Di(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(Ea.push(t)!==1&&Fi===Ee.requestAnimationFrame||((Fi=Ee.requestAnimationFrame)||$l)(Hl)),t.__H.__.forEach(function(r){r.u&&(r.__H=r.u),r.u=void 0})),Qn=ge=null},Ee.__c=function(e,t){t.some(function(r){try{r.__h.forEach(hn),r.__h=r.__h.filter(function(n){return!n.__||io(n)})}catch(n){t.some(function(o){o.__h&&(o.__h=[])}),t=[],Ee.__e(n,r.__v)}}),Wi&&Wi(e,t)},Ee.unmount=function(e){Vi&&Vi(e);var t,r=e.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{hn(n)}catch(o){t=o}}),r.__H=void 0,t&&Ee.__e(t,r.__v))};var qi=typeof requestAnimationFrame=="function";function $l(e){var t,r=function(){clearTimeout(n),qi&&cancelAnimationFrame(t),setTimeout(e)},n=setTimeout(r,35);qi&&(t=requestAnimationFrame(r))}function hn(e){var t=ge,r=e.__c;typeof r=="function"&&(e.__c=void 0,r()),ge=t}function io(e){var t=ge;e.__c=e.__(),ge=t}function Ta(e,t){return!e||e.length!==t.length||t.some(function(r,n){return r!==e[n]})}function Sa(e,t){return typeof t=="function"?t(e):t}function Pl(e,t){for(var r in t)e[r]=t[r];return e}function Ki(e,t){for(var r in e)if(r!=="__source"&&!(r in t))return!0;for(var n in t)if(n!=="__source"&&e[n]!==t[n])return!0;return!1}function Bi(e,t){this.props=e,this.context=t}(Bi.prototype=new ct).isPureReactComponent=!0,Bi.prototype.shouldComponentUpdate=function(e,t){return Ki(this.props,e)||Ki(this.state,t)};var Gi=B.__b;B.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),Gi&&Gi(e)};var sw=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,Il=B.__e;B.__e=function(e,t,r,n){if(e.then){for(var o,i=t;i=i.__;)if((o=i.__c)&&o.__c)return t.__e==null&&(t.__e=r.__e,t.__k=r.__k),o.__c(e,t)}Il(e,t,r,n)};var Yi=B.unmount;function Oa(e,t,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(n){typeof n.__c=="function"&&n.__c()}),e.__c.__H=null),(e=Pl({},e)).__c!=null&&(e.__c.__P===r&&(e.__c.__P=t),e.__c.__e=!0,e.__c=null),e.__k=e.__k&&e.__k.map(function(n){return Oa(n,t,r)})),e}function La(e,t,r){return e&&r&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(n){return La(n,t,r)}),e.__c&&e.__c.__P===t&&(e.__e&&r.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=r)),e}function eo(){this.__u=0,this.o=null,this.__b=null}function Ma(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function mn(){this.i=null,this.l=null}B.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),Yi&&Yi(e)},(eo.prototype=new ct).__c=function(e,t){var r=t.__c,n=this;n.o==null&&(n.o=[]),n.o.push(r);var o=Ma(n.__v),i=!1,a=function(){i||(i=!0,r.__R=null,o?o(s):s())};r.__R=a;var s=function(){if(!--n.__u){if(n.state.__a){var c=n.state.__a;n.__v.__k[0]=La(c,c.__c.__P,c.__c.__O)}var l;for(n.setState({__a:n.__b=null});l=n.o.pop();)l.forceUpdate()}};n.__u++||32&t.__u||n.setState({__a:n.__b=n.__v.__k[0]}),e.then(a,a)},eo.prototype.componentWillUnmount=function(){this.o=[]},eo.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=Oa(this.__b,r,n.__O=n.__P)}this.__b=null}var o=t.__a&&Lt(qe,null,e.fallback);return o&&(o.__u&=-33),[Lt(qe,null,t.__a?null:e.children),o]};var Ji=function(e,t,r){if(++r[1]===r[0]&&e.l.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.l.size))for(r=e.i;r;){for(;r.length>3;)r.pop()();if(r[1]<r[0])break;e.i=r=r[2]}};(mn.prototype=new ct).__a=function(e){var t=this,r=Ma(t.__v),n=t.l.get(e);return n[0]++,function(o){var i=function(){t.props.revealOrder?(n.push(o),Ji(t,e,n)):o()};r?r(i):i()}},mn.prototype.render=function(e){this.i=null,this.l=new Map;var t=Cr(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var r=t.length;r--;)this.l.set(t[r],this.i=[1,0,this.i]);return e.children},mn.prototype.componentDidUpdate=mn.prototype.componentDidMount=function(){var e=this;this.l.forEach(function(t,r){Ji(e,r,t)})};var Rl=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,jl=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Fl=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Ul=/[A-Z0-9]/g,Nl=typeof document<"u",Dl=function(e){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(e)};ct.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(ct.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var Xi=B.event;function Wl(){}function Vl(){return this.cancelBubble}function zl(){return this.defaultPrevented}B.event=function(e){return Xi&&(e=Xi(e)),e.persist=Wl,e.isPropagationStopped=Vl,e.isDefaultPrevented=zl,e.nativeEvent=e};var ka,ql={enumerable:!1,configurable:!0,get:function(){return this.class}},Zi=B.vnode;B.vnode=function(e){typeof e.type=="string"&&(function(t){var r=t.props,n=t.type,o={},i=n.indexOf("-")===-1;for(var a in r){var s=r[a];if(!(a==="value"&&"defaultValue"in r&&s==null||Nl&&a==="children"&&n==="noscript"||a==="class"||a==="className")){var c=a.toLowerCase();a==="defaultValue"&&"value"in r&&r.value==null?a="value":a==="download"&&s===!0?s="":c==="translate"&&s==="no"?s=!1:c[0]==="o"&&c[1]==="n"?c==="ondoubleclick"?a="ondblclick":c!=="onchange"||n!=="input"&&n!=="textarea"||Dl(r.type)?c==="onfocus"?a="onfocusin":c==="onblur"?a="onfocusout":Fl.test(a)&&(a=c):c=a="oninput":i&&jl.test(a)?a=a.replace(Ul,"-$&").toLowerCase():s===null&&(s=void 0),c==="oninput"&&o[a=c]&&(a="oninputCapture"),o[a]=s}}n=="select"&&o.multiple&&Array.isArray(o.value)&&(o.value=Cr(r.children).forEach(function(l){l.props.selected=o.value.indexOf(l.props.value)!=-1})),n=="select"&&o.defaultValue!=null&&(o.value=Cr(r.children).forEach(function(l){l.props.selected=o.multiple?o.defaultValue.indexOf(l.props.value)!=-1:o.defaultValue==l.props.value})),r.class&&!r.className?(o.class=r.class,Object.defineProperty(o,"className",ql)):(r.className&&!r.class||r.class&&r.className)&&(o.class=o.className=r.className),t.props=o})(e),e.$$typeof=Rl,Zi&&Zi(e)};var Qi=B.__r;B.__r=function(e){Qi&&Qi(e),ka=e.__c};var ea=B.diffed;B.diffed=function(e){ea&&ea(e);var t=e.props,r=e.__e;r!=null&&e.type==="textarea"&&"value"in t&&t.value!==r.value&&(r.value=t.value==null?"":t.value),ka=null};function Aa(e){let t=zt(e);return t.current=e,ur(()=>Object.freeze({get current(){return t.current}}),[])}var Kl=typeof globalThis<"u"&&typeof navigator<"u"&&typeof document<"u";function Bl(e,...t){var r;(r=e==null?void 0:e.addEventListener)==null||r.call(e,...t)}function Gl(e,...t){var r;(r=e==null?void 0:e.removeEventListener)==null||r.call(e,...t)}var Yl=(e,t)=>Object.hasOwn(e,t),Jl=()=>!0,Xl=()=>!1;function Zl(e=!1){let t=zt(e),r=Cl(()=>t.current,[]);return mt(()=>(t.current=!0,()=>{t.current=!1}),[]),r}function Ql(e,...t){let r=Zl(),n=Aa(t[1]),o=ur(()=>function(...i){r()&&(typeof n.current=="function"?n.current.apply(this,i):typeof n.current.handleEvent=="function"&&n.current.handleEvent.apply(this,i))},[]);mt(()=>{let i=eu(e)?e.current:e;if(!i)return;let a=t.slice(2);return Bl(i,t[0],o,...a),()=>{Gl(i,t[0],o,...a)}},[e,t[0]])}function eu(e){return e!==null&&typeof e=="object"&&Yl(e,"current")}var tu=e=>typeof e=="function"?e:typeof e=="string"?t=>t.key===e:e?Jl:Xl,ru=Kl?globalThis:null;function Ca(e,t,r=[],n={}){let{event:o="keydown",target:i=ru,eventOptions:a}=n,s=Aa(t),c=ur(()=>{let l=tu(e);return function(u){l(u)&&s.current.call(this,u)}},r);Ql(i,o,c,a)}function Ha(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(r=Ha(e[t]))&&(n&&(n+=" "),n+=r)}else for(r in e)e[r]&&(n&&(n+=" "),n+=r);return n}function nu(){for(var e,t,r=0,n="",o=arguments.length;r<o;r++)(e=arguments[r])&&(t=Ha(e))&&(n&&(n+=" "),n+=t);return n}var qt=nu,ou=Symbol.for("preact-signals");function En(){if(Ot>1)Ot--;else{for(var e,t=!1;kr!==void 0;){var r=kr;for(kr=void 0,ao++;r!==void 0;){var n=r.o;if(r.o=void 0,r.f&=-3,!(8&r.f)&&Ia(r))try{r.c()}catch(o){t||(e=o,t=!0)}r=n}}if(ao=0,Ot--,t)throw e}}function iu(e){if(Ot>0)return e();Ot++;try{return e()}finally{En()}}var ce=void 0;function $a(e){var t=ce;ce=void 0;try{return e()}finally{ce=t}}var kr=void 0,Ot=0,ao=0,yn=0;function Pa(e){if(ce!==void 0){var t=e.n;if(t===void 0||t.t!==ce)return t={i:0,S:e,p:ce.s,n:void 0,t:ce,e:void 0,x:void 0,r:t},ce.s!==void 0&&(ce.s.n=t),ce.s=t,e.n=t,32&ce.f&&e.S(t),t;if(t.i===-1)return t.i=0,t.n!==void 0&&(t.n.p=t.p,t.p!==void 0&&(t.p.n=t.n),t.p=ce.s,t.n=void 0,ce.s.n=t,ce.s=t),t}}function Ce(e,t){this.v=e,this.i=0,this.n=void 0,this.t=void 0,this.W=t==null?void 0:t.watched,this.Z=t==null?void 0:t.unwatched,this.name=t==null?void 0:t.name}Ce.prototype.brand=ou;Ce.prototype.h=function(){return!0};Ce.prototype.S=function(e){var t=this,r=this.t;r!==e&&e.e===void 0&&(e.x=r,this.t=e,r!==void 0?r.e=e:$a(function(){var n;(n=t.W)==null||n.call(t)}))};Ce.prototype.U=function(e){var t=this;if(this.t!==void 0){var r=e.e,n=e.x;r!==void 0&&(r.x=n,e.e=void 0),n!==void 0&&(n.e=r,e.x=void 0),e===this.t&&(this.t=n,n===void 0&&$a(function(){var o;(o=t.Z)==null||o.call(t)}))}};Ce.prototype.subscribe=function(e){var t=this;return Kt(function(){var r=t.value,n=ce;ce=void 0;try{e(r)}finally{ce=n}},{name:"sub"})};Ce.prototype.valueOf=function(){return this.value};Ce.prototype.toString=function(){return this.value+""};Ce.prototype.toJSON=function(){return this.value};Ce.prototype.peek=function(){var e=ce;ce=void 0;try{return this.value}finally{ce=e}};Object.defineProperty(Ce.prototype,"value",{get:function(){var e=Pa(this);return e!==void 0&&(e.i=this.i),this.v},set:function(e){if(e!==this.v){if(ao>100)throw new Error("Cycle detected");this.v=e,this.i++,yn++,Ot++;try{for(var t=this.t;t!==void 0;t=t.x)t.t.N()}finally{En()}}}});function Mt(e,t){return new Ce(e,t)}function Ia(e){for(var t=e.s;t!==void 0;t=t.n)if(t.S.i!==t.i||!t.S.h()||t.S.i!==t.i)return!0;return!1}function Ra(e){for(var t=e.s;t!==void 0;t=t.n){var r=t.S.n;if(r!==void 0&&(t.r=r),t.S.n=t,t.i=-1,t.n===void 0){e.s=t;break}}}function ja(e){for(var t=e.s,r=void 0;t!==void 0;){var n=t.p;t.i===-1?(t.S.U(t),n!==void 0&&(n.n=t.n),t.n!==void 0&&(t.n.p=n)):r=t,t.S.n=t.r,t.r!==void 0&&(t.r=void 0),t=n}e.s=r}function Bt(e,t){Ce.call(this,void 0),this.x=e,this.s=void 0,this.g=yn-1,this.f=4,this.W=t==null?void 0:t.watched,this.Z=t==null?void 0:t.unwatched,this.name=t==null?void 0:t.name}Bt.prototype=new Ce;Bt.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===yn))return!0;if(this.g=yn,this.f|=1,this.i>0&&!Ia(this))return this.f&=-2,!0;var e=ce;try{Ra(this),ce=this;var t=this.x();(16&this.f||this.v!==t||this.i===0)&&(this.v=t,this.f&=-17,this.i++)}catch(r){this.v=r,this.f|=16,this.i++}return ce=e,ja(this),this.f&=-2,!0};Bt.prototype.S=function(e){if(this.t===void 0){this.f|=36;for(var t=this.s;t!==void 0;t=t.n)t.S.S(t)}Ce.prototype.S.call(this,e)};Bt.prototype.U=function(e){if(this.t!==void 0&&(Ce.prototype.U.call(this,e),this.t===void 0)){this.f&=-33;for(var t=this.s;t!==void 0;t=t.n)t.S.U(t)}};Bt.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var e=this.t;e!==void 0;e=e.x)e.t.N()}};Object.defineProperty(Bt.prototype,"value",{get:function(){if(1&this.f)throw new Error("Cycle detected");var e=Pa(this);if(this.h(),e!==void 0&&(e.i=this.i),16&this.f)throw this.v;return this.v}});function ta(e,t){return new Bt(e,t)}function Fa(e){var t=e.u;if(e.u=void 0,typeof t=="function"){Ot++;var r=ce;ce=void 0;try{t()}catch(n){throw e.f&=-2,e.f|=8,ho(e),n}finally{ce=r,En()}}}function ho(e){for(var t=e.s;t!==void 0;t=t.n)t.S.U(t);e.x=void 0,e.s=void 0,Fa(e)}function au(e){if(ce!==this)throw new Error("Out-of-order effect");ja(this),ce=e,this.f&=-2,8&this.f&&ho(this),En()}function pr(e,t){this.x=e,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32,this.name=t==null?void 0:t.name}pr.prototype.c=function(){var e=this.S();try{if(8&this.f||this.x===void 0)return;var t=this.x();typeof t=="function"&&(this.u=t)}finally{e()}};pr.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,Fa(this),Ra(this),Ot++;var e=ce;return ce=this,au.bind(this,e)};pr.prototype.N=function(){2&this.f||(this.f|=2,this.o=kr,kr=this)};pr.prototype.d=function(){this.f|=8,1&this.f||ho(this)};pr.prototype.dispose=function(){this.d()};function Kt(e,t){var r=new pr(e,t);try{r.c()}catch(o){throw r.d(),o}var n=r.d.bind(r);return n[Symbol.dispose]=n,n}var Ua,vo,to,Na=[];Kt(function(){Ua=this.N})();function fr(e,t){B[e]=t.bind(null,B[e]||function(){})}function xn(e){to&&to(),to=e&&e.S()}function Da(e){var t=this,r=e.data,n=cu(r);n.value=r;var o=ur(function(){for(var s=t,c=t.__v;c=c.__;)if(c.__c){c.__c.__$f|=4;break}var l=ta(function(){var m=n.value.value;return m===0?0:m===!0?"":m||""}),u=ta(function(){return!Array.isArray(l.value)&&!fa(l.value)}),p=Kt(function(){if(this.N=Wa,u.value){var m=l.value;s.__v&&s.__v.__e&&s.__v.__e.nodeType===3&&(s.__v.__e.data=m)}}),d=t.__$u.d;return t.__$u.d=function(){p(),d.call(this)},[u,l]},[]),i=o[0],a=o[1];return i.value?a.peek():a.value}Da.displayName="ReactiveTextNode";Object.defineProperties(Ce.prototype,{constructor:{configurable:!0,value:void 0},type:{configurable:!0,value:Da},props:{configurable:!0,get:function(){return{data:this}}},__b:{configurable:!0,value:1}});fr("__b",function(e,t){if(typeof t.type=="function"&&typeof window<"u"&&window.__PREACT_SIGNALS_DEVTOOLS__&&window.__PREACT_SIGNALS_DEVTOOLS__.exitComponent(),typeof t.type=="string"){var r,n=t.props;for(var o in n)if(o!=="children"){var i=n[o];i instanceof Ce&&(r||(t.__np=r={}),r[o]=i,n[o]=i.peek())}}e(t)});fr("__r",function(e,t){if(typeof t.type=="function"&&typeof window<"u"&&window.__PREACT_SIGNALS_DEVTOOLS__&&window.__PREACT_SIGNALS_DEVTOOLS__.enterComponent(t),t.type!==qe){xn();var r,n=t.__c;n&&(n.__$f&=-2,(r=n.__$u)===void 0&&(n.__$u=r=(function(o){var i;return Kt(function(){i=this}),i.c=function(){n.__$f|=1,n.setState({})},i})())),vo=n,xn(r)}e(t)});fr("__e",function(e,t,r,n){typeof window<"u"&&window.__PREACT_SIGNALS_DEVTOOLS__&&window.__PREACT_SIGNALS_DEVTOOLS__.exitComponent(),xn(),vo=void 0,e(t,r,n)});fr("diffed",function(e,t){typeof t.type=="function"&&typeof window<"u"&&window.__PREACT_SIGNALS_DEVTOOLS__&&window.__PREACT_SIGNALS_DEVTOOLS__.exitComponent(),xn(),vo=void 0;var r;if(typeof t.type=="string"&&(r=t.__e)){var n=t.__np,o=t.props;if(n){var i=r.U;if(i)for(var a in i){var s=i[a];s!==void 0&&!(a in n)&&(s.d(),i[a]=void 0)}else i={},r.U=i;for(var c in n){var l=i[c],u=n[c];l===void 0?(l=su(r,c,u,o),i[c]=l):l.o(u,o)}}}e(t)});function su(e,t,r,n){var o=t in e&&e.ownerSVGElement===void 0,i=Mt(r);return{o:function(a,s){i.value=a,n=s},d:Kt(function(){this.N=Wa;var a=i.value.value;n[t]!==a&&(n[t]=a,o?e[t]=a:a?e.setAttribute(t,a):e.removeAttribute(t))})}}fr("unmount",function(e,t){if(typeof t.type=="string"){var r=t.__e;if(r){var n=r.U;if(n){r.U=void 0;for(var o in n){var i=n[o];i&&i.d()}}}}else{var a=t.__c;if(a){var s=a.__$u;s&&(a.__$u=void 0,s.d())}}e(t)});fr("__h",function(e,t,r,n){(n<3||n===9)&&(t.__$f|=2),e(t,r,n)});ct.prototype.shouldComponentUpdate=function(e,t){var r=this.__$u,n=r&&r.s!==void 0;for(var o in t)return!0;if(this.__f||typeof this.u=="boolean"&&this.u===!0){var i=2&this.__$f;if(!(n||i||4&this.__$f)||1&this.__$f)return!0}else if(!(n||4&this.__$f)||3&this.__$f)return!0;for(var a in e)if(a!=="__source"&&e[a]!==this.props[a])return!0;for(var s in this.props)if(!(s in e))return!0;return!1};function cu(e,t){return _n(function(){return Mt(e,t)})[0]}var lu=function(e){queueMicrotask(function(){queueMicrotask(e)})};function uu(){iu(function(){for(var e;e=Na.shift();)Ua.call(e)})}function Wa(){Na.push(this)===1&&(B.requestAnimationFrame||lu)(uu)}var so=[0];for(let e=0;e<32;e++)so.push(so[e]|1<<e);function pu(e){return new Uint32Array(e)}var ra=class{constructor(e,t=pu(Math.ceil(e/32))){this.size=e,this.data=t}get(e){return this.data[e>>>5]>>>e&1}set(e){this.data[e>>>5]|=1<<(e&31)}forEach(e){let t=this.size&31;for(let r=0;r<this.data.length;r++){if(this.data[r]===0)continue;let n=this.data[r];t&&r===this.data.length-1&&(n=n&so[t]);for(let o=0,i=32-Math.clz32(n);o<i;o++)n&1<<o&&e((r<<5)+o)}}};function fu(e){lr.value=e,e.items.find(t=>{var r;return(r=t.tags)==null?void 0:r.length})&&(matchMedia("(max-width: 768px)").matches||Va())}function Vt(){et.value=He(k({},et.value),{hideSearch:!et.value.hideSearch})}function Va(){et.value=He(k({},et.value),{hideFilters:!et.value.hideFilters})}function vn(){return et.value.selectedItem}function co(e){et.value=He(k({},et.value),{selectedItem:e})}function mu(){var e,t;return(t=(e=lr.value)==null?void 0:e.items)!=null?t:[]}function Tn(){return typeof Oe.value.input=="string"?Oe.value.input:""}function za(e){let t=qa();e.length&&!t.length?Oe.value=He(k({},Oe.value),{page:void 0,input:e}):!e.length&&t.length?Oe.value=He(k({},Oe.value),{page:void 0,input:{type:"operator",data:{operator:"not",operands:[]}}}):Oe.value=He(k({},Oe.value),{page:void 0,input:e})}function du(){typeof st.value.pagination.next<"u"&&(Oe.value=He(k({},Oe.value),{page:st.value.pagination.next}))}function hu(e){let t=Oe.value.filter.input;if("type"in t&&t.type==="operator"){for(let r of t.data.operands)if("type"in r&&r.type==="value"&&typeof r.data.value=="string"&&r.data.value===e)return!0}return!1}function qa(){let e=Oe.value.filter.input,t=[];if("type"in e&&e.type==="operator")for(let r of e.data.operands)"type"in r&&r.type==="value"&&typeof r.data.value=="string"&&t.push(r.data.value);return t}function vu(e){let t=Oe.value.filter.input,r=[];if("type"in t&&t.type==="operator")for(let n of t.data.operands)"type"in n&&n.type==="value"&&typeof n.data.value=="string"&&r.push(n.data.value);if(r.includes(e)){let n=r.indexOf(e);n>-1&&r.splice(n,1)}else r.push(e);Oe.value=He(k({},Oe.value),{page:void 0,filter:He(k({},Oe.value.filter),{input:{type:"operator",data:{operator:"and",operands:r.map(n=>({type:"value",data:{field:"tags",value:n}}))}}})}),za(Tn())}function bu(){return st.value.items}function gu(){return st.value.total}function _u(){var e;for(let t of(e=st.value.aggregations)!=null?e:[])if(t.type==="term")return t.data.value;return[]}function sr(){return et.value.hideSearch}function yu(){return et.value.hideFilters}function Ka(){var e;return(e=Ba.value.highlight)!=null?e:!1}var et=Mt({hideSearch:!0,hideFilters:!0,selectedItem:0}),Ba=Mt({}),lr=Mt(),na=Mt(),Oe=Mt({input:"",filter:{input:{type:"operator",data:{operator:"and",operands:[]}},aggregation:{input:[{type:"term",data:{field:"tags"}}]}}}),st=Mt({items:[],query:{select:{documents:new ra(0),terms:new ra(0)},values:[]},pagination:{total:0}});function xu(e,t,r){for(let n=0;t<r;){switch(n=n<<8^32|e.charCodeAt(++t),n){case 97:case 98:case 99:case 101:case 104:case 105:case 108:case 109:case 112:case 115:case 116:case 119:case 24946:case 25185:case 25455:case 25965:case 26989:case 26990:case 27753:case 28005:case 28769:case 29551:case 29810:case 30562:case 6386277:case 6447475:case 6647138:case 6909552:case 7104878:case 7169396:case 7364978:case 7565173:case 7631457:case 1701667429:case 1768845429:case 1869967971:case 1885434465:case 1936684402:case 1953653091:continue;case 25202:case 26738:case 6516588:case 6909287:case 7823986:case 1634885997:case 1634887009:case 1650553701:case 1818848875:case 1835165028:case 1835365473:case 1852863860:case 1918985067:case 1970430821:switch(e.charCodeAt(++t)){case 9:case 10:case 32:case 47:case 62:return!0}}break}return!1}function wu(e,t,r=0,n=e.length){let o=0,i=r;for(let a=0;i<n;i++)switch(a=e.charCodeAt(i),a){case 60:i>r&&t(0,o,r,r=i);continue;case 62:e.charCodeAt(r+1)===47?t(2,--o,r,r=i+1):xu(e,r,n)?t(3,o,r,r=i+1):t(1,o++,r,r=i+1)}i>r&&t(0,o,r,i)}function Eu(e,t=0,r=e.length){let n=++t;e:for(let l=0;n<r;n++)switch(l=e.charCodeAt(n),l){case 9:case 10:case 32:case 62:break e}let o=e.slice(t,t=n),i=[],a=0,s=0,c=0;for(let l=0;n<r;n++){let u=e.charCodeAt(n);switch(a){case 0:switch(u){case 9:case 10:case 32:t===n?t++:(s=1,a=1);break;case 61:s=1,a=2;break;case 47:t++;case 62:t<n&&(s=1);break}break;case 1:switch(u){case 9:case 10:case 32:continue;case 61:a=2,t=n+1;continue;default:a=0,t=n,l++}continue;case 2:switch(u){case 9:case 10:case 32:t===n?t++:c===0&&(s=2,a=0);break;case 34:case 39:switch(c){case 0:c=u,t=n+1;continue;case u:s=2,a=0,c=0}break;case 62:t<n&&(s=2);break}}switch(s){case 1:i[l]=[e.slice(t,n),""],s=0,t=n+1;break;case 2:i[l++][1]=e.slice(t,n),s=0,t=n+1;break}}return{tag:o,attrs:i.length?Object.fromEntries(i):null}}function Tu(e,t,r){return e.slice(t,r)}function Su(e){return(t,r,n,o)=>{let i=[],a=[],{onElement:s,onText:c=Tu}=typeof r=="function"?{onElement:r}:r,l=0,u=0;return e(t,(p,d,m,h)=>{if(p===0)i[l++]=c(t,m,h),a[u++]={value:null,depth:d};else if(p&1&&(a[u++]={value:Eu(t,m,h),depth:d}),p&2)for(let v=0;u>=0;v++){let{value:y,depth:x}=a[--u];if(x>d)continue;let E=i.slice(l-=v,l+v);i[l++]=s(y,E),u++;break}},n,o),i.slice(0,l)}}function Ou(e){return e.replace(/[&<>]/g,t=>{switch(t.charCodeAt(0)){case 38:return"&";case 60:return"<";case 62:return">"}})}function bn(e){return e.replace(/&(amp|[lg]t);/g,t=>{switch(t.charCodeAt(1)){case 97:return"&";case 108:return"<";case 103:return">"}})}function Lu(e,t){return{start:e.start+t,end:e.end+t,value:e.value}}function Mu(e,t,r){return e.slice(t,r)}function ku(e){let{onHighlight:t,onText:r=Mu}=typeof e=="function"?{onHighlight:e}:e;return(n,o,i=0,a=n.length)=>{var l;let s=[],c=(l=o==null?void 0:o.ranges)!=null?l:[];for(let u=0,p=i;u<c.length;u++){let d=c[u].start;if(d>a)break;let m=c[u].end;if(m<p)continue;d=Math.max(d,i),m=Math.min(m,a),d>i&&s.push(r(n,i,d));let{value:h}=c[u];s.push(t(n,{start:d,end:i=m,value:h}))}return i<a&&s.push(r(n,i,a)),s}}var Au={fuzzy:"m"},Cu=0;function U(e,t,r,n,o,i){t||(t={});var a,s,c=t;if("ref"in c)for(s in c={},t)s=="ref"?a=t[s]:c[s]=t[s];var l={type:e,props:c,key:r,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Cu,__i:-1,__u:0,__source:o,__self:i};if(typeof e=="function"&&(a=e.defaultProps))for(s in a)c[s]===void 0&&(c[s]=a[s]);return B.vnode&&B.vnode(l),l}var Ga=Su(wu),Ya=ku({onText(e,t,r){return bn(e.slice(t,r))},onHighlight(e,{start:t,end:r,value:n}){let o=Math.min(r,t+n);return t===r?null:(n===-1&&(o=r),U("mark",{className:qt({[Au.fuzzy]:n===-1}),children:[U("u",{children:bn(e.slice(t,o))}),bn(e.slice(o,r))]}))}}),Hu=new Set(["p","pre","li","ul","ol","div"]),$u=new Set(["code","span","sup","sub","em","strong","b","i","kbd","samp","mark","u","a"]);function Pu(e){return e.filter(t=>t!==null&&typeof t<"u"&&t!==!1&&!(typeof t=="string"&&t.trim().length===0))}function Ja(e,t){let r=Ga(e,{onElement(n,o){return Lt(n.tag,n.attrs,...o)},onText(n,o,i){return Ya(n,t==null?void 0:t.value.highlight,o,i)}});return U(qe,{children:r})}function Iu(e,t){var n;let r=[];for(let o=0,i=0;o<e.length;o++){let a=[];if((n=t==null?void 0:t.value.highlight)!=null&&n.ranges)for(let s of t.value.highlight.ranges)a.push(Lu(s,-i));r.push(Ja(e[o],He(k({},t),{value:He(k({},t==null?void 0:t.value),{highlight:{ranges:a}})}))),i+=e[o].length}return r}function Ru(e,t,r=320){var u,p,d;let n=(u=t==null?void 0:t.value.highlight)==null?void 0:u.ranges.find(m=>m.start<m.end),o=Math.floor(r*.25),i=Math.floor(r*1.75),a=n?Math.max(0,n.start-o):0,s=n?Math.min(e.length,n.end+i):Math.min(e.length,2*r),c=[];for(let m of(d=(p=t==null?void 0:t.value.highlight)==null?void 0:p.ranges)!=null?d:[])m.end<=a||m.start>=s||c.push(He(k({},m),{start:Math.max(m.start,a),end:Math.min(m.end,s)}));let l=Ga(e,{onElement(m,h){var y;let v=Pu(h);if(v.length!==0)return $u.has(m.tag)?Lt(m.tag,(y=m.attrs)!=null?y:{},...v):m.tag==="li"?U(qe,{children:["\u2013 ",v," "]}):Hu.has(m.tag)?U(qe,{children:[" ",v," "]}):U(qe,{children:v})},onText(m,h,v){let y=Math.max(h,a),x=Math.min(v,s);if(!(y>=x))return Ya(m,{ranges:c},y,x)}});return U(qe,{children:[a>0&&"...",l]})}function Xa(e,t={highlight:!0}){Ba.value=t;let r=new Worker(e);r.onmessage=n=>{let o=n.data;switch(o.type){case 1:na.value=!0;break;case 3:typeof o.data.pagination.prev<"u"?st.value=He(k({},st.value),{pagination:o.data.pagination,items:[...st.value.items,...o.data.items]}):(st.value=o.data,co(0));break}},Kt(()=>{lr.value&&r.postMessage({type:0,data:lr.value})}),Kt(()=>{na.value&&r.postMessage({type:2,data:Oe.value})})}var oa={container:"p",hidden:"v"};function ju(e){return U("div",{class:qt(oa.container,{[oa.hidden]:e.hidden}),onClick:()=>Vt()})}var ia={container:"r",disabled:"c"};function aa(e){return U("button",{class:qt(ia.container,{[ia.disabled]:!e.onClick}),onClick:e.onClick,children:e.children})}var sa=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Fu=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,n)=>n?n.toUpperCase():r.toLowerCase()),ca=e=>{let t=Fu(e);return t.charAt(0).toUpperCase()+t.slice(1)},Uu=(...e)=>e.filter((t,r,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===r).join(" ").trim(),Nu={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},Du=c=>{var l=c,{color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:n,children:o,iconNode:i,class:a=""}=l,s=gr(l,["color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","class"]);return Lt("svg",k(He(k({},Nu),{width:String(t),height:t,stroke:e,"stroke-width":n?Number(r)*24/Number(t):r,class:["lucide",a].join(" ")}),s),[...i.map(([u,p])=>Lt(u,p)),...Cr(o)])},Za=(e,t)=>{let r=a=>{var s=a,{class:n="",children:o}=s,i=gr(s,["class","children"]);return Lt(Du,He(k({},i),{iconNode:t,class:Uu(`lucide-${sa(ca(e))}`,`lucide-${sa(e)}`,n)}),o)};return r.displayName=ca(e),r},Wu=Za("list-filter",[["path",{d:"M2 5h20",key:"1fs1ex"}],["path",{d:"M6 12h12",key:"8npq4p"}],["path",{d:"M9 19h6",key:"456am0"}]]),Vu=Za("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]),cw=xl(wl(),1);function zu({threshold:e=0,root:t=null,rootMargin:r="0%",freezeOnceVisible:n=!1,initialIsIntersecting:o=!1,onChange:i}={}){var a;let[s,c]=_n(null),[l,u]=_n(()=>({isIntersecting:o,entry:void 0})),p=zt();p.current=i;let d=((a=l.entry)==null?void 0:a.isIntersecting)&&n;mt(()=>{if(!s||!("IntersectionObserver"in window)||d)return;let v,y=new IntersectionObserver(x=>{let E=Array.isArray(y.thresholds)?y.thresholds:[y.thresholds];x.forEach(_=>{let Z=_.isIntersecting&&E.some(ve=>_.intersectionRatio>=ve);u({isIntersecting:Z,entry:_}),p.current&&p.current(Z,_),Z&&n&&v&&(v(),v=void 0)})},{threshold:e,root:t,rootMargin:r});return y.observe(s),()=>{y.disconnect()}},[s,JSON.stringify(e),t,r,d,n]);let m=zt(null);mt(()=>{var v;!s&&(v=l.entry)!=null&&v.target&&!n&&!d&&m.current!==l.entry.target&&(m.current=l.entry.target,u({isIntersecting:o,entry:void 0}))},[s,l.entry,n,d,o]);let h=[c,!!l.isIntersecting,l.entry];return h.ref=h[0],h.isIntersecting=h[1],h.entry=h[2],h}var pt={container:"n",hidden:"l",content:"y",pop:"d",badge:"w",sidebar:"e",controls:"k",results:"z",loadmore:"j"};function qu(e){let{isIntersecting:t,ref:r}=zu({threshold:0});mt(()=>{t&&du()},[t]);let n=zt(null);mt(()=>{n.current&&typeof Oe.value.page>"u"&&n.current.scrollTo({top:0,behavior:"smooth"})},[Oe.value]);let o=qa();return U("div",{class:qt(pt.container,{[pt.hidden]:e.hidden}),children:[U("div",{class:pt.content,children:[U("div",{class:pt.controls,children:[U(aa,{onClick:Vt,children:U(Vu,{})}),U(Bu,{focus:!e.hidden}),U(aa,{onClick:Va,children:[U(Wu,{}),o.length>0&&U("span",{class:pt.badge,children:o.length})]})]}),U("div",{class:pt.results,ref:n,children:[U(Gu,{keyboard:!e.hidden}),U("div",{class:pt.loadmore,ref:r})]})]}),U("div",{class:qt(pt.sidebar,{[pt.hidden]:yu()}),children:U(Ku,{})})]})}var St={container:"X",list:"F",heading:"I",title:"R",item:"o",active:"g",value:"q",count:"A"};function Ku(e){let t=_u();return t.sort((r,n)=>n.node.count-r.node.count),U("div",{class:St.container,children:[U("h3",{class:St.heading,children:"Filters"}),U("h4",{class:St.title,children:"Tags"}),U("ol",{class:St.list,children:t.map(r=>U("li",{class:qt(St.item,{[St.active]:hu(r.node.value)}),onClick:()=>vu(r.node.value),children:[U("span",{class:St.value,children:r.node.value}),U("span",{class:St.count,children:r.node.count})]}))})]})}var la={container:"f"};function Bu(e){let t=zt(null);return mt(()=>{var r,n;e.focus?(r=t.current)==null||r.focus():(n=t.current)==null||n.blur()},[e.focus]),U("div",{class:la.container,children:U("input",{ref:t,type:"text",class:la.content,value:bn(Tn()),onInput:r=>za(Ou(r.currentTarget.value)),autocapitalize:"off",autocomplete:"off",autocorrect:"off",placeholder:"Search",spellcheck:!1,role:"combobox"})})}var at={container:"b",heading:"B",item:"i",active:"h",wrapper:"C",meta:"D",actions:"s",title:"x",path:"t",excerpt:"u",more:"E"};function Qa(){let[e,t]=_n(!1);return mt(()=>{let r=()=>t(!0),n=()=>t(!1);return document.addEventListener("compositionstart",r),document.addEventListener("compositionend",n),()=>{document.removeEventListener("compositionstart",r),document.removeEventListener("compositionend",n)}},[]),e}function Gu(e){var s;let t=mu(),r=bu(),n=vn(),o=zt([]),i=Qa();mt(()=>{let c=o.current[n];c&&c.scrollIntoView({block:"center",behavior:"smooth"})},[n]),Ca(e.keyboard,c=>{if(i)return;let l=vn();c.key==="ArrowDown"?(c.preventDefault(),co(Math.min(l+1,r.length-1))):c.key==="ArrowUp"&&(c.preventDefault(),co(Math.max(l-1,0)))},[e.keyboard,i]);let a=(s=gu())!=null?s:0;return U(qe,{children:[r.length>0&&U("h3",{class:at.heading,children:[U("span",{class:at.bubble,children:new Intl.NumberFormat("en-US").format(a)})," ","results"]}),U("ol",{class:at.container,children:r.map((c,l)=>{var y,x,E,_;let u=c.matches.find(({field:Z})=>Z==="text"),p=Ja(t[c.id].title,c.matches.find(({field:Z})=>Z==="title")),d=Iu((y=t[c.id].path)!=null?y:[],c.matches.find(({field:Z})=>Z==="path")),m=Ru(t[c.id].text,u),h=Math.max(0,((_=(E=(x=u==null?void 0:u.value.highlight)==null?void 0:x.ranges)==null?void 0:E.filter(Z=>Z.start<Z.end).length)!=null?_:0)-1),v=t[c.id].location;if(Ka()){let Z=encodeURIComponent(Tn()),[ve,L]=v.split("#",2);v=`${ve}?h=${Z.replace(/%20/g,"+")}`,typeof L<"u"&&(v+=`#${L}`)}return U("li",{children:U("a",{ref:Z=>{o.current[l]=Z},href:v,onClick:()=>Vt(),class:qt(at.item,{[at.active]:l===vn()}),children:U("div",{class:at.wrapper,children:[U("div",{class:at.meta,children:U("menu",{class:at.path,children:d.map(Z=>U("li",{children:Z}))})}),U("h2",{class:at.title,children:p}),m&&U("div",{class:at.excerpt,children:m})]})})})})})]})}var Yu={container:"a"};function Ju(e){let t=Qa();return Ca(!0,r=>{var n,o,i,a,s;if(!t)if((r.metaKey||r.ctrlKey)&&r.key==="k")r.preventDefault(),Vt();else if((r.metaKey||r.ctrlKey)&&r.key==="j")document.body.classList.toggle("dark");else if(r.key==="Enter"&&!sr()){r.preventDefault();let c=vn(),l=(o=(n=st.value)==null?void 0:n.items[c])==null?void 0:o.id;if((a=(i=lr.value)==null?void 0:i.items[l])!=null&&a.location){Vt();let u=(s=lr.value)==null?void 0:s.items[l].location;if(Ka()){let p=encodeURIComponent(Tn()),[d,m]=u.split("#",2);u=`${d}?h=${p.replace(/%20/g,"+")}`,typeof m<"u"&&(u+=`#${m}`)}window.location.href=u}}else r.key==="Escape"&&!sr()&&(r.preventDefault(),Vt())},[t]),U("div",{class:Yu.container,children:[U(ju,{hidden:sr()}),U(qu,{hidden:sr()})]})}function es(e,t){fu(e),kl(U(Ju,{}),t)}function bo(){Vt()}function Xu(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Zu(){return R(b(window,"compositionstart").pipe(f(()=>!0)),b(window,"compositionend").pipe(f(()=>!1))).pipe(J(!1))}function ts(){let e=b(window,"keydown").pipe(f(t=>({mode:sr()?"global":"search",type:t.key,meta:t.ctrlKey||t.metaKey,claim(){t.preventDefault(),t.stopPropagation()}})),O(({mode:t,type:r})=>{if(t==="global"){let n=xt();if(typeof n!="undefined")return!Xu(n,r)}return!0}),xe());return Zu().pipe(g(t=>t?w:e))}function Ue(){return new URL(location.href)}function dt(e,t=!1){if(X("navigation.instant")&&!t){let r=A("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function rs(){return new I}function ns(){return location.hash.slice(1)}function os(e){let t=A("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function go(e){return R(b(window,"hashchange"),e).pipe(f(ns),J(ns()),O(t=>t.length>0),f(decodeURIComponent),ae(1))}function is(e){return go(e).pipe(f(t=>we(`[id="${t}"]`)),O(t=>typeof t!="undefined"))}function Ir(e){let t=matchMedia(e);return sn(r=>t.addListener(()=>r(t.matches))).pipe(J(t.matches))}function as(){let e=matchMedia("print");return R(b(window,"beforeprint").pipe(f(()=>!0)),b(window,"afterprint").pipe(f(()=>!1))).pipe(J(e.matches))}function _o(e,t){return e.pipe(g(r=>r?t():w))}function yo(e,t){return new N(r=>{let n=new XMLHttpRequest;return n.open("GET",`${e}`),n.responseType="blob",n.addEventListener("load",()=>{n.status>=200&&n.status<300?(r.next(n.response),r.complete()):r.error(new Error(n.statusText))}),n.addEventListener("error",()=>{r.error(new Error("Network error"))}),n.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(n.addEventListener("progress",o=>{var i;if(o.lengthComputable)t.progress$.next(o.loaded/o.total*100);else{let a=(i=n.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(o.loaded/+a*100)}}),t.progress$.next(5)),n.send(),()=>n.abort()})}function tt(e,t){return yo(e,t).pipe(g(r=>r.text()),f(r=>JSON.parse(r)),ae(1))}function Sn(e,t){let r=new DOMParser;return yo(e,t).pipe(g(n=>n.text()),f(n=>r.parseFromString(n,"text/html")),ae(1))}function ss(e,t){let r=new DOMParser;return yo(e,t).pipe(g(n=>n.text()),f(n=>r.parseFromString(n,"text/xml")),ae(1))}var xo={drawer:Y("[data-md-toggle=drawer]"),search:Y("[data-md-toggle=search]")};function wo(e,t){xo[e].checked!==t&&xo[e].click()}function On(e){let t=xo[e];return b(t,"change").pipe(f(()=>t.checked),J(t.checked))}function cs(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function ls(){return R(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(f(cs),J(cs()))}function us(){return{width:innerWidth,height:innerHeight}}function ps(){return b(window,"resize",{passive:!0}).pipe(f(us),J(us()))}function fs(){return ne([ls(),ps()]).pipe(f(([e,t])=>({offset:e,size:t})),ae(1))}function Ln(e,{viewport$:t,header$:r}){let n=t.pipe(he("size")),o=ne([n,r]).pipe(f(()=>Et(e)));return ne([r,t,o]).pipe(f(([{height:i},{offset:a,size:s},{x:c,y:l}])=>({offset:{x:a.x-c,y:a.y-l+i},size:s})))}var Qu=Y("#__config"),mr=JSON.parse(Qu.textContent);mr.base=`${new URL(mr.base,Ue())}`;function Ne(){return mr}function X(e){return mr.features.includes(e)}function Gt(e,t){return typeof t!="undefined"?mr.translations[e].replace("#",t.toString()):mr.translations[e]}function ht(e,t=document){return Y(`[data-md-component=${e}]`,t)}function Te(e,t=document){return $(`[data-md-component=${e}]`,t)}function ep(e){let t=Y(".md-typeset > :first-child",e);return b(t,"click",{once:!0}).pipe(f(()=>Y(".md-typeset",e)),f(r=>({hash:__md_hash(r.innerHTML)})))}function ms(e){if(!X("announce.dismiss")||!e.childElementCount)return w;if(!e.hidden){let t=Y(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return j(()=>{let t=new I;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),ep(e).pipe(P(r=>t.next(r)),z(()=>t.complete()),f(r=>k({ref:e},r)))})}function tp(e,{target$:t}){return t.pipe(f(r=>({hidden:r!==e})))}function ds(e,t){let r=new I;return r.subscribe(({hidden:n})=>{e.hidden=n}),tp(e,t).pipe(P(n=>r.next(n)),z(()=>r.complete()),f(n=>k({ref:e},n)))}function Eo(e,t){return t==="inline"?A("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},A("div",{class:"md-tooltip__inner md-typeset"})):A("div",{class:"md-tooltip",id:e,role:"tooltip"},A("div",{class:"md-tooltip__inner md-typeset"}))}function Mn(...e){return A("div",{class:"md-tooltip2",role:"dialog"},A("div",{class:"md-tooltip2__inner md-typeset"},e))}function hs(...e){return A("div",{class:"md-tooltip2",role:"tooltip"},A("div",{class:"md-tooltip2__inner md-typeset"},e))}function vs(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return A("aside",{class:"md-annotation",tabIndex:0},Eo(t),A("a",{href:r,class:"md-annotation__index",tabIndex:-1},A("span",{"data-md-annotation-id":e})))}else return A("aside",{class:"md-annotation",tabIndex:0},Eo(t),A("span",{class:"md-annotation__index",tabIndex:-1},A("span",{"data-md-annotation-id":e})))}function bs(e){return A("button",{class:"md-code__button",title:Gt("clipboard.copy"),"data-clipboard-target":`#${e} > code`,"data-md-type":"copy"})}function gs(){return A("button",{class:"md-code__button",title:"Toggle line selection","data-md-type":"select"})}function _s(){return A("nav",{class:"md-code__nav"})}var op=_r(To());function xs(e){return A("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>A("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?Oi(r):r)))}function So(e){let t=`tabbed-control tabbed-control--${e}`;return A("div",{class:t,hidden:!0},A("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function ws(e){return A("div",{class:"md-typeset__scrollwrap"},A("div",{class:"md-typeset__table"},e))}function ip(e){var n;let t=Ne(),r=new URL(`../${e.version}/`,t.base);return A("li",{class:"md-version__item"},A("a",{href:`${r}`,class:"md-version__link"},e.title,((n=t.version)==null?void 0:n.alias)&&e.aliases.length>0&&A("span",{class:"md-version__alias"},e.aliases[0])))}function Es(e,t){var n;let r=Ne();return e=e.filter(o=>{var i;return!((i=o.properties)!=null&&i.hidden)}),A("div",{class:"md-version"},A("button",{class:"md-version__current","aria-label":Gt("select.version")},t.title,((n=r.version)==null?void 0:n.alias)&&t.aliases.length>0&&A("span",{class:"md-version__alias"},t.aliases[0])),A("ul",{class:"md-version__list"},e.map(ip)))}var ap=0;function sp(e,t=250){let r=ne([ar(e),Nt(e,t)]).pipe(f(([o,i])=>o||i),se()),n=j(()=>Ai(e)).pipe(ie(Dt),Lr(1),Qe(r),f(()=>Ci(e)));return r.pipe(Sr(o=>o),g(()=>ne([r,n])),f(([o,i])=>({active:o,offset:i})),xe())}function Rr(e,t,r=250){let{content$:n,viewport$:o}=t,i=`__tooltip2_${ap++}`;return j(()=>{let a=new I,s=new Dn(!1);a.pipe(be(),ye(!1)).subscribe(s);let c=s.pipe(Tr(u=>ze(+!u*250,zn)),se(),g(u=>u?n:w),P(u=>u.id=i),xe());ne([a.pipe(f(({active:u})=>u)),c.pipe(g(u=>Nt(u,250)),J(!1))]).pipe(f(u=>u.some(p=>p))).subscribe(s);let l=s.pipe(O(u=>u),fe(c,o),f(([u,p,{size:d}])=>{let m=e.getBoundingClientRect(),h=m.width/2;if(p.role==="tooltip")return{x:h,y:8+m.height};if(m.y>=d.height/2){let{height:v}=Ae(p);return{x:h,y:-16-v}}else return{x:h,y:16+m.height}}));return ne([c,a,l]).subscribe(([u,{offset:p},d])=>{u.style.setProperty("--md-tooltip-host-x",`${p.x}px`),u.style.setProperty("--md-tooltip-host-y",`${p.y}px`),u.style.setProperty("--md-tooltip-x",`${d.x}px`),u.style.setProperty("--md-tooltip-y",`${d.y}px`),u.classList.toggle("md-tooltip2--top",d.y<0),u.classList.toggle("md-tooltip2--bottom",d.y>=0)}),s.pipe(O(u=>u),fe(c,(u,p)=>p),O(u=>u.role==="tooltip")).subscribe(u=>{let p=Ae(Y(":scope > *",u));u.style.setProperty("--md-tooltip-width",`${p.width}px`),u.style.setProperty("--md-tooltip-tail","0px")}),s.pipe(se(),Ie(je),fe(c)).subscribe(([u,p])=>{p.classList.toggle("md-tooltip2--active",u)}),ne([s.pipe(O(u=>u)),c]).subscribe(([u,p])=>{p.role==="dialog"?(e.setAttribute("aria-controls",i),e.setAttribute("aria-haspopup","dialog")):e.setAttribute("aria-describedby",i)}),s.pipe(O(u=>!u)).subscribe(()=>{e.removeAttribute("aria-controls"),e.removeAttribute("aria-describedby"),e.removeAttribute("aria-haspopup")}),sp(e,r).pipe(P(u=>a.next(u)),z(()=>a.complete()),f(u=>k({ref:e},u)))})}function Je(e,{viewport$:t},r=document.body){return Rr(e,{content$:new N(n=>{let o=e.title,i=hs(o);return n.next(i),e.removeAttribute("title"),r.append(i),()=>{i.remove(),e.setAttribute("title",o)}}),viewport$:t},0)}function cp(e,t){let r=j(()=>ne([Hi(e),Dt(t)])).pipe(f(([{x:n,y:o},i])=>{let{width:a,height:s}=Ae(e);return{x:n-i.x+a/2,y:o-i.y+s/2}}));return ar(e).pipe(g(n=>r.pipe(f(o=>({active:n,offset:o})),Me(+!n||1/0))))}function Ts(e,t,{target$:r}){let[n,o]=Array.from(e.children);return j(()=>{let i=new I,a=i.pipe(be(),ye(!0));return i.subscribe({next({offset:s}){e.style.setProperty("--md-tooltip-x",`${s.x}px`),e.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),Tt(e).pipe(ee(a)).subscribe(s=>{e.toggleAttribute("data-md-visible",s)}),R(i.pipe(O(({active:s})=>s)),i.pipe(Ye(250),O(({active:s})=>!s))).subscribe({next({active:s}){s?e.prepend(n):n.remove()},complete(){e.prepend(n)}}),i.pipe(Ze(16,je)).subscribe(({active:s})=>{n.classList.toggle("md-tooltip--active",s)}),i.pipe(Lr(125,je),O(()=>!!e.offsetParent),f(()=>e.offsetParent.getBoundingClientRect()),f(({x:s})=>s)).subscribe({next(s){s?e.style.setProperty("--md-tooltip-0",`${-s}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),b(o,"click").pipe(ee(a),O(s=>!(s.metaKey||s.ctrlKey))).subscribe(s=>{s.stopPropagation(),s.preventDefault()}),b(o,"mousedown").pipe(ee(a),fe(i)).subscribe(([s,{active:c}])=>{var l;if(s.button!==0||s.metaKey||s.ctrlKey)s.preventDefault();else if(c){s.preventDefault();let u=e.parentElement.closest(".md-annotation");u instanceof HTMLElement?u.focus():(l=xt())==null||l.blur()}}),r.pipe(ee(a),O(s=>s===n),jt(125)).subscribe(()=>e.focus()),cp(e,t).pipe(P(s=>i.next(s)),z(()=>i.complete()),f(s=>k({ref:e},s)))})}function lp(e){let t=Ne();if(e.tagName!=="CODE")return[e];let r=[".c",".c1",".cm"];if(t.annotate){let n=e.closest("[class|=language]");if(n)for(let o of Array.from(n.classList)){if(!o.startsWith("language-"))continue;let[,i]=o.split("-");i in t.annotate&&r.push(...t.annotate[i])}}return $(r.join(", "),e)}function up(e){let t=[];for(let r of lp(e)){let n=[],o=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=o.nextNode();i;i=o.nextNode())n.push(i);for(let i of n){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,s,c]=a;if(typeof c=="undefined"){let l=i.splitText(a.index);i=l.splitText(s.length),t.push(l)}else{i.textContent=s,t.push(i);break}}}}return t}function Ss(e,t){t.append(...Array.from(e.childNodes))}function kn(e,t,{target$:r,print$:n}){let o=t.closest("[id]"),i=o==null?void 0:o.id,a=new Map;for(let s of up(t)){let[,c]=s.textContent.match(/\((\d+)\)/);we(`:scope > li:nth-child(${c})`,e)&&(a.set(c,vs(c,i)),s.replaceWith(a.get(c)))}return a.size===0?w:j(()=>{let s=new I,c=s.pipe(be(),ye(!0)),l=[];for(let[u,p]of a)l.push([Y(".md-typeset",p),Y(`:scope > li:nth-child(${u})`,e)]);return n.pipe(ee(c)).subscribe(u=>{e.hidden=!u,e.classList.toggle("md-annotation-list",u);for(let[p,d]of l)u?Ss(p,d):Ss(d,p)}),R(...[...a].map(([,u])=>Ts(u,t,{target$:r}))).pipe(z(()=>s.complete()),xe())})}function Os(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return Os(t)}}function Ls(e,t){return j(()=>{let r=Os(e);return typeof r!="undefined"?kn(r,e,t):w})}var ks=_r(Lo());var pp=0,Ms=R(b(window,"keydown").pipe(f(()=>!0)),R(b(window,"keyup"),b(window,"contextmenu")).pipe(f(()=>!1))).pipe(J(!1),ae(1));function As(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return As(t)}}function fp(e){return Re(e).pipe(f(({width:t})=>({scrollable:Mr(e).width>t})),he("scrollable"))}function Cs(e,t){let{matches:r}=matchMedia("(hover)"),n=j(()=>{let o=new I,i=o.pipe(Jn(1));o.subscribe(({scrollable:m})=>{m&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let a=[],s=e.closest("pre"),c=s.closest("[id]"),l=c?c.id:pp++;s.id=`__code_${l}`;let u=[],p=e.closest(".highlight");if(p instanceof HTMLElement){let m=As(p);if(typeof m!="undefined"&&(p.classList.contains("annotate")||X("content.code.annotate"))){let h=kn(m,e,t);u.push(Re(p).pipe(ee(i),f(({width:v,height:y})=>v&&y),se(),g(v=>v?h:w)))}}let d=$(":scope > span[id]",e);if(d.length&&(e.classList.add("md-code__content"),e.closest(".select")||X("content.code.select")&&!e.closest(".no-select"))){let m=+d[0].id.split("-").pop(),h=gs();a.push(h),X("content.tooltips")&&u.push(Je(h,{viewport$}));let v=b(h,"click").pipe(Or(L=>!L,!1),P(()=>h.blur()),xe());v.subscribe(L=>{h.classList.toggle("md-code__button--active",L)});let y=me(d).pipe(ie(L=>Nt(L).pipe(f(M=>[L,M]))));v.pipe(g(L=>L?y:w)).subscribe(([L,M])=>{let D=we(".hll.select",L);if(D&&!M)D.replaceWith(...Array.from(D.childNodes));else if(!D&&M){let te=document.createElement("span");te.className="hll select",te.append(...Array.from(L.childNodes).slice(1)),L.append(te)}});let x=me(d).pipe(ie(L=>b(L,"mousedown").pipe(P(M=>M.preventDefault()),f(()=>L)))),E=v.pipe(g(L=>L?x:w),fe(Ms),f(([L,M])=>{var te;let D=d.indexOf(L)+m;if(M===!1)return[D,D];{let ue=$(".hll",e).map(le=>d.indexOf(le.parentElement)+m);return(te=window.getSelection())==null||te.removeAllRanges(),[Math.min(D,...ue),Math.max(D,...ue)]}})),_=go(w).pipe(O(L=>L.startsWith(`__codelineno-${l}-`)));_.subscribe(L=>{let[,,M]=L.split("-"),D=M.split(":").map(ue=>+ue-m+1);D.length===1&&D.push(D[0]);for(let ue of $(".hll:not(.select)",e))ue.replaceWith(...Array.from(ue.childNodes));let te=d.slice(D[0]-1,D[1]);for(let ue of te){let le=document.createElement("span");le.className="hll",le.append(...Array.from(ue.childNodes).slice(1)),ue.append(le)}}),_.pipe(Me(1),Ie(_e)).subscribe(L=>{if(L.includes(":")){let M=document.getElementById(L.split(":")[0]);M&&setTimeout(()=>{let D=M,te=-64;for(;D!==document.body;)te+=D.offsetTop,D=D.offsetParent;window.scrollTo({top:te})},1)}});let ve=me($('a[href^="#__codelineno"]',p)).pipe(ie(L=>b(L,"click").pipe(P(M=>M.preventDefault()),f(()=>L)))).pipe(ee(i),fe(Ms),f(([L,M])=>{let te=+Y(`[id="${L.hash.slice(1)}"]`).parentElement.id.split("-").pop();if(M===!1)return[te,te];{let ue=$(".hll",e).map(le=>+le.parentElement.id.split("-").pop());return[Math.min(te,...ue),Math.max(te,...ue)]}}));R(E,ve).subscribe(L=>{let M=`#__codelineno-${l}-`;L[0]===L[1]?M+=L[0]:M+=`${L[0]}:${L[1]}`,history.replaceState({},"",M),window.dispatchEvent(new HashChangeEvent("hashchange",{newURL:window.location.origin+window.location.pathname+M,oldURL:window.location.href}))})}if(ks.default.isSupported()&&(e.closest(".copy")||X("content.code.copy")&&!e.closest(".no-copy"))){let m=bs(s.id);a.push(m),X("content.tooltips")&&u.push(Je(m,{viewport$}))}if(a.length){let m=_s();m.append(...a),s.insertBefore(m,e)}return fp(e).pipe(P(m=>o.next(m)),z(()=>o.complete()),f(m=>k({ref:e},m)),Ft(R(...u).pipe(ee(i))))});return X("content.lazy")?Tt(e).pipe(O(o=>o),Me(1),g(()=>n)):n}function mp(e,{target$:t,print$:r}){let n=!0;return R(t.pipe(f(o=>o.closest("details:not([open])")),O(o=>e===o),f(()=>({action:"open",reveal:!0}))),r.pipe(O(o=>o||!n),P(()=>n=e.open),f(o=>({action:o?"open":"close"}))))}function Hs(e,t){return j(()=>{let r=new I;return r.subscribe(({action:n,reveal:o})=>{e.toggleAttribute("open",n==="open"),o&&e.scrollIntoView()}),mp(e,t).pipe(P(n=>r.next(n)),z(()=>r.complete()),f(n=>k({ref:e},n)))})}var $s;function dp(){return typeof GLightbox=="undefined"||GLightbox instanceof Element?wt("https://unpkg.com/glightbox@3/dist/js/glightbox.min.js").pipe(de(()=>w),f(()=>{})):K(void 0)}function hp(){return Li("https://unpkg.com/glightbox@3/dist/css/glightbox.min.css").pipe(de(()=>w),f(()=>{}))}function Ps(e){return $s||($s=dp().pipe(f(()=>new GLightbox(k({touchNavigation:!0,loop:!1,zoomable:!0,draggable:!0,openEffect:"zoom",closeEffect:"zoom",slideEffect:"slide",onOpen:()=>{document.activeElement instanceof HTMLElement&&document.activeElement.blur()}},typeof GLightboxOptions!="undefined"?GLightboxOptions:{}))),ae(1))),hp().pipe(g(()=>$s)).pipe(g(t=>(t.setElements(e),e.map((r,n)=>(b(r,"click").subscribe(o=>{o.preventDefault(),t.openAt(n)}),{ref:r})))))}var Is=0,Rs=new Map;function vp(e){let t=document.createElement("h3");t.innerHTML=e.innerHTML;let r=[t],n=e.nextElementSibling;for(;n&&!(n instanceof HTMLHeadingElement);)r.push(n.cloneNode(!0)),n=n.nextElementSibling;return r}function bp(e,t){for(let r of $("[href], [src]",e))for(let n of["href","src"]){let o=r.getAttribute(n);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){r[n]=new URL(r.getAttribute(n),t).toString();break}}for(let r of $("[name^=__], [for]",e))for(let n of["id","for","name"]){let o=r.getAttribute(n);o&&r.setAttribute(n,`${o}$preview_${Is}`)}return Is++,K(e)}function gp(e){let t=Rs.get(e.toString());return t?K(t):Sn(e).pipe(g(r=>bp(r,e)),f(r=>(Rs.set(e.toString(),r),r)))}function js(e,t){let{sitemap$:r}=t;if(!(e instanceof HTMLAnchorElement))return w;if(!(X("navigation.instant.preview")||e.hasAttribute("data-preview")))return w;e.removeAttribute("title");let n=ne([ar(e),Nt(e).pipe(ke(1))]).pipe(f(([i,a])=>i||a),se(),O(i=>i));return It([r,n]).pipe(g(([i])=>{let a=new URL(e.href);return a.search=a.hash="",i.has(`${a}`)?K(a):w}),g(i=>gp(i)),g(i=>{let a=e.hash?`article [id="${decodeURIComponent(e.hash.slice(1))}"]`:"article h1",s=we(a,i);return typeof s=="undefined"?w:K(vp(s))})).pipe(g(i=>{let a=new N(s=>{let c=Mn(...i);return s.next(c),document.body.append(c),()=>c.remove()});return Rr(e,k({content$:a},t))}))}var Fs=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.flowchartTitleText{fill:var(--md-mermaid-label-fg-color)}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel p,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel p{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}.classDiagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs marker.marker.composition.class path,defs marker.marker.dependency.class path,defs marker.marker.extension.class path{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs marker.marker.aggregation.class path{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}.statediagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}a .nodeLabel{text-decoration:underline}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}[id^=entity] path,[id^=entity] rect{fill:var(--md-default-bg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs .marker.oneOrMore.er *,defs .marker.onlyOne.er *,defs .marker.zeroOrMore.er *,defs .marker.zeroOrOne.er *{stroke:var(--md-mermaid-edge-color)!important}text:not([class]):last-child{fill:var(--md-mermaid-label-fg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}.actor-line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}[id$=-arrowhead] path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var Mo,yp=0;function xp(){return typeof mermaid=="undefined"||mermaid instanceof Element?wt("https://unpkg.com/mermaid@11/dist/mermaid.min.js"):K(void 0)}function Us(e){return e.classList.remove("mermaid"),Mo||(Mo=xp().pipe(P(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Fs,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),f(()=>{}),ae(1))),Mo.subscribe(()=>Fo(null,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${yp++}`,r=A("div",{class:"mermaid"}),n=e.textContent,{svg:o,fn:i}=yield mermaid.render(t,n),a=r.attachShadow({mode:"closed"});a.innerHTML=o,e.replaceWith(r),i==null||i(a)})),Mo.pipe(f(()=>({ref:e})))}var Ns=A("table");function Ds(e){return e.replaceWith(Ns),Ns.replaceWith(ws(e)),K({ref:e})}function wp(e){let t=e.find(r=>r.checked)||e[0];return R(...e.map(r=>b(r,"change").pipe(f(()=>Y(`label[for="${r.id}"]`))))).pipe(J(Y(`label[for="${t.id}"]`)),f(r=>({active:r})))}function Ws(e,{viewport$:t,target$:r}){let n=Y(".tabbed-labels",e),o=$(":scope > input",e),i=So("prev");e.append(i);let a=So("next");return e.append(a),j(()=>{let s=new I,c=s.pipe(be(),ye(!0));ne([s,Re(e),Tt(e)]).pipe(ee(c),Ze(1,je)).subscribe({next([{active:l},u]){let p=Et(l),{width:d}=Ae(l);e.style.setProperty("--md-indicator-x",`${p.x}px`),e.style.setProperty("--md-indicator-width",`${d}px`);let m=pn(n);(p.x<m.x||p.x+d>m.x+u.width)&&n.scrollTo({left:Math.max(0,p.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),ne([Dt(n),Re(n)]).pipe(ee(c)).subscribe(([l,u])=>{let p=Mr(n);i.hidden=l.x<16,a.hidden=l.x>p.width-u.width-16}),R(b(i,"click").pipe(f(()=>-1)),b(a,"click").pipe(f(()=>1))).pipe(ee(c)).subscribe(l=>{let{width:u}=Ae(n);n.scrollBy({left:u*l,behavior:"smooth"})}),r.pipe(ee(c),O(l=>o.includes(l))).subscribe(l=>l.click()),n.classList.add("tabbed-labels--linked");for(let l of o){let u=Y(`label[for="${l.id}"]`);u.replaceChildren(A("a",{href:`#${u.htmlFor}`,tabIndex:-1},...Array.from(u.childNodes))),b(u.firstElementChild,"click").pipe(ee(c),O(p=>!(p.metaKey||p.ctrlKey)),P(p=>{p.preventDefault(),p.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${u.htmlFor}`),u.click()})}return X("content.tabs.link")&&s.pipe(ke(1),fe(t)).subscribe(([{active:l},{offset:u}])=>{let p=l.innerText.trim();if(l.hasAttribute("data-md-switching"))l.removeAttribute("data-md-switching");else{let d=e.offsetTop-u.y;for(let h of $("[data-tabs]"))for(let v of $(":scope > input",h)){let y=Y(`label[for="${v.id}"]`);if(y!==l&&y.innerText.trim()===p){y.setAttribute("data-md-switching",""),v.click();break}}window.scrollTo({top:e.offsetTop-d});let m=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([p,...m])])}}),s.pipe(ee(c)).subscribe(()=>{for(let l of $("audio, video",e))l.offsetWidth&&l.autoplay?l.play().catch(()=>{}):l.pause()}),wp(o).pipe(P(l=>s.next(l)),z(()=>s.complete()),f(l=>k({ref:e},l)))}).pipe(Pt(_e))}function Vs(e,t){let{viewport$:r,target$:n,print$:o}=t;return R(...$(".annotate:not(.highlight)",e).map(i=>Ls(i,{target$:n,print$:o})),...$("pre:not(.mermaid) > code",e).map(i=>Cs(i,{target$:n,print$:o})),...$("a",e).map(i=>js(i,t)),...$("pre.mermaid",e).map(i=>Us(i)),...[$(".glightbox",e)].filter(i=>i.length>0).map(i=>Ps(i)),...$("table:not([class])",e).map(i=>Ds(i)),...$("details",e).map(i=>Hs(i,{target$:n,print$:o})),...$("[data-tabs]",e).map(i=>Ws(i,{viewport$:r,target$:n})),...$("[title]:not([data-preview])",e).filter(()=>X("content.tooltips")).map(i=>Je(i,{viewport$:r})),...$(".footnote-ref",e).filter(()=>X("content.footnote.tooltips")).map(i=>Rr(i,{content$:new N(a=>{let s=new URL(i.href).hash.slice(1),c=Array.from(document.getElementById(s).cloneNode(!0).children),l=Mn(...c);return a.next(l),document.body.append(l),()=>l.remove()}),viewport$:r})))}function Ep(e,{alert$:t}){return t.pipe(g(r=>R(K(!0),K(!1).pipe(jt(2e3))).pipe(f(n=>({message:r,active:n})))))}function zs(e,t){let r=Y(".md-typeset",e);return j(()=>{let n=new I;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),Ep(e,t).pipe(P(o=>n.next(o)),z(()=>n.complete()),f(o=>k({ref:e},o)))})}function Tp({viewport$:e}){if(!X("header.autohide"))return K(!1);let t=e.pipe(f(({offset:{y:o}})=>o),Rt(2,1),f(([o,i])=>[o<i,i]),he(0)),r=ne([e,t]).pipe(O(([{offset:o},[,i]])=>Math.abs(i-o.y)>100),f(([,[o]])=>o),se()),n=On("search");return ne([e,n]).pipe(f(([{offset:o},i])=>o.y>400&&!i),se(),g(o=>o?r:K(!1)),J(!1))}function qs(e,t){return j(()=>ne([Re(e),Tp(t)])).pipe(f(([{height:r},n])=>({height:r,hidden:n})),se((r,n)=>r.height===n.height&&r.hidden===n.hidden),ae(1))}function Ks(e,{viewport$:t,header$:r,main$:n}){return j(()=>{let o=new I,i=o.pipe(be(),ye(!0));o.pipe(he("active"),Qe(r)).subscribe(([{active:s},{hidden:c}])=>{e.classList.toggle("md-header--shadow",s&&!c),e.hidden=c});let a=me($("[title]",e)).pipe(O(()=>X("content.tooltips")),ie(s=>Je(s,{viewport$:t})));return n.subscribe(o),r.pipe(ee(i),f(s=>k({ref:e},s)),Ft(a.pipe(ee(i))))})}function Sp(e,{viewport$:t,header$:r}){return Ln(e,{viewport$:t,header$:r}).pipe(f(({offset:{y:n}})=>{let{height:o}=Ae(e);return{active:o>0&&n>=o}}),he("active"))}function Bs(e,t){return j(()=>{let r=new I;r.subscribe({next({active:o}){e.classList.toggle("md-header__title--active",o)},complete(){e.classList.remove("md-header__title--active")}});let n=we(".md-content h1");return typeof n=="undefined"?w:Sp(n,t).pipe(P(o=>r.next(o)),z(()=>r.complete()),f(o=>k({ref:e},o)))})}function Gs(e,{viewport$:t,header$:r}){let n=r.pipe(f(({height:i})=>i),se()),o=n.pipe(g(()=>Re(e).pipe(f(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),he("bottom"))));return ne([n,o,t]).pipe(f(([i,{top:a,bottom:s},{offset:{y:c},size:{height:l}}])=>(l=Math.max(0,l-Math.max(0,a-c,i)-Math.max(0,l+c-s)),{offset:a-i,height:l,active:a-i<=c})),se((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function Op(e){let t=__md_get("__palette")||{index:e.findIndex(n=>matchMedia(n.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return K(...e).pipe(ie(n=>b(n,"change").pipe(f(()=>n))),J(e[r]),f(n=>({index:e.indexOf(n),color:{media:n.getAttribute("data-md-color-media"),scheme:n.getAttribute("data-md-color-scheme"),primary:n.getAttribute("data-md-color-primary"),accent:n.getAttribute("data-md-color-accent")}})),ae(1))}function Ys(e){let t=$("input",e),r=A("meta",{name:"theme-color"});document.head.appendChild(r);let n=A("meta",{name:"color-scheme"});document.head.appendChild(n);let o=Ir("(prefers-color-scheme: light)");return j(()=>{let i=new I;return i.subscribe(a=>{if(document.body.setAttribute("data-md-color-switching",""),a.color.media==="(prefers-color-scheme)"){let s=matchMedia("(prefers-color-scheme: light)"),c=document.querySelector(s.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");a.color.scheme=c.getAttribute("data-md-color-scheme"),a.color.primary=c.getAttribute("data-md-color-primary"),a.color.accent=c.getAttribute("data-md-color-accent")}for(let[s,c]of Object.entries(a.color))document.body.setAttribute(`data-md-color-${s}`,c);for(let s=0;s<t.length;s++){let c=t[s].nextElementSibling;c instanceof HTMLElement&&(c.hidden=a.index!==s)}__md_set("__palette",a)}),b(e,"keydown").pipe(O(a=>a.key==="Enter"),fe(i,(a,s)=>s)).subscribe(({index:a})=>{a=(a+1)%t.length,t[a].click(),t[a].focus()}),i.pipe(f(()=>{let a=ht("header"),s=window.getComputedStyle(a);return n.content=s.colorScheme,s.backgroundColor.match(/\d+/g).map(c=>(+c).toString(16).padStart(2,"0")).join("")})).subscribe(a=>r.content=`#${a}`),i.pipe(Ie(_e)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),Op(t).pipe(ee(o.pipe(ke(1))),Ut(),P(a=>i.next(a)),z(()=>i.complete()),f(a=>k({ref:e},a)))})}function Js(e,{progress$:t}){return j(()=>{let r=new I;return r.subscribe(({value:n})=>{e.style.setProperty("--md-progress-value",`${n}`)}),t.pipe(P(n=>r.next({value:n})),z(()=>r.complete()),f(n=>({ref:e,value:n})))})}var Xs='.m u{text-decoration:underline!important;text-decoration-style:wavy!important;text-decoration-thickness:1px!important}.p{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-color:rgba(var(--color-backdrop)/var(--alpha-lighter));cursor:pointer;height:100%;pointer-events:auto;position:absolute;transition:opacity .25s;width:100%}.p.v{opacity:0;pointer-events:none;transition:opacity .35s}.r{align-items:center;background-color:initial;border:none;border-radius:var(--space-2);cursor:pointer;display:flex;flex-shrink:0;font-family:var(--font-family);height:36px;justify-content:center;outline:none;padding:0;position:relative;transition:background-color .25s,color .25s;width:36px;z-index:1}.r svg{stroke:rgb(var(--color-foreground));height:18px;opacity:.5;width:18px}.r:before{background-color:rgb(var(--color-background-subtle));border-radius:var(--border-radius-2);content:"";inset:0;opacity:0;position:absolute;transform:scale(.75);transition:transform 125ms,opacity 125ms;z-index:0}.r:hover:before{opacity:1;transform:scale(1)}.r.c{cursor:auto}.r.c:before{display:none}.n{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-color:rgba(var(--color-background)/var(--alpha-light));border:1px solid rgb(var(--color-foreground)/var(--alpha-lightest));border-radius:var(--space-3);box-shadow:0 0 60px #0000000d;display:flex;height:480px;overflow:hidden;pointer-events:auto;position:absolute;transition:transform .25s cubic-bezier(.16,1,.3,1),opacity .25s;width:640px}.n.l{opacity:0;pointer-events:none;transform:scale(1.1);transition:transform .25s .15s,opacity .15s}@media (max-width:680px){.n{border-radius:0;height:100%;width:100%}}.y{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;min-width:0}@keyframes d{0%{transform:scale(0)}50%{transform:scale(1.2)}to{transform:scale(1)}}.w{animation:d .25s ease-in-out;background:var(--color-highlight);border-radius:100%;color:#fff;font-size:8px;font-weight:700;height:12px;padding-top:1px;position:absolute;right:4px;top:4px;width:12px}.e{background-color:rgb(var(--color-background-subtle)/var(--alpha-lighter));border-left:1px solid rgb(var(--color-foreground)/var(--alpha-lightest));flex-shrink:0;overflow:scroll;position:relative;transition:width .35s cubic-bezier(.16,1,.3,1),opacity .25s;width:200px}.e>*{transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.e.l{opacity:0;width:0}.e.l>*{transform:translate(-48px)}@media (max-width:680px){.e{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-color:rgba(var(--color-background-subtle)/var(--alpha-light));box-shadow:0 0 60px #00000026;height:100%;position:absolute;right:0;top:0}}.k{border-bottom:1px solid rgb(var(--color-foreground)/var(--alpha-lightest));display:flex;gap:var(--space-1);padding:var(--space-2)}.z{-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain}.j{padding:8px 10px}.X{color:rgb(var(--color-foreground)/var(--alpha-light));padding:var(--space-2);position:absolute;width:200px}.F,.X{display:flex;flex-direction:column}.F{gap:2px;list-style:none;padding:0}.F,.I{margin:0}.I{font-size:16px;font-weight:400}.I,.R{padding:8px}.R{font-size:14px;margin:4px 0 0;opacity:.5}.R,.o{font-size:12px}.o{cursor:pointer;display:flex;padding:4px 8px;position:relative}.o:before{background-color:var(--color-highlight-transparent);border-radius:var(--space-1);content:"";inset:0;opacity:0;position:absolute;transform:scale(.75);transition:transform 125ms,opacity 125ms;z-index:0}.o.g:before,.o:hover:before{opacity:1;transform:scale(1)}.o.g,.o:hover{color:var(--color-highlight)}.q{flex-grow:1}.A,.q{position:relative}.A{font-weight:700}.f{flex-grow:1}.f input{background:#0000;border:none;color:rgb(var(--color-foreground));font-family:var(--font-family);font-size:16px;height:100%;letter-spacing:-.25px;outline:none;width:100%}.b{color:rgb(var(--color-foreground)/var(--alpha-light));display:flex;flex-direction:column;gap:2px;line-height:1.3;list-style:none;margin:var(--space-2);margin-top:0;padding:0}.B,.b li{margin:0}.B{color:rgb(var(--color-foreground)/var(--alpha-lighter));font-size:12px;margin-top:var(--space-2);padding:0 18px}.i{border-radius:var(--space-2);color:inherit;cursor:pointer;display:flex;flex-direction:row;flex-grow:1;padding:8px 10px;position:relative;text-decoration:none}.i:before{background-color:rgb(var(--color-background-subtle));border-radius:var(--border-radius-2);content:"";display:block;inset:0;opacity:0;position:absolute;transform:scale(.9);transition:transform 125ms,opacity 125ms;z-index:0}@media (pointer:fine){.i.h:before,.i:hover:before{opacity:1;transform:scale(1)}}.i mark{background:#0000;color:var(--color-highlight)}.i u{text-decoration:underline}.C{flex-direction:column;flex-grow:1;gap:5.5px}.C,.D{display:flex;min-width:0}.D{align-items:flex-start;gap:var(--space-2);justify-content:space-between}.s{align-items:flex-end;align-self:flex-end;display:flex;flex-direction:column;gap:6px;justify-content:flex-end;margin-right:-8px;margin-top:auto;opacity:0;position:relative;transform:translate(-2px);transition:transform 125ms,opacity 125ms;z-index:0}@media (pointer:fine){.h>.s,:hover>.s{opacity:1;transform:none}}.x{font-size:14px;margin:0;position:relative}.x code{background:rgb(var(--color-background-subtle));border-radius:var(--space-1);font-size:13px;padding:2px 4px}.t{color:rgb(var(--color-foreground)/.45);display:inline-flex;flex:1 1 auto;flex-wrap:wrap;font-size:12px;gap:var(--space-1);list-style:none;margin:0;min-width:0;padding:0;position:relative}.t li{white-space:nowrap}.t li:after{content:"/";display:inline;margin-left:var(--space-1)}.t li:last-child:after{content:"";display:none}.u{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:rgb(var(--color-foreground));display:-webkit-box;font-size:12px;line-height:1.5;overflow:hidden;position:relative}.u code{background:rgb(var(--color-background-subtle));border-radius:var(--space-1);padding:2px 4px}.E,.u code{font-size:11px}.E{color:rgb(var(--color-foreground)/.45);line-height:1;white-space:nowrap;z-index:1}.a{--space-1:4px;--space-2:calc(var(--space-1)*2);--space-3:calc(var(--space-2)*2);--space-4:calc(var(--space-3)*2);--space-5:calc(var(--space-4)*2);--alpha-light:.7;--alpha-lighter:.54;--alpha-lightest:.07;--color-highlight:var(--md-accent-fg-color,#526cfe);--color-highlight-transparent:var( --md-accent-fg-color--transparent,#526cfe1a );--border-radius-1:var(--space-1);--border-radius-2:var(--space-2);--border-radius-3:calc(var(--space-1) + var(--space-2));--font-family:var( --md-text-font-family,Inter,Roboto Flex,system-ui,sans-serif );--font-size:16px;--line-height:1.5;--letter-spacing:-.5px;-webkit-font-smoothing:antialiased;align-items:center;display:flex;font-family:var(--font-family);font-size:var(--font-size);height:100vh;justify-content:center;letter-spacing:var(--letter-spacing);line-height:var(--line-height);pointer-events:none;position:absolute;width:100vw}@media (pointer:coarse){.a{height:-webkit-fill-available}}.a *,.a :after,.a :before{box-sizing:border-box}';function Zs(e,{index$:t}){let r=Ne(),n=document.createElement("div");document.body.appendChild(n),n.style.position="fixed",n.style.height="100%",n.style.top="0",n.style.zIndex="4";let o=n.attachShadow({mode:"open"});o.appendChild(A("style",{},Xs.toString()));try{Xa(r.search,{highlight:r.features.includes("search.highlight")}),me(t).subscribe(i=>{for(let a of i.items)a.location=new URL(`./${a.location}`,r.base).toString();es(i,o)}),b(e,"click").subscribe(()=>{bo()}),On("search").pipe(ke(1)).subscribe(()=>bo())}catch(i){e.hidden=!0;let a=Y("label[for=__search]");a.hidden=!0}return Ge}var Qs=_r(To());function ec(e,{index$:t,location$:r}){return ne([t,r.pipe(J(Ue()),O(n=>!!n.searchParams.get("h")))]).pipe(f(([n,o])=>Mp(n.config)(o.searchParams.get("h"))),f(n=>{var a;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let s=i.nextNode();s;s=i.nextNode())if((a=s.parentElement)!=null&&a.offsetHeight){let c=s.textContent,l=n(c);l.length>c.length&&o.set(s,l)}for(let[s,c]of o){let{childNodes:l}=A("span",null,c);s.replaceWith(...Array.from(l))}return{ref:e,nodes:o}}))}function Mp(e){let t=e.separator.split("|").map(o=>o.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":o).join("|"),r=new RegExp(t,"img"),n=(o,i,a)=>`${i}<mark data-md-highlight>${a}</mark>`;return o=>{o=o.replace(/\s+/g," ").replace(/&/g,"&").trim();let i=new RegExp(`(^|${e.separator}|)(${o.split(r).map(a=>a.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&")).filter(a=>a.length>=2).join("|")})`,"img");return a=>(0,Qs.default)(a).replace(i,n).replace(/<\/mark>(\s+)<mark[^>]*>/img,"$1")}}function kp(e,{viewport$:t,main$:r}){let n=e.closest(".md-grid"),o=n.offsetTop-n.parentElement.offsetTop;return ne([r,t]).pipe(f(([{offset:i,height:a},{offset:{y:s}}])=>(a=a+Math.min(o,Math.max(0,s-i))-o,{height:a,locked:s>=i+o})),se((i,a)=>i.height===a.height&&i.locked===a.locked))}function ko(e,n){var o=n,{header$:t}=o,r=gr(o,["header$"]);let i=Y(".md-sidebar__scrollwrap",e),{y:a}=Et(i);return j(()=>{let s=new I,c=s.pipe(be(),ye(!0)),l=s.pipe(Ze(0,je));return l.pipe(fe(t)).subscribe({next([{height:u},{height:p}]){i.style.height=`${u-2*a}px`,e.style.top=`${p}px`},complete(){i.style.height="",e.style.top=""}}),l.pipe(Sr()).subscribe(()=>{for(let u of $(".md-nav__link--active[href]",e)){if(!u.clientHeight)continue;let p=u.closest(".md-sidebar__scrollwrap");if(typeof p!="undefined"){let d=u.offsetTop-p.offsetTop,{height:m}=Ae(p);p.scrollTo({top:d-m/2})}}}),me($("label[tabindex]",e)).pipe(ie(u=>b(u,"click").pipe(Ie(_e),f(()=>u),ee(c)))).subscribe(u=>{let p=Y(`[id="${u.htmlFor}"]`);Y(`[aria-labelledby="${u.id}"]`).setAttribute("aria-expanded",`${p.checked}`)}),X("content.tooltips")&&me($("abbr[title]",e)).pipe(ie(u=>Je(u,{viewport$})),ee(c)).subscribe(),kp(e,r).pipe(P(u=>s.next(u)),z(()=>s.complete()),f(u=>k({ref:e},u)))})}function tc(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return It(tt(`${r}/releases/latest`).pipe(de(()=>w),f(n=>({version:n.tag_name})),it({})),tt(r).pipe(de(()=>w),f(n=>({stars:n.stargazers_count,forks:n.forks_count})),it({}))).pipe(f(([n,o])=>k(k({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return tt(r).pipe(f(n=>({repositories:n.public_repos})),it({}))}}function rc(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return It(tt(`${r}/releases/permalink/latest`).pipe(de(()=>w),f(({tag_name:n})=>({version:n})),it({})),tt(r).pipe(de(()=>w),f(({star_count:n,forks_count:o})=>({stars:n,forks:o})),it({}))).pipe(f(([n,o])=>k(k({},n),o)))}function nc(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,n]=t;return tc(r,n)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,n]=t;return rc(r,n)}return w}var Ap;function Cp(e){return Ap||(Ap=j(()=>{let t=__md_get("__source",sessionStorage);if(t)return K(t);if(Te("consent").length){let n=__md_get("__consent");if(!(n&&n.github))return w}return nc(e.href).pipe(P(n=>__md_set("__source",n,sessionStorage)))}).pipe(de(()=>w),O(t=>Object.keys(t).length>0),f(t=>({facts:t})),ae(1)))}function oc(e){let t=Y(":scope > :last-child",e);return j(()=>{let r=new I;return r.subscribe(({facts:n})=>{t.appendChild(xs(n)),t.classList.add("md-source__repository--active")}),Cp(e).pipe(P(n=>r.next(n)),z(()=>r.complete()),f(n=>k({ref:e},n)))})}function Hp(e,{viewport$:t,header$:r}){return Re(document.body).pipe(g(()=>Ln(e,{header$:r,viewport$:t})),f(({offset:{y:n}})=>({hidden:n>=10})),he("hidden"))}function ic(e,t){return j(()=>{let r=new I;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(X("navigation.tabs.sticky")?K({hidden:!1}):Hp(e,t)).pipe(P(n=>r.next(n)),z(()=>r.complete()),f(n=>k({ref:e},n)))})}function $p(e,{viewport$:t,header$:r}){let n=new Map,o=$(".md-nav__link",e);for(let s of o){let c=decodeURIComponent(s.hash.substring(1)),l=we(`[id="${c}"]`);typeof l!="undefined"&&n.set(s,l)}let i=r.pipe(he("height"),f(({height:s})=>{let c=ht("main"),l=Y(":scope > :first-child",c);return s+.9*(l.offsetTop-c.offsetTop)}),xe());return Re(document.body).pipe(he("height"),g(s=>j(()=>{let c=[];return K([...n].reduce((l,[u,p])=>{for(;c.length&&n.get(c[c.length-1]).tagName>=p.tagName;)c.pop();let d=p.offsetTop;for(;!d&&p.parentElement;)p=p.parentElement,d=p.offsetTop;let m=p.offsetParent;for(;m;m=m.offsetParent)d+=m.offsetTop;return l.set([...c=[...c,u]].reverse(),d)},new Map))}).pipe(f(c=>new Map([...c].sort(([,l],[,u])=>l-u))),Qe(i),g(([c,l])=>t.pipe(Or(([u,p],{offset:{y:d},size:m})=>{let h=d+m.height>=Math.floor(s.height);for(;p.length;){let[,v]=p[0];if(v-l<d||h)u=[...u,p.shift()];else break}for(;u.length;){let[,v]=u[u.length-1];if(v-l>=d&&!h)p=[u.pop(),...p];else break}return[u,p]},[[],[...c]]),se((u,p)=>u[0]===p[0]&&u[1]===p[1])))))).pipe(f(([s,c])=>({prev:s.map(([l])=>l),next:c.map(([l])=>l)})),J({prev:[],next:[]}),Rt(2,1),f(([s,c])=>s.prev.length<c.prev.length?{prev:c.prev.slice(Math.max(0,s.prev.length-1),c.prev.length),next:[]}:{prev:c.prev.slice(-1),next:c.next.slice(0,c.next.length-s.next.length)}))}function ac(e,{viewport$:t,header$:r,main$:n,target$:o}){return j(()=>{let i=new I,a=i.pipe(be(),ye(!0));i.subscribe(({prev:c,next:l})=>{for(let[u]of l)u.classList.remove("md-nav__link--passed"),u.classList.remove("md-nav__link--active");for(let[u,[p]]of c.entries())p.classList.add("md-nav__link--passed"),p.classList.toggle("md-nav__link--active",u===c.length-1)});let s=we(".md-sidebar--secondary");if(typeof s!="undefined"&&b(document.body,"click").subscribe(c=>{let l=c.target;if(!s.contains(l)){let u=we(".md-nav__toggle",s);typeof u!="undefined"&&(u.checked=!1)}}),X("toc.follow")){let c=R(t.pipe(Ye(1),f(()=>{})),t.pipe(Ye(250),f(()=>"smooth")));i.pipe(O(({prev:l})=>l.length>0),Qe(n.pipe(Ie(_e))),fe(c)).subscribe(([[{prev:l}],u])=>{let[p]=l[l.length-1];if(p.offsetHeight){let d=ki(p);if(typeof d!="undefined"){let m=p.offsetTop-d.offsetTop,{height:h}=Ae(d);d.scrollTo({top:m-h/2,behavior:u})}}})}return X("navigation.tracking")&&t.pipe(ee(a),he("offset"),Ye(250),ke(1),ee(o.pipe(ke(1))),Ut({delay:250}),fe(i)).subscribe(([,{prev:c}])=>{let l=Ue(),u=c[c.length-1];if(u&&u.length){let[p]=u,{hash:d}=new URL(p.href);l.hash!==d&&(l.hash=d,history.replaceState({},"",`${l}`))}else l.hash="",history.replaceState({},"",`${l}`)}),$p(e,{viewport$:t,header$:r}).pipe(P(c=>i.next(c)),z(()=>i.complete()),f(c=>k({ref:e},c)))})}function Pp(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(f(({offset:{y:a}})=>a),Rt(2,1),f(([a,s])=>a>s&&s>0),se()),i=r.pipe(f(({active:a})=>a));return ne([i,o]).pipe(f(([a,s])=>!(a&&s)),se(),ee(n.pipe(ke(1))),ye(!0),Ut({delay:250}),f(a=>({hidden:a})))}function sc(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new I,a=i.pipe(be(),ye(!0));return i.subscribe({next({hidden:s}){e.hidden=s,s?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(ee(a),he("height")).subscribe(({height:s})=>{e.style.top=`${s+16}px`}),b(e,"click").subscribe(s=>{s.preventDefault(),window.scrollTo({top:0})}),Pp(e,{viewport$:t,main$:n,target$:o}).pipe(P(s=>i.next(s)),z(()=>i.complete()),f(s=>k({ref:e},s)))}function cc(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,t.port&&(e.port=t.port),e}function Ip(e,t){let r=new Map;for(let n of $("url",e)){let o=Y("loc",n),i=[cc(new URL(o.textContent),t)];r.set(`${i[0]}`,i);for(let a of $("[rel=alternate]",n)){let s=a.getAttribute("href");s!=null&&i.push(cc(new URL(s),t))}}return r}function dr(e){return ss(new URL("sitemap.xml",e)).pipe(f(t=>Ip(t,new URL(e))),de(()=>K(new Map)),xe())}function lc({document$:e}){let t=new Map;e.pipe(g(()=>$("link[rel=alternate]")),f(r=>new URL(r.href)),O(r=>!t.has(r.toString())),ie(r=>dr(r).pipe(f(n=>[r,n]),de(()=>w)))).subscribe(([r,n])=>{t.set(r.toString().replace(/\/$/,""),n)}),b(document.body,"click").pipe(O(r=>!r.metaKey&&!r.ctrlKey),g(r=>{if(r.target instanceof Element){let n=r.target.closest("a");if(n&&!n.target){let o=[...t].find(([p])=>n.href.startsWith(`${p}/`));if(typeof o=="undefined")return w;let[i,a]=o,s=Ue();if(s.href.startsWith(i))return w;let c=Ne(),l=s.href.replace(c.base,"");l=`${i}/${l}`;let u=a.has(l.split("#")[0])?new URL(l,c.base):new URL(i);return r.preventDefault(),K(u)}}return w})).subscribe(r=>dt(r,!0))}var Ao=_r(Lo());function Rp(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function uc({alert$:e}){Ao.default.isSupported()&&new N(t=>{new Ao.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||Rp(Y(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(P(t=>{t.trigger.focus()}),f(()=>Gt("clipboard.copied"))).subscribe(e)}function pc(e,t){if(!(e.target instanceof Element))return w;let r=e.target.closest("a");if(r===null)return w;if(r.target||e.metaKey||e.ctrlKey)return w;let n=new URL(r.href);return n.search=n.hash="",t.has(`${n}`)?(e.preventDefault(),K(r)):w}function fc(e){let t=new Map;for(let r of $(":scope > *",e.head))t.set(r.outerHTML,r);return t}function mc(e){for(let t of $("[href], [src]",e))for(let r of["href","src"]){let n=t.getAttribute(r);if(n&&!/^(?:[a-z]+:)?\/\//i.test(n)){t[r]=t[r];break}}return K(e)}function jp(e){for(let n of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...X("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let o=we(n),i=we(n,e);typeof o!="undefined"&&typeof i!="undefined"&&o.replaceWith(i)}let t=fc(document);for(let[n,o]of fc(e))t.has(n)?t.delete(n):document.head.appendChild(o);for(let n of t.values()){let o=n.getAttribute("name");o!=="theme-color"&&o!=="color-scheme"&&n.remove()}let r=ht("container");return ot($("script",r)).pipe(g(n=>{let o=e.createElement("script");if(n.src){for(let i of n.getAttributeNames())o.setAttribute(i,n.getAttribute(i));return n.replaceWith(o),new N(i=>{o.onload=()=>i.complete()})}else return o.textContent=n.textContent,n.replaceWith(o),w}),be(),ye(document))}function dc({sitemap$:e,location$:t,viewport$:r,progress$:n}){if(location.protocol==="file:")return Ge;K(document).subscribe(mc);let o=b(document.body,"click").pipe(Qe(e),g(([s,c])=>pc(s,c)),f(({href:s})=>new URL(s)),xe()),i=b(window,"popstate").pipe(f(Ue),xe());o.pipe(fe(r)).subscribe(([s,{offset:c}])=>{history.replaceState(c,""),history.pushState(null,"",s)}),R(o,i).subscribe(t);let a=t.pipe(J(Ue()),un(),O(([s,c])=>s.pathname!==c.pathname),f(([,s])=>s),g(s=>Sn(s,{progress$:n}).pipe(de(()=>(dt(s,!0),w)))),g(mc),g(jp),xe());return R(a.pipe(fe(t,(s,c)=>c)),a.pipe(g(()=>t),he("hash")),t.pipe(J(Ue()),un(),O(([s,c])=>s.pathname===c.pathname&&s.hash!==c.hash),f(([,s])=>s)),t.pipe(se((s,c)=>s.pathname===c.pathname&&s.hash===c.hash),g(()=>o),P(()=>history.back()))).subscribe(s=>{var c,l;history.state!==null||!s.hash?window.scrollTo(0,(l=(c=history.state)==null?void 0:c.y)!=null?l:0):(history.scrollRestoration="auto",os(s.hash),history.scrollRestoration="manual")}),t.subscribe(()=>{history.scrollRestoration="manual"}),b(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),r.pipe(he("offset"),Ye(100)).subscribe(({offset:s})=>{history.replaceState(s,"")}),X("navigation.instant.prefetch")&&R(b(document.body,"mousemove"),b(document.body,"focusin")).pipe(Qe(e),g(([s,c])=>pc(s,c)),Ye(25),Yn(({href:s})=>s),ln(s=>{let c=document.createElement("link");return c.rel="prefetch",c.href=s.toString(),document.head.appendChild(c),b(c,"load").pipe(f(()=>c),Me(1))})).subscribe(s=>s.remove()),a}function hc(e){var u;let{selectedVersionSitemap:t,selectedVersionBaseURL:r,currentLocation:n,currentBaseURL:o}=e,i=(u=Co(o))==null?void 0:u.pathname;if(i===void 0)return;let a=Fp(n.pathname,i);if(a===void 0)return;let s=Np(t.keys());if(!t.has(s))return;let c=Co(a,s);if(!c||!t.has(c.href))return;let l=Co(a,r);if(l)return l.hash=n.hash,l.search=n.search,l}function Co(e,t){try{return new URL(e,t)}catch(r){return}}function Fp(e,t){if(e.startsWith(t))return e.slice(t.length)}function Up(e,t){let r=Math.min(e.length,t.length),n;for(n=0;n<r&&e[n]===t[n];++n);return n}function Np(e){let t;for(let r of e)t===void 0?t=r:t=t.slice(0,Up(t,r));return t!=null?t:""}function vc({document$:e}){let t=Ne(),r=tt(new URL("../versions.json",t.base)).pipe(de(()=>w)),n=r.pipe(f(o=>{let[,i]=t.base.match(/([^/]+)\/?$/);return o.find(({version:a,aliases:s})=>a===i||s.includes(i))||o[0]}));r.pipe(f(o=>new Map(o.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),g(o=>b(document.body,"click").pipe(O(i=>!i.metaKey&&!i.ctrlKey),fe(n),g(([i,a])=>{if(i.target instanceof Element){let s=i.target.closest("a");if(s&&!s.target&&o.has(s.href)){let c=s.href;return!i.target.closest(".md-version")&&o.get(c)===a?w:(i.preventDefault(),K(new URL(c)))}}return w}),g(i=>dr(i).pipe(f(a=>{var s;return(s=hc({selectedVersionSitemap:a,selectedVersionBaseURL:i,currentLocation:Ue(),currentBaseURL:t.base}))!=null?s:i})))))).subscribe(o=>dt(o,!0)),ne([r,n]).subscribe(([o,i])=>{Y(".md-header__topic").appendChild(Es(o,i))}),e.pipe(g(()=>n)).subscribe(o=>{var s;let i=new URL(t.base),a=__md_get("__outdated",sessionStorage,i);if(a===null){a=!0;let c=((s=t.version)==null?void 0:s.default)||"latest";Array.isArray(c)||(c=[c]);e:for(let l of c)for(let u of o.aliases.concat(o.version))if(new RegExp(l,"i").test(u)){a=!1;break e}__md_set("__outdated",a,sessionStorage,i)}if(a)for(let c of Te("outdated"))c.hidden=!1})}function bc({document$:e,viewport$:t}){e.pipe(g(()=>$(".md-ellipsis")),ie(r=>Tt(r).pipe(ee(e.pipe(ke(1))),O(n=>n),f(()=>r),Me(1))),O(r=>r.offsetWidth<r.scrollWidth),ie(r=>{let n=r.innerText,o=r.closest("a")||r;return o.title=n,X("content.tooltips")?Je(o,{viewport$:t}).pipe(ee(e.pipe(ke(1))),z(()=>o.removeAttribute("title"))):w})).subscribe(),X("content.tooltips")&&e.pipe(g(()=>$(".md-status")),ie(r=>Je(r,{viewport$:t}))).subscribe()}function gc({document$:e,tablet$:t}){e.pipe(g(()=>$(".md-toggle--indeterminate")),P(r=>{r.indeterminate=!0,r.checked=!1}),ie(r=>b(r,"change").pipe(Zn(()=>r.classList.contains("md-toggle--indeterminate")),f(()=>r))),fe(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function Dp(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function _c({document$:e}){e.pipe(g(()=>$("[data-md-scrollfix]")),P(t=>t.removeAttribute("data-md-scrollfix")),O(Dp),ie(t=>b(t,"touchstart").pipe(f(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n=="string"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));function Wp(){return location.protocol==="file:"?wt(`${new URL("search.js",An.base)}`).pipe(f(()=>__index),de(()=>Ge),ae(1)):tt(new URL("search.json",An.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var vt=Ti(),Ur=rs(),hr=is(Ur),xc=ts(),Ke=fs(),Ho=Ir("(min-width: 60em)"),wc=Ir("(min-width: 76.25em)"),Ec=as(),An=Ne(),Tc=we(".md-search")?Wp():Ge,$o=new I;uc({alert$:$o});lc({document$:vt});var Po=new I,Sc=dr(An.base);X("navigation.instant")&&dc({sitemap$:Sc,location$:Ur,viewport$:Ke,progress$:Po}).subscribe(vt);var yc;((yc=An.version)==null?void 0:yc.provider)==="mike"&&vc({document$:vt});R(Ur,hr).pipe(jt(125)).subscribe(()=>{wo("drawer",!1),wo("search",!1)});xc.pipe(O(({mode:e,meta:t})=>e==="global"&&!t)).subscribe(e=>{switch(e.type){case",":case"p":let t=document.querySelector("link[rel=prev]");t instanceof HTMLLinkElement&&dt(t);break;case".":case"n":let r=document.querySelector("link[rel=next]");r instanceof HTMLLinkElement&&dt(r);break;case"/":let n=document.querySelector("[data-md-component=search] button");n instanceof HTMLButtonElement&&n.click();break;case"Enter":let o=xt();o instanceof HTMLLabelElement&&o.click()}});bc({viewport$:Ke,document$:vt});gc({document$:vt,tablet$:Ho});_c({document$:vt});var kt=qs(ht("header"),{viewport$:Ke}),Fr=vt.pipe(f(()=>ht("main")),g(e=>Gs(e,{viewport$:Ke,header$:kt})),ae(1)),Vp=R(...Te("consent").map(e=>ds(e,{target$:hr})),...Te("dialog").map(e=>zs(e,{alert$:$o})),...Te("palette").map(e=>Ys(e)),...Te("progress").map(e=>Js(e,{progress$:Po})),...Te("search").map(e=>Zs(e,{index$:Tc})),...Te("source").map(e=>oc(e))),zp=j(()=>R(...Te("announce").map(e=>ms(e)),...Te("content").map(e=>Vs(e,{sitemap$:Sc,viewport$:Ke,target$:hr,print$:Ec})),...Te("content").map(e=>X("search.highlight")?ec(e,{index$:Tc,location$:Ur}):w),...Te("header").map(e=>Ks(e,{viewport$:Ke,header$:kt,main$:Fr})),...Te("header-title").map(e=>Bs(e,{viewport$:Ke,header$:kt})),...Te("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?_o(wc,()=>ko(e,{viewport$:Ke,header$:kt,main$:Fr})):_o(Ho,()=>ko(e,{viewport$:Ke,header$:kt,main$:Fr}))),...Te("tabs").map(e=>ic(e,{viewport$:Ke,header$:kt})),...Te("toc").map(e=>ac(e,{viewport$:Ke,header$:kt,main$:Fr,target$:hr})),...Te("top").map(e=>sc(e,{viewport$:Ke,header$:kt,main$:Fr,target$:hr})))),Oc=vt.pipe(g(()=>zp),Ft(Vp),ae(1));Oc.subscribe();window.document$=vt;window.location$=Ur;window.target$=hr;window.keyboard$=xc;window.viewport$=Ke;window.tablet$=Ho;window.screen$=wc;window.print$=Ec;window.alert$=$o;window.progress$=Po;window.component$=Oc;})(); diff --git a/site/assets/stylesheets/classic/main.82a87433.min.css b/site/assets/stylesheets/classic/main.6cf5c66f.min.css similarity index 55% rename from site/assets/stylesheets/classic/main.82a87433.min.css rename to site/assets/stylesheets/classic/main.6cf5c66f.min.css index 6011a1f9b..f94c72f0f 100644 --- a/site/assets/stylesheets/classic/main.82a87433.min.css +++ b/site/assets/stylesheets/classic/main.6cf5c66f.min.css @@ -1 +1 @@ -@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-bg-color--light:#f5f5f5b3;--md-code-bg-color--lighter:#f5f5f54d;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff73;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059;--color-foreground:0 0 0;--color-background:255 255 255;--color-background-subtle:240 240 240;--color-backdrop:255 255 255}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}.md-icon svg.lucide{fill:#0000;stroke:currentcolor}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m18 21-4-4h3V7h-3l4-4 4 4h-3v10h3M2 19v-2h10v2M2 13v-2h7v2M2 7V5h4v2z"/></svg>');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 17h3l-4 4-4-4h3V3h2M2 17h10v2H2M6 5v2H2V5m0 6h7v2H2z"/></svg>');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 7h3l-4-4-4 4h3v14h2M2 17h10v2H2M6 5v2H2V5m0 6h7v2H2z"/></svg>')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6;overflow-wrap:break-word}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset h5 code{text-transform:none}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset a code{color:var(--md-typeset-a-color)}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none;transition:background-color 125ms}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;transition:color 125ms,background-color 125ms;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{cursor:help;text-decoration:none}.md-typeset [data-preview],.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light)}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol ol ol ol,.md-typeset ul ol ol ol{list-style-type:upper-alpha}.md-typeset ol ol ol ol ol,.md-typeset ul ol ol ol ol{list-style-type:upper-roman}.md-typeset ol[type],.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:fit-content}.md-typeset figure img{display:block;margin:0 auto}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-typeset .md-author{border-radius:100%;display:block;flex-shrink:0;height:1.6rem;overflow:hidden;position:relative;transition:color 125ms,transform 125ms;width:1.6rem}.md-typeset .md-author img{display:block}.md-typeset .md-author--more{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.md-typeset .md-author--long{height:2.4rem;width:2.4rem}.md-typeset a.md-author{transform:scale(1)}.md-typeset a.md-author img{border-radius:100%;filter:grayscale(100%) opacity(75%);transition:filter 125ms}.md-typeset a.md-author:focus,.md-typeset a.md-author:hover{transform:scale(1.1);z-index:1}.md-typeset a.md-author:focus img,.md-typeset a.md-author:hover img{filter:grayscale(0)}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.no-js .md-banner__button{display:none}.md-banner__button:hover{opacity:.7}html{scrollbar-gutter:stable;font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.984375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z"/></svg>')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}:root{--md-code-select-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 19h-4v2h4c1.1 0 2-.9 2-2v-4h-2m0-12h-4v2h4v4h2V5c0-1.1-.9-2-2-2M5 5h4V3H5c-1.1 0-2 .9-2 2v4h2m0 6H3v4c0 1.1.9 2 2 2h4v-2H5zm2-4h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2zM7 7h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2zm-8 8h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2z"/></svg>');--md-code-copy-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z"/></svg>')}.md-typeset .md-code__content{display:grid}.md-code__nav{background-color:var(--md-code-bg-color--lighter);border-radius:.1rem;display:flex;gap:.2rem;padding:.2rem;position:absolute;right:.25em;top:.25em;transition:background-color .25s;z-index:1}:hover>.md-code__nav{background-color:var(--md-code-bg-color--light)}.md-code__button{color:var(--md-default-fg-color--lightest);cursor:pointer;display:block;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em}:hover>*>.md-code__button{color:var(--md-default-fg-color--light)}.md-code__button.focus-visible,.md-code__button:hover{color:var(--md-accent-fg-color)}.md-code__button--active{color:var(--md-default-fg-color)!important}.md-code__button:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-code__button[data-md-type=select]:after{-webkit-mask-image:var(--md-code-select-icon);mask-image:var(--md-code-select-icon)}.md-code__button[data-md-type=copy]:after{-webkit-mask-image:var(--md-code-copy-icon);mask-image:var(--md-code-copy-icon)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}.md-content__button svg.lucide{fill:#0000;stroke:currentcolor}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{display:flex;flex-wrap:wrap;place-content:baseline center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}@media print{.md-feedback{display:none}}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;opacity:.7}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-social__link svg.lucide{fill:#0000;stroke:currentcolor}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:focus,.md-typeset .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-left:1rem;margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem;margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;white-space:nowrap}.md-header__option>input{bottom:0}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-meta{color:var(--md-default-fg-color--light);font-size:.7rem;line-height:1.3}.md-meta__list{display:inline-flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.md-meta__item:not(:last-child):after{content:"·";margin-left:.2rem;margin-right:.2rem}.md-meta__link{color:var(--md-typeset-a-color)}.md-meta__link:focus,.md-meta__link:hover{color:var(--md-accent-fg-color)}.md-draft{background-color:#ff1744;border-radius:.125em;color:#fff;display:inline-block;font-weight:700;padding-left:.5714285714em;padding-right:.5714285714em}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 9h14V7H3zm0 4h14v-2H3zm0 4h14v-2H3zm16 0h2v-2h-2zm0-10v2h2V7zm0 6h2v-2h-2z"/></svg>')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{color:var(--md-default-fg-color--light);display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__link{align-items:flex-start;display:flex;gap:.4rem;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.md-nav__link--passed,.md-nav__link--passed code{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active,.md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.md-nav__link .md-ellipsis{position:relative}.md-nav__link .md-ellipsis code{word-break:normal}[dir=ltr] .md-nav__link .md-icon:last-child{margin-left:auto}[dir=rtl] .md-nav__link .md-icon:last-child{margin-right:auto}.md-nav__link .md-typeset{font-size:.7rem;line-height:1.3}.md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em;position:relative;width:1.3em}.md-nav__link svg.lucide{fill:#0000;stroke:currentcolor}.md-nav__link[for]:focus,.md-nav__link[for]:hover,.md-nav__link[href]:focus,.md-nav__link[href]:hover{color:var(--md-accent-fg-color);cursor:pointer}.md-nav__link[for]:focus code,.md-nav__link[for]:hover code,.md-nav__link[href]:focus code,.md-nav__link[href]:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__container>.md-nav__link{margin-top:0}.md-nav__container>.md-nav__link:first-child{flex-grow:1;min-width:0}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.234375em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;overscroll-behavior-y:contain;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest)}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:focus,.md-nav--primary .md-nav__item--active>.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link svg{margin-top:.1em}.md-nav--primary .md-nav__link>.md-nav__link{padding:0}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{backface-visibility:hidden}}@media screen and (max-width:59.984375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav{margin-bottom:-.4rem}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--secondary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--secondary .md-nav__list{padding-right:.6rem}.md-nav--secondary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--secondary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--secondary .md-nav__item>.md-nav__link{margin-left:.4rem}}@media screen and (min-width:76.25em){.md-nav{margin-bottom:-.4rem;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--primary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--primary .md-nav__list{padding-right:.6rem}.md-nav--primary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--primary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--primary .md-nav__item>.md-nav__link{margin-left:.4rem}.md-nav__toggle~.md-nav{display:grid;grid-template-rows:minmax(.4rem,0fr);opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.md-nav__toggle.md-toggle--indeterminate~.md-nav,.md-nav__toggle:checked~.md-nav{grid-template-rows:minmax(.4rem,1fr);opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.md-nav__toggle.md-toggle--indeterminate~.md-nav{transition:none}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700}.md-nav__item--section>.md-nav__link[for]{color:var(--md-default-fg-color--light)}.md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav__item--section>.md-nav__link .md-icon,.md-nav__item--section>.md-nav__link>[for]{display:none}[dir=ltr] .md-nav__item--section>.md-nav{margin-left:-.6rem}[dir=rtl] .md-nav__item--section>.md-nav{margin-right:-.6rem}.md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s;width:.9rem}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;border-radius:100%;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;vertical-align:-.1rem;width:100%}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-toggle--indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);margin-top:0;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}[dir=ltr] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-left:-.6rem}[dir=rtl] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-right:-.6rem}.md-nav--lifted>.md-nav__list>.md-nav__item>[for]{color:var(--md-default-fg-color--light)}.md-nav--lifted .md-nav[data-md-level="1"]{grid-template-rows:minmax(.4rem,1fr);opacity:1;visibility:visible}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{overflow:visible;padding-bottom:0}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}.md-pagination{font-size:.8rem;font-weight:700;gap:.4rem}.md-pagination,.md-pagination>*{align-items:center;display:flex;justify-content:center}.md-pagination>*{border-radius:.2rem;height:1.8rem;min-width:1.8rem;text-align:center}.md-pagination__current{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light)}.md-pagination__link{transition:color 125ms,background-color 125ms}.md-pagination__link:focus,.md-pagination__link:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-pagination__link:focus svg,.md-pagination__link:hover svg{color:var(--md-accent-fg-color)}.md-pagination__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-pagination__link svg{fill:currentcolor;color:var(--md-default-fg-color--lighter);display:block;max-height:100%;width:1.2rem}:root{--md-path-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>')}.md-path{font-size:.7rem;margin:0 .8rem;overflow:auto;padding-top:1.2rem}.md-path:not([hidden]){display:block}@media screen and (min-width:76.25em){.md-path{margin:0 1.2rem}}.md-path__list{align-items:center;display:flex;gap:.2rem;list-style:none;margin:0;padding:0}.md-path__item:not(:first-child){display:inline-flex;gap:.2rem;white-space:nowrap}.md-path__item:not(:first-child):before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline;height:.8rem;-webkit-mask-image:var(--md-path-icon);mask-image:var(--md-path-icon);width:.8rem}.md-path__link{align-items:center;color:var(--md-default-fg-color--light);display:flex}.md-path__link:focus,.md-path__link:hover{color:var(--md-accent-fg-color)}:root{--md-post-pin-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2z"/></svg>')}.md-post__back{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin-bottom:1.2rem;padding-bottom:1.2rem}@media screen and (max-width:76.234375em){.md-post__back{display:none}}[dir=rtl] .md-post__back svg{transform:scaleX(-1)}.md-post__authors{display:flex;flex-direction:column;gap:.6rem;margin:0 .6rem 1.2rem}.md-post .md-post__meta a{transition:color 125ms}.md-post .md-post__meta a:focus,.md-post .md-post__meta a:hover{color:var(--md-accent-fg-color)}.md-post__title{color:var(--md-default-fg-color--light);font-weight:700}.md-post--excerpt{margin-bottom:3.2rem}.md-post--excerpt .md-post__header{align-items:center;display:flex;gap:.6rem;min-height:1.6rem}.md-post--excerpt .md-post__authors{align-items:center;display:inline-flex;flex-direction:row;gap:.2rem;margin:0;min-height:2.4rem}[dir=ltr] .md-post--excerpt .md-post__meta .md-meta__list{margin-right:.4rem}[dir=rtl] .md-post--excerpt .md-post__meta .md-meta__list{margin-left:.4rem}.md-post--excerpt .md-post__content>:first-child{--md-scroll-margin:6rem;margin-top:0}.md-post>.md-nav--secondary{margin:1em 0}.md-pin{background:var(--md-default-fg-color--lightest);border-radius:1rem;margin-top:-.05rem;padding:.2rem}.md-pin:after{background-color:currentcolor;content:"";display:block;height:.6rem;margin:0 auto;-webkit-mask-image:var(--md-post-pin-icon);mask-image:var(--md-post-pin-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.6rem}.md-profile{align-items:center;display:flex;font-size:.7rem;gap:.6rem;line-height:1.4;width:100%}.md-profile__description{flex-grow:1}.md-content--post{display:flex}@media screen and (max-width:76.234375em){.md-content--post{flex-flow:column-reverse}}.md-content--post>.md-content__inner{flex-grow:1;min-width:0}@media screen and (min-width:76.25em){[dir=ltr] .md-content--post>.md-content__inner{margin-left:1.2rem}[dir=rtl] .md-content--post>.md-content__inner{margin-right:1.2rem}}@media screen and (max-width:76.234375em){.md-sidebar.md-sidebar--post{padding:0;position:static;width:100%}.md-sidebar.md-sidebar--post .md-sidebar__scrollwrap{overflow:visible}.md-sidebar.md-sidebar--post .md-sidebar__inner{padding:0}.md-sidebar.md-sidebar--post .md-post__meta{margin-left:.6rem;margin-right:.6rem}.md-sidebar.md-sidebar--post .md-nav__item{border:none;display:inline}.md-sidebar.md-sidebar--post .md-nav__list{display:inline-flex;flex-wrap:wrap;gap:.6rem;padding-bottom:.6rem;padding-top:.6rem}.md-sidebar.md-sidebar--post .md-nav__link{padding:0}.md-sidebar.md-sidebar--post .md-nav{height:auto;margin-bottom:0;position:static}}:root{--md-progress-value:0;--md-progress-delay:400ms}.md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}:root{--md-search-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}@media screen and (max-width:59.984375em){.md-search{display:none}}.no-js .md-search{display:none}[dir=ltr] .md-search__button{padding-left:1.9rem;padding-right:2.2rem}[dir=rtl] .md-search__button{padding-left:2.2rem;padding-right:1.9rem}.md-search__button{background:var(--md-primary-fg-color);color:var(--md-primary-bg-color);cursor:pointer;font-size:.7rem;position:relative;text-align:left}@media screen and (min-width:45em){.md-search__button{background-color:#00000042;border-radius:.2rem;height:1.6rem;transition:background-color .4s,color .4s;width:8.9rem}.md-search__button:focus,.md-search__button:hover{background-color:#ffffff1f;color:var(--md-primary-bg-color)}}[dir=ltr] .md-search__button:before{left:0}[dir=rtl] .md-search__button:before{right:0}.md-search__button:before{background-color:var(--md-primary-bg-color);content:"";height:1rem;margin-left:.5rem;-webkit-mask-image:var(--md-search-icon);mask-image:var(--md-search-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.3rem;width:1rem}.md-search__button:after{background:#00000042;border-radius:.1rem;content:"Ctrl+K";display:block;font-size:.6rem;padding:.1rem .2rem;position:absolute;right:.6rem;top:.35rem}[data-platform^=Mac] .md-search__button:after{content:"⌘K"}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}@media screen and (max-width:59.984375em){.md-select__inner{left:100%;transform:translate3d(-100%,.3rem,0)}}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:min(75vh,28rem);opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}@media screen and (max-width:59.984375em){.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{transform:translate3d(-100%,0,0)}}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";filter:drop-shadow(0 -1px 0 var(--md-default-fg-color--lightest));height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}@media screen and (max-width:59.984375em){.md-select__inner:after{left:auto;right:1rem}}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;overscroll-behavior-y:contain;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000}@media screen and (min-width:60em){.md-sidebar__scrollwrap{scrollbar-gutter:stable;scrollbar-width:thin}}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.234375em){.md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0M5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0m6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5m-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0"/></svg>');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.5 2.5 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.25.25 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"/></svg>');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25m0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41z"/></svg>');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.75 1.75 0 0 1 1 7.775m1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2"/></svg>')}.md-source{backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-source-file{margin:1em 0}[dir=ltr] .md-source-file__fact{margin-right:.6rem}[dir=rtl] .md-source-file__fact{margin-left:.6rem}.md-source-file__fact{align-items:center;color:var(--md-default-fg-color--light);display:inline-flex;font-size:.68rem;gap:.3rem}.md-source-file__fact .md-icon{flex-shrink:0;margin-bottom:.05rem}[dir=ltr] .md-source-file__fact .md-author{float:left}[dir=rtl] .md-source-file__fact .md-author{float:right}.md-source-file__fact .md-author{margin-right:.2rem}.md-source-file__fact svg{width:.9rem}:root{--md-status:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 9h2V7h-2m1 13c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m-1 15h2v-6h-2z"/></svg>');--md-status--new:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m23 12-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68zm-10 5h-2v-2h2zm0-4h-2V7h2z"/></svg>');--md-status--deprecated:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zm0 5h2v9H9zm4 0h2v9h-2z"/></svg>');--md-status--encrypted:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 1 3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5zm0 6c1.4 0 2.8 1.1 2.8 2.5V11c.6 0 1.2.6 1.2 1.3v3.5c0 .6-.6 1.2-1.3 1.2H9.2c-.6 0-1.2-.6-1.2-1.3v-3.5c0-.6.6-1.2 1.2-1.2V9.5C9.2 8.1 10.6 7 12 7m0 1.2c-.8 0-1.5.5-1.5 1.3V11h3V9.5c0-.8-.7-1.3-1.5-1.3"/></svg>')}.md-status:after{background-color:var(--md-default-fg-color--light);content:"";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.md-status:hover:after{background-color:currentcolor}.md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.md-status--encrypted:after{-webkit-mask-image:var(--md-status--encrypted);mask-image:var(--md-status--encrypted)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.234375em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.md-tabs__link{backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}[dir=ltr] .md-tabs__link svg{margin-right:.4rem}[dir=rtl] .md-tabs__link svg{margin-left:.4rem}.md-tabs__link svg{fill:currentcolor;height:1.3em}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m5.41 21 .71-4h-4l.35-2h4l1.06-6h-4l.35-2h4l.71-4h2l-.71 4h6l.71-4h2l-.71 4h4l-.35 2h-4l-1.06 6h4l-.35 2h-4l-.71 4h-2l.71-4h-6l-.71 4zM9.53 9l-1.06 6h6l1.06-6z"/></svg>')}.md-typeset .md-tags:not([hidden]){display:inline-flex;flex-wrap:wrap;gap:.5em;margin-bottom:.75em;margin-top:-.125em}.md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-shadow{opacity:.5}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}:root{--md-annotation-bg-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>');--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 13h-4v4h-2v-4H7v-2h4V7h2v4h4m-5-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>')}.md-tooltip{backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.md-tooltip--inline{font-weight:700;-webkit-user-select:none;user-select:none;width:auto}.md-tooltip--inline:not(.md-tooltip--active){transform:translateY(.2rem) scale(.9)}.md-tooltip--inline .md-tooltip__inner{font-size:.5rem;padding:.2rem .4rem}[hidden]+.md-tooltip--inline{display:none}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-style:normal;font-weight:400;outline:none;text-align:initial;vertical-align:text-bottom;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.md-annotation:not([hidden]){display:inline-block;line-height:1.25}.md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.md-annotation__index{width:2.2ch}[data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.md-annotation__index:after,.md-annotation__index:before{content:"";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.md-typeset .md-annotation-list{counter-reset:annotation;list-style:none!important}.md-typeset .md-annotation-list li{position:relative}[dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}[dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(annotation);counter-increment:annotation;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}:root{--md-tooltip-width:20rem;--md-tooltip-tail:0.3rem}.md-tooltip2{backface-visibility:hidden;color:var(--md-default-fg-color);font-family:var(--md-text-font-family);opacity:0;pointer-events:none;position:absolute;top:calc(var(--md-tooltip-host-y) + var(--md-tooltip-y));transform:translateY(-.4rem);transform-origin:calc(var(--md-tooltip-host-x) + var(--md-tooltip-x)) 0;transition:transform 0ms .25s,opacity .25s,z-index .25s;width:100%;z-index:0}.md-tooltip2:before{border-left:var(--md-tooltip-tail) solid #0000;border-right:var(--md-tooltip-tail) solid #0000;content:"";display:block;left:clamp(1.5 * .8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-tail),100vw - 2 * var(--md-tooltip-tail) - 1.5 * .8rem);position:absolute;z-index:1}.md-tooltip2--top:before{border-top:var(--md-tooltip-tail) solid var(--md-default-bg-color);bottom:calc(var(--md-tooltip-tail)*-1 + .025rem);filter:drop-shadow(0 1px 0 hsla(0,0%,0%,.05))}.md-tooltip2--bottom:before{border-bottom:var(--md-tooltip-tail) solid var(--md-default-bg-color);filter:drop-shadow(0 -1px 0 hsla(0,0%,0%,.05));top:calc(var(--md-tooltip-tail)*-1 + .025rem)}.md-tooltip2[role=dialog]:after{content:"";display:block;height:.8rem;left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);pointer-events:auto;position:absolute;width:var(--md-tooltip-width);z-index:1}.md-tooltip2[role=dialog].md-tooltip2--top:after{top:100%}.md-tooltip2[role=dialog].md-tooltip2--bottom:after{bottom:100%}.md-tooltip2--active{opacity:1;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.5,1),opacity .25s,z-index 0ms;z-index:4}.md-tooltip2__inner{scrollbar-gutter:stable;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);max-height:40vh;max-width:calc(100vw - 1.6rem);position:relative;scrollbar-width:thin}.md-tooltip2__inner::-webkit-scrollbar{height:.2rem;width:.2rem}.md-tooltip2__inner::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-tooltip2__inner::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}[role=dialog]>.md-tooltip2__inner{font-size:.64rem;overflow:auto;padding:0 .8rem;pointer-events:auto;width:var(--md-tooltip-width)}[role=dialog]>.md-tooltip2__inner:after,[role=dialog]>.md-tooltip2__inner:before{content:"";display:block;height:.8rem;position:sticky;width:100%;z-index:10}[role=dialog]>.md-tooltip2__inner:before{background:linear-gradient(var(--md-default-bg-color),#0000 75%);top:0}[role=dialog]>.md-tooltip2__inner:after{background:linear-gradient(#0000,var(--md-default-bg-color) 75%);bottom:0}[role=tooltip]>.md-tooltip2__inner{font-size:.5rem;font-weight:700;left:clamp(.8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-width)/2,100vw - var(--md-tooltip-width) - .8rem);max-width:min(100vw - 2 * .8rem,400px);padding:.2rem .4rem;-webkit-user-select:none;user-select:none;width:fit-content}.md-tooltip2__inner.md-typeset>:first-child{margin-top:0}.md-tooltip2__inner.md-typeset>:last-child{margin-bottom:0}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}.md-top.lucide{fill:#0000;stroke:currentcolor}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">\3c !--! Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192h-256c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 7 34.8l128 128z"/></svg>')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__alias{margin-left:.3rem;opacity:.7}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}html.glightbox-open{height:100%;overflow:initial}html .gslide .gslide-description{background:var(--md-default-bg-color);-webkit-user-select:text;user-select:text}html .gslide .gslide-title{color:var(--md-default-fg-color);font-size:.8rem;margin-bottom:.4rem;margin-top:0}html .gslide .gslide-desc{color:var(--md-default-fg-color--light);font-size:.7rem}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m3.1 5.07c.14 0 .28.05.4.16l1.27 1.27c.23.22.23.57 0 .78l-1 1-2.05-2.05 1-1c.1-.11.24-.16.38-.16m-1.97 1.74 2.06 2.06-6.06 6.06H7.07v-2.06z"/></svg>');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 9H7V7h10m0 6H7v-2h10m-3 6H7v-2h7M12 3a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m7 0h-4.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2"/></svg>');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.66 11.2c-.23-.3-.51-.56-.77-.82-.67-.6-1.43-1.03-2.07-1.66C13.33 7.26 13 4.85 13.95 3c-.95.23-1.78.75-2.49 1.32-2.59 2.08-3.61 5.75-2.39 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.23.1-.47.04-.66-.12a.6.6 0 0 1-.14-.17c-1.13-1.43-1.31-3.48-.55-5.12C5.78 10 4.87 12.3 5 14.47c.06.5.12 1 .29 1.5.14.6.41 1.2.71 1.73 1.08 1.73 2.95 2.97 4.96 3.22 2.14.27 4.43-.12 6.07-1.6 1.83-1.66 2.47-4.32 1.53-6.6l-.13-.26c-.21-.46-.77-1.26-.77-1.26m-3.16 6.3c-.28.24-.74.5-1.1.6-1.12.4-2.24-.16-2.9-.82 1.19-.28 1.9-1.16 2.11-2.05.17-.8-.15-1.46-.28-2.23-.12-.74-.1-1.37.17-2.06.19.38.39.76.63 1.06.77 1 1.98 1.44 2.24 2.8.04.14.06.28.06.43.03.82-.33 1.72-.93 2.27"/></svg>');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7 9 19l-5.5-5.5 1.41-1.41L9 16.17 19.59 5.59z"/></svg>');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m15.07 11.25-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 0 0-2-2 2 2 0 0 0-2 2H8a4 4 0 0 1 4-4 4 4 0 0 1 4 4 3.2 3.2 0 0 1-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10c0-5.53-4.5-10-10-10"/></svg>');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2z"/></svg>');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m11.5 20 4.86-9.73H13V4l-5 9.73h3.5zM12 2c2.75 0 5.1 1 7.05 2.95S22 9.25 22 12s-1 5.1-2.95 7.05S14.75 22 12 22s-5.1-1-7.05-2.95S2 14.75 2 12s1-5.1 2.95-7.05S9.25 2 12 2"/></svg>');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 13h2v1h-2zm10-8v6c0 5.5-3.8 10.7-9 12-5.2-1.3-9-6.5-9-12V5l9-4zm-4 5h-2.2c-.2-.6-.6-1.1-1.1-1.5l1.2-1.2-.7-.7L12.8 8H12c-.2 0-.5 0-.7.1L9.9 6.6l-.8.8 1.2 1.2c-.5.3-.9.8-1.1 1.4H7v1h2v1H7v1h2v1H7v1h2.2c.4 1.2 1.5 2 2.8 2s2.4-.8 2.8-2H17v-1h-2v-1h2v-1h-2v-1h2zm-6 2h2v-1h-2z"/></svg>');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 2v2h1v14a4 4 0 0 0 4 4 4 4 0 0 0 4-4V4h1V2zm4 14c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m2-4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m1-5h-4V4h4z"/></svg>');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14 17h3l2-4V7h-6v6h3M6 17h3l2-4V7H5v6h3z"/></svg>')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.075rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid;transition:box-shadow 125ms}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition:focus-within,.md-typeset details:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset .admonition.note,.md-typeset details.note{border-color:#448aff}.md-typeset .admonition.note:focus-within,.md-typeset details.note:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .note>.admonition-title,.md-typeset .note>summary{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{border-color:#00b0ff}.md-typeset .admonition.abstract:focus-within,.md-typeset details.abstract:focus-within{box-shadow:0 0 0 .2rem #00b0ff1a}.md-typeset .abstract>.admonition-title,.md-typeset .abstract>summary{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{border-color:#00b8d4}.md-typeset .admonition.info:focus-within,.md-typeset details.info:focus-within{box-shadow:0 0 0 .2rem #00b8d41a}.md-typeset .info>.admonition-title,.md-typeset .info>summary{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{border-color:#00bfa5}.md-typeset .admonition.tip:focus-within,.md-typeset details.tip:focus-within{box-shadow:0 0 0 .2rem #00bfa51a}.md-typeset .tip>.admonition-title,.md-typeset .tip>summary{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{border-color:#00c853}.md-typeset .admonition.success:focus-within,.md-typeset details.success:focus-within{box-shadow:0 0 0 .2rem #00c8531a}.md-typeset .success>.admonition-title,.md-typeset .success>summary{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{border-color:#64dd17}.md-typeset .admonition.question:focus-within,.md-typeset details.question:focus-within{box-shadow:0 0 0 .2rem #64dd171a}.md-typeset .question>.admonition-title,.md-typeset .question>summary{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{border-color:#ff9100}.md-typeset .admonition.warning:focus-within,.md-typeset details.warning:focus-within{box-shadow:0 0 0 .2rem #ff91001a}.md-typeset .warning>.admonition-title,.md-typeset .warning>summary{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{border-color:#ff5252}.md-typeset .admonition.failure:focus-within,.md-typeset details.failure:focus-within{box-shadow:0 0 0 .2rem #ff52521a}.md-typeset .failure>.admonition-title,.md-typeset .failure>summary{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{border-color:#ff1744}.md-typeset .admonition.danger:focus-within,.md-typeset details.danger:focus-within{box-shadow:0 0 0 .2rem #ff17441a}.md-typeset .danger>.admonition-title,.md-typeset .danger>summary{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{border-color:#f50057}.md-typeset .admonition.bug:focus-within,.md-typeset details.bug:focus-within{box-shadow:0 0 0 .2rem #f500571a}.md-typeset .bug>.admonition-title,.md-typeset .bug>summary{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{border-color:#7c4dff}.md-typeset .admonition.example:focus-within,.md-typeset details.example:focus-within{box-shadow:0 0 0 .2rem #7c4dff1a}.md-typeset .example>.admonition-title,.md-typeset .example>summary{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{border-color:#9e9e9e}.md-typeset .admonition.quote:focus-within,.md-typeset details.quote:focus-within{box-shadow:0 0 0 .2rem #9e9e9e1a}.md-typeset .quote>.admonition-title,.md-typeset .quote>summary{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.42L5.83 13H21V7z"/></svg>')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target,.md-typeset h2:target,.md-typeset h3:target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.doc-contents td code{word-break:normal!important}.doc-md-description,.doc-md-description>p:first-child{display:inline}.md-typeset h5 .doc-object-name{text-transform:none}.doc .md-typeset__table,.doc .md-typeset__table table{display:table!important;width:100%}.doc .md-typeset__table tr{display:table-row}.doc-param-default,.doc-type_param-default{float:right}.doc-heading-parameter,.doc-heading-type_parameter{display:inline}.md-typeset .doc-heading-parameter{font-size:inherit}.doc-heading-parameter .headerlink,.doc-heading-type_parameter .headerlink{margin-left:0!important;margin-right:.2rem}.doc-section-title{font-weight:700}.doc-signature .autorefs{color:inherit;text-decoration-style:dotted}:host,:root,[data-md-color-scheme=default]{--doc-symbol-parameter-fg-color:#829bd1;--doc-symbol-type_parameter-fg-color:#829bd1;--doc-symbol-attribute-fg-color:#953800;--doc-symbol-function-fg-color:#8250df;--doc-symbol-method-fg-color:#8250df;--doc-symbol-class-fg-color:#0550ae;--doc-symbol-type_alias-fg-color:#0550ae;--doc-symbol-module-fg-color:#5cad0f;--doc-symbol-parameter-bg-color:#829bd11a;--doc-symbol-type_parameter-bg-color:#829bd11a;--doc-symbol-attribute-bg-color:#9538001a;--doc-symbol-function-bg-color:#8250df1a;--doc-symbol-method-bg-color:#8250df1a;--doc-symbol-class-bg-color:#0550ae1a;--doc-symbol-type_alias-bg-color:#0550ae1a;--doc-symbol-module-bg-color:#5cad0f1a}[data-md-color-scheme=slate]{--doc-symbol-parameter-fg-color:#829bd1;--doc-symbol-type_parameter-fg-color:#829bd1;--doc-symbol-attribute-fg-color:#ffa657;--doc-symbol-function-fg-color:#d2a8ff;--doc-symbol-method-fg-color:#d2a8ff;--doc-symbol-class-fg-color:#79c0ff;--doc-symbol-type_alias-fg-color:#79c0ff;--doc-symbol-module-fg-color:#baff79;--doc-symbol-parameter-bg-color:#829bd11a;--doc-symbol-type_parameter-bg-color:#829bd11a;--doc-symbol-attribute-bg-color:#ffa6571a;--doc-symbol-function-bg-color:#d2a8ff1a;--doc-symbol-method-bg-color:#d2a8ff1a;--doc-symbol-class-bg-color:#79c0ff1a;--doc-symbol-type_alias-bg-color:#79c0ff1a;--doc-symbol-module-bg-color:#baff791a}code.doc-symbol{border-radius:.1rem;font-size:.85em;font-weight:700;padding:0 .3em}a code.doc-symbol-parameter,code.doc-symbol-parameter{background-color:var(--doc-symbol-parameter-bg-color);color:var(--doc-symbol-parameter-fg-color)}code.doc-symbol-parameter:after{content:"param"}a code.doc-symbol-type_parameter,code.doc-symbol-type_parameter{background-color:var(--doc-symbol-type_parameter-bg-color);color:var(--doc-symbol-type_parameter-fg-color)}code.doc-symbol-type_parameter:after{content:"type-param"}a code.doc-symbol-attribute,code.doc-symbol-attribute{background-color:var(--doc-symbol-attribute-bg-color);color:var(--doc-symbol-attribute-fg-color)}code.doc-symbol-attribute:after{content:"attr"}a code.doc-symbol-function,code.doc-symbol-function{background-color:var(--doc-symbol-function-bg-color);color:var(--doc-symbol-function-fg-color)}code.doc-symbol-function:after{content:"func"}a code.doc-symbol-method,code.doc-symbol-method{background-color:var(--doc-symbol-method-bg-color);color:var(--doc-symbol-method-fg-color)}code.doc-symbol-method:after{content:"meth"}a code.doc-symbol-class,code.doc-symbol-class{background-color:var(--doc-symbol-class-bg-color);color:var(--doc-symbol-class-fg-color)}code.doc-symbol-class:after{content:"class"}a code.doc-symbol-type_alias,code.doc-symbol-type_alias{background-color:var(--doc-symbol-type_alias-bg-color);color:var(--doc-symbol-type_alias-fg-color)}code.doc-symbol-type_alias:after{content:"type"}a code.doc-symbol-module,code.doc-symbol-module{background-color:var(--doc-symbol-module-bg-color);color:var(--doc-symbol-module-fg-color)}code.doc-symbol-module:after{content:"mod"}:root{--md-admonition-icon--mkdocstrings-source:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.22 4.97a.75.75 0 0 1 1.06 0l6.5 6.5a.75.75 0 0 1 0 1.06l-6.5 6.5a.749.749 0 0 1-1.275-.326.75.75 0 0 1 .215-.734L21.19 12l-5.97-5.97a.75.75 0 0 1 0-1.06m-6.44 0a.75.75 0 0 1 0 1.06L2.81 12l5.97 5.97a.749.749 0 0 1-.326 1.275.75.75 0 0 1-.734-.215l-6.5-6.5a.75.75 0 0 1 0-1.06l6.5-6.5a.75.75 0 0 1 1.06 0"/></svg>') }.md-typeset .admonition.mkdocstrings-source,.md-typeset details.mkdocstrings-source{border:none;padding:0}.md-typeset .admonition.mkdocstrings-source:focus-within,.md-typeset details.mkdocstrings-source:focus-within{box-shadow:none}.md-typeset .mkdocstrings-source>.admonition-title,.md-typeset .mkdocstrings-source>summary{background-color:inherit}.md-typeset .mkdocstrings-source>.admonition-title:before,.md-typeset .mkdocstrings-source>summary:before{background-color:var(--md-default-fg-color);-webkit-mask-image:var(--md-admonition-icon--mkdocstrings-source);mask-image:var(--md-admonition-icon--mkdocstrings-source)}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.md-typeset div.arithmatex{margin:0 -.8rem}.md-typeset div.arithmatex>*{width:min-content}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset div.arithmatex mjx-assistive-mml{height:0}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem;overflow:hidden}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{--md-icon-size:1.125em;display:inline-flex;height:var(--md-icon-size);vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:var(--md-icon-size)}.md-typeset .emojione svg.lucide,.md-typeset .gemoji svg.lucide,.md-typeset .twemoji svg.lucide{fill:#0000;stroke:currentcolor}.md-typeset .lg,.md-typeset .xl,.md-typeset .xxl,.md-typeset .xxxl{vertical-align:text-bottom}.md-typeset .middle{vertical-align:middle}.md-typeset .lg{--md-icon-size:1.5em}.md-typeset .xl{--md-icon-size:2.25em}.md-typeset .xxl{--md-icon-size:3em}.md-typeset .xxxl{--md-icon-size:4em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code>span[id^=__span]>:last-child .md-annotation{margin-right:2.4rem}.highlight code[data-md-copying]{display:initial}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .linenodiv span[class]{padding-right:.5882352941em}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.984375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.41 16.58 10.83 12l4.58-4.59L14 6l-6 6 6 6z"/></svg>');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.md-typeset .tabbed-labels>label>[href]:first-child{color:inherit}.md-typeset .tabbed-labels--linked>label{padding:0}.md-typeset .tabbed-labels--linked>label>a{display:block;padding:.78125em 1.25em .625em}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.md-typeset [role=dialog] .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset [role=dialog] .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset [role=dialog] .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset [role=dialog] .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset [role=dialog] .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset [role=dialog] .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset [role=dialog] .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset [role=dialog] .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset [role=dialog] .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset [role=dialog] .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset [role=dialog] .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset [role=dialog] .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset [role=dialog] .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset [role=dialog] .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset [role=dialog] .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset [role=dialog] .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset [role=dialog] .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset [role=dialog] .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset [role=dialog] .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset [role=dialog] .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),[role=dialog] .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,[role=dialog] .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),[role=dialog] .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),[role=dialog] .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),[role=dialog] .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),[role=dialog] .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),[role=dialog] .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),[role=dialog] .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),[role=dialog] .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),[role=dialog] .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),[role=dialog] .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),[role=dialog] .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),[role=dialog] .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),[role=dialog] .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),[role=dialog] .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),[role=dialog] .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),[role=dialog] .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),[role=dialog] .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),[role=dialog] .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),[role=dialog] .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12m16.28-2.72a.75.75 0 0 0-.018-1.042.75.75 0 0 0-1.042-.018l-5.97 5.97-2.47-2.47a.75.75 0 0 0-1.042.018.75.75 0 0 0-.018 1.042l3 3a.75.75 0 0 0 1.06 0Z"/></svg>');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12m16.28-2.72a.75.75 0 0 0-.018-1.042.75.75 0 0 0-1.042-.018l-5.97 5.97-2.47-2.47a.75.75 0 0 0-1.042.018.75.75 0 0 0-.018 1.042l3 3a.75.75 0 0 0 1.06 0Z"/></svg>')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}@media print{.giscus,[id=__comments]{display:none}}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.mermaid{line-height:normal;margin:1em 0}.md-typeset .grid{grid-gap:.4rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));margin:1em 0}.md-typeset .grid.cards>ol,.md-typeset .grid.cards>ul{display:contents}.md-typeset .grid.cards>ol>li,.md-typeset .grid.cards>ul>li,.md-typeset .grid>.card{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem;display:block;margin:0;padding:.8rem;transition:border .25s,box-shadow .25s}.md-typeset .grid.cards>ol>li:focus-within,.md-typeset .grid.cards>ol>li:hover,.md-typeset .grid.cards>ul>li:focus-within,.md-typeset .grid.cards>ul>li:hover,.md-typeset .grid>.card:focus-within,.md-typeset .grid>.card:hover{border-color:#0000;box-shadow:var(--md-shadow-z2)}.md-typeset .grid.cards>ol>li>hr,.md-typeset .grid.cards>ul>li>hr,.md-typeset .grid>.card>hr{margin-bottom:1em;margin-top:1em}.md-typeset .grid.cards>ol>li>:first-child,.md-typeset .grid.cards>ul>li>:first-child,.md-typeset .grid>.card>:first-child{margin-top:0}.md-typeset .grid.cards>ol>li>:last-child,.md-typeset .grid.cards>ul>li>:last-child,.md-typeset .grid>.card>:last-child{margin-bottom:0}.md-typeset .grid>*,.md-typeset .grid>.admonition,.md-typeset .grid>.highlight>*,.md-typeset .grid>.highlighttable,.md-typeset .grid>.md-typeset details,.md-typeset .grid>details,.md-typeset .grid>pre{margin-bottom:0;margin-top:0}.md-typeset .grid>.highlight>pre:only-child,.md-typeset .grid>.highlight>pre>code,.md-typeset .grid>.highlighttable,.md-typeset .grid>.highlighttable>tbody,.md-typeset .grid>.highlighttable>tbody>tr,.md-typeset .grid>.highlighttable>tbody>tr>.code,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre>code{height:100%}.md-typeset .grid>.tabbed-set{margin-bottom:0;margin-top:0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-bg-color--light:#f5f5f5b3;--md-code-bg-color--lighter:#f5f5f54d;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff73;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059;--color-foreground:0 0 0;--color-background:255 255 255;--color-background-subtle:240 240 240;--color-backdrop:255 255 255}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}.md-icon svg.lucide{fill:#0000;stroke:currentcolor}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m18 21-4-4h3V7h-3l4-4 4 4h-3v10h3M2 19v-2h10v2M2 13v-2h7v2M2 7V5h4v2z"/></svg>');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 17h3l-4 4-4-4h3V3h2M2 17h10v2H2M6 5v2H2V5m0 6h7v2H2z"/></svg>');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 7h3l-4-4-4 4h3v14h2M2 17h10v2H2M6 5v2H2V5m0 6h7v2H2z"/></svg>')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6;overflow-wrap:break-word}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset h5 code{text-transform:none}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset a code{color:var(--md-typeset-a-color)}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none;transition:background-color 125ms}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;transition:color 125ms,background-color 125ms;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{cursor:help;text-decoration:none}.md-typeset [data-preview],.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light)}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol ol ol ol,.md-typeset ul ol ol ol{list-style-type:upper-alpha}.md-typeset ol ol ol ol ol,.md-typeset ul ol ol ol ol{list-style-type:upper-roman}.md-typeset ol[type],.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:fit-content}.md-typeset figure img{display:block;margin:0 auto}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-typeset .md-author{border-radius:100%;display:block;flex-shrink:0;height:1.6rem;overflow:hidden;position:relative;transition:color 125ms,transform 125ms;width:1.6rem}.md-typeset .md-author img{display:block}.md-typeset .md-author--more{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.md-typeset .md-author--long{height:2.4rem;width:2.4rem}.md-typeset a.md-author{transform:scale(1)}.md-typeset a.md-author img{border-radius:100%;filter:grayscale(100%) opacity(75%);transition:filter 125ms}.md-typeset a.md-author:focus,.md-typeset a.md-author:hover{transform:scale(1.1);z-index:1}.md-typeset a.md-author:focus img,.md-typeset a.md-author:hover img{filter:grayscale(0)}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.no-js .md-banner__button{display:none}.md-banner__button:hover{opacity:.7}html{scrollbar-gutter:stable;font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.984375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z"/></svg>')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}:root{--md-code-select-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 19h-4v2h4c1.1 0 2-.9 2-2v-4h-2m0-12h-4v2h4v4h2V5c0-1.1-.9-2-2-2M5 5h4V3H5c-1.1 0-2 .9-2 2v4h2m0 6H3v4c0 1.1.9 2 2 2h4v-2H5zm2-4h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2zM7 7h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2zm-8 8h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2z"/></svg>');--md-code-copy-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z"/></svg>')}.md-typeset .md-code__content{display:grid}.md-code__nav{background-color:var(--md-code-bg-color--lighter);border-radius:.1rem;display:flex;gap:.2rem;padding:.2rem;position:absolute;right:.25em;top:.25em;transition:background-color .25s;z-index:1}:hover>.md-code__nav{background-color:var(--md-code-bg-color--light)}.md-code__button{color:var(--md-default-fg-color--lightest);cursor:pointer;display:block;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em}:hover>*>.md-code__button{color:var(--md-default-fg-color--light)}.md-code__button.focus-visible,.md-code__button:hover{color:var(--md-accent-fg-color)}.md-code__button--active{color:var(--md-default-fg-color)!important}.md-code__button:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-code__button[data-md-type=select]:after{-webkit-mask-image:var(--md-code-select-icon);mask-image:var(--md-code-select-icon)}.md-code__button[data-md-type=copy]:after{-webkit-mask-image:var(--md-code-copy-icon);mask-image:var(--md-code-copy-icon)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}.md-content__button svg.lucide{fill:#0000;stroke:currentcolor}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{display:flex;flex-wrap:wrap;place-content:baseline center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}@media print{.md-feedback{display:none}}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;opacity:.7}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-social__link svg.lucide{fill:#0000;stroke:currentcolor}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:focus,.md-typeset .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-left:1rem;margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem;margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;white-space:nowrap}.md-header__option>input{bottom:0}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-meta{color:var(--md-default-fg-color--light);font-size:.7rem;line-height:1.3}.md-meta__list{display:inline-flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.md-meta__item:not(:last-child):after{content:"·";margin-left:.2rem;margin-right:.2rem}.md-meta__link{color:var(--md-typeset-a-color)}.md-meta__link:focus,.md-meta__link:hover{color:var(--md-accent-fg-color)}.md-draft{background-color:#ff1744;border-radius:.125em;color:#fff;display:inline-block;font-weight:700;padding-left:.5714285714em;padding-right:.5714285714em}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 9h14V7H3zm0 4h14v-2H3zm0 4h14v-2H3zm16 0h2v-2h-2zm0-10v2h2V7zm0 6h2v-2h-2z"/></svg>')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{color:var(--md-default-fg-color--light);display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__link{align-items:flex-start;display:flex;gap:.4rem;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.md-nav__link--passed,.md-nav__link--passed code{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active,.md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.md-nav__link .md-ellipsis{position:relative}.md-nav__link .md-ellipsis code{word-break:normal}[dir=ltr] .md-nav__link .md-icon:last-child{margin-left:auto}[dir=rtl] .md-nav__link .md-icon:last-child{margin-right:auto}.md-nav__link .md-typeset{font-size:.7rem;line-height:1.3}.md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em;position:relative;width:1.3em}.md-nav__link svg.lucide{fill:#0000;stroke:currentcolor}.md-nav__link[for]:focus,.md-nav__link[for]:hover,.md-nav__link[href]:focus,.md-nav__link[href]:hover{color:var(--md-accent-fg-color);cursor:pointer}.md-nav__link[for]:focus code,.md-nav__link[for]:hover code,.md-nav__link[href]:focus code,.md-nav__link[href]:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__container>.md-nav__link{margin-top:0}.md-nav__container>.md-nav__link:first-child{flex-grow:1;min-width:0}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.234375em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;overscroll-behavior-y:contain;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest)}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:focus,.md-nav--primary .md-nav__item--active>.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link svg{margin-top:.1em}.md-nav--primary .md-nav__link>.md-nav__link{padding:0}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{backface-visibility:hidden}}@media screen and (max-width:59.984375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav{margin-bottom:-.4rem}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--secondary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--secondary .md-nav__list{padding-right:.6rem}.md-nav--secondary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--secondary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--secondary .md-nav__item>.md-nav__link{margin-left:.4rem}}@media screen and (min-width:76.25em){.md-nav{margin-bottom:-.4rem;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--primary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--primary .md-nav__list{padding-right:.6rem}.md-nav--primary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--primary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--primary .md-nav__item>.md-nav__link{margin-left:.4rem}.md-nav__toggle~.md-nav{display:grid;grid-template-rows:minmax(.4rem,0fr);opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.md-nav__toggle.md-toggle--indeterminate~.md-nav,.md-nav__toggle:checked~.md-nav{grid-template-rows:minmax(.4rem,1fr);opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.md-nav__toggle.md-toggle--indeterminate~.md-nav{transition:none}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700}.md-nav__item--section>.md-nav__link[for]{color:var(--md-default-fg-color--light)}.md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav__item--section>.md-nav__link .md-icon,.md-nav__item--section>.md-nav__link>[for]{display:none}[dir=ltr] .md-nav__item--section>.md-nav{margin-left:-.6rem}[dir=rtl] .md-nav__item--section>.md-nav{margin-right:-.6rem}.md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s;width:.9rem}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;border-radius:100%;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;vertical-align:-.1rem;width:100%}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-toggle--indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);margin-top:0;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}[dir=ltr] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-left:-.6rem}[dir=rtl] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-right:-.6rem}.md-nav--lifted>.md-nav__list>.md-nav__item>[for]{color:var(--md-default-fg-color--light)}.md-nav--lifted .md-nav[data-md-level="1"]{grid-template-rows:minmax(.4rem,1fr);opacity:1;visibility:visible}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{overflow:visible;padding-bottom:0}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}.md-pagination{font-size:.8rem;font-weight:700;gap:.4rem}.md-pagination,.md-pagination>*{align-items:center;display:flex;justify-content:center}.md-pagination>*{border-radius:.2rem;height:1.8rem;min-width:1.8rem;text-align:center}.md-pagination__current{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light)}.md-pagination__link{transition:color 125ms,background-color 125ms}.md-pagination__link:focus,.md-pagination__link:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-pagination__link:focus svg,.md-pagination__link:hover svg{color:var(--md-accent-fg-color)}.md-pagination__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-pagination__link svg{fill:currentcolor;color:var(--md-default-fg-color--lighter);display:block;max-height:100%;width:1.2rem}:root{--md-path-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>')}.md-path{font-size:.7rem;margin:0 .8rem;overflow:auto;padding-top:1.2rem}.md-path:not([hidden]){display:block}@media screen and (min-width:76.25em){.md-path{margin:0 1.2rem}}.md-path__list{align-items:center;display:flex;gap:.2rem;list-style:none;margin:0;padding:0}.md-path__item:not(:first-child){display:inline-flex;gap:.2rem;white-space:nowrap}.md-path__item:not(:first-child):before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline;height:.8rem;-webkit-mask-image:var(--md-path-icon);mask-image:var(--md-path-icon);width:.8rem}.md-path__link{align-items:center;color:var(--md-default-fg-color--light);display:flex}.md-path__link:focus,.md-path__link:hover{color:var(--md-accent-fg-color)}:root{--md-post-pin-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2z"/></svg>')}.md-post__back{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin-bottom:1.2rem;padding-bottom:1.2rem}@media screen and (max-width:76.234375em){.md-post__back{display:none}}[dir=rtl] .md-post__back svg{transform:scaleX(-1)}.md-post__authors{display:flex;flex-direction:column;gap:.6rem;margin:0 .6rem 1.2rem}.md-post .md-post__meta a{transition:color 125ms}.md-post .md-post__meta a:focus,.md-post .md-post__meta a:hover{color:var(--md-accent-fg-color)}.md-post__title{color:var(--md-default-fg-color--light);font-weight:700}.md-post--excerpt{margin-bottom:3.2rem}.md-post--excerpt .md-post__header{align-items:center;display:flex;gap:.6rem;min-height:1.6rem}.md-post--excerpt .md-post__authors{align-items:center;display:inline-flex;flex-direction:row;gap:.2rem;margin:0;min-height:2.4rem}[dir=ltr] .md-post--excerpt .md-post__meta .md-meta__list{margin-right:.4rem}[dir=rtl] .md-post--excerpt .md-post__meta .md-meta__list{margin-left:.4rem}.md-post--excerpt .md-post__content>:first-child{--md-scroll-margin:6rem;margin-top:0}.md-post>.md-nav--secondary{margin:1em 0}.md-pin{background:var(--md-default-fg-color--lightest);border-radius:1rem;margin-top:-.05rem;padding:.2rem}.md-pin:after{background-color:currentcolor;content:"";display:block;height:.6rem;margin:0 auto;-webkit-mask-image:var(--md-post-pin-icon);mask-image:var(--md-post-pin-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.6rem}.md-profile{align-items:center;display:flex;font-size:.7rem;gap:.6rem;line-height:1.4;width:100%}.md-profile__description{flex-grow:1}.md-content--post{display:flex}@media screen and (max-width:76.234375em){.md-content--post{flex-flow:column-reverse}}.md-content--post>.md-content__inner{flex-grow:1;min-width:0}@media screen and (min-width:76.25em){[dir=ltr] .md-content--post>.md-content__inner{margin-left:1.2rem}[dir=rtl] .md-content--post>.md-content__inner{margin-right:1.2rem}}@media screen and (max-width:76.234375em){.md-sidebar.md-sidebar--post{padding:0;position:static;width:100%}.md-sidebar.md-sidebar--post .md-sidebar__scrollwrap{overflow:visible}.md-sidebar.md-sidebar--post .md-sidebar__inner{padding:0}.md-sidebar.md-sidebar--post .md-post__meta{margin-left:.6rem;margin-right:.6rem}.md-sidebar.md-sidebar--post .md-nav__item{border:none;display:inline}.md-sidebar.md-sidebar--post .md-nav__list{display:inline-flex;flex-wrap:wrap;gap:.6rem;padding-bottom:.6rem;padding-top:.6rem}.md-sidebar.md-sidebar--post .md-nav__link{padding:0}.md-sidebar.md-sidebar--post .md-nav{height:auto;margin-bottom:0;position:static}}:root{--md-progress-value:0;--md-progress-delay:400ms}.md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}:root{--md-search-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}@media screen and (max-width:59.984375em){.md-search{display:none}}.no-js .md-search{display:none}[dir=ltr] .md-search__button{padding-left:1.9rem;padding-right:2.2rem}[dir=rtl] .md-search__button{padding-left:2.2rem;padding-right:1.9rem}.md-search__button{background:var(--md-primary-fg-color);color:var(--md-primary-bg-color);cursor:pointer;font-size:.7rem;position:relative;text-align:left}@media screen and (min-width:45em){.md-search__button{background-color:#00000042;border-radius:.2rem;height:1.6rem;transition:background-color .4s,color .4s;width:8.9rem}.md-search__button:focus,.md-search__button:hover{background-color:#ffffff1f;color:var(--md-primary-bg-color)}}[dir=ltr] .md-search__button:before{left:0}[dir=rtl] .md-search__button:before{right:0}.md-search__button:before{background-color:var(--md-primary-bg-color);content:"";height:1rem;margin-left:.5rem;-webkit-mask-image:var(--md-search-icon);mask-image:var(--md-search-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.3rem;width:1rem}.md-search__button:after{background:#00000042;border-radius:.1rem;content:"Ctrl+K";display:block;font-size:.6rem;padding:.1rem .2rem;position:absolute;right:.6rem;top:.35rem}[data-platform^=Mac] .md-search__button:after{content:"⌘K"}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}@media screen and (max-width:59.984375em){.md-select__inner{left:100%;transform:translate3d(-100%,.3rem,0)}}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:min(75vh,28rem);opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}@media screen and (max-width:59.984375em){.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{transform:translate3d(-100%,0,0)}}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";filter:drop-shadow(0 -1px 0 var(--md-default-fg-color--lightest));height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}@media screen and (max-width:59.984375em){.md-select__inner:after{left:auto;right:1rem}}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;overscroll-behavior-y:contain;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000}@media screen and (min-width:60em){.md-sidebar__scrollwrap{scrollbar-gutter:stable;scrollbar-width:thin}}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.234375em){.md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0M5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0m6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5m-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0"/></svg>');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.5 2.5 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.25.25 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"/></svg>');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25m0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41z"/></svg>');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.75 1.75 0 0 1 1 7.775m1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2"/></svg>')}.md-source{backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-source-file{margin:1em 0}[dir=ltr] .md-source-file__fact{margin-right:.6rem}[dir=rtl] .md-source-file__fact{margin-left:.6rem}.md-source-file__fact{align-items:center;color:var(--md-default-fg-color--light);display:inline-flex;font-size:.68rem;gap:.3rem}.md-source-file__fact .md-icon{flex-shrink:0;margin-bottom:.05rem}[dir=ltr] .md-source-file__fact .md-author{float:left}[dir=rtl] .md-source-file__fact .md-author{float:right}.md-source-file__fact .md-author{margin-right:.2rem}.md-source-file__fact svg{width:.9rem}:root{--md-status:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 9h2V7h-2m1 13c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m-1 15h2v-6h-2z"/></svg>');--md-status--new:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m23 12-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68zm-10 5h-2v-2h2zm0-4h-2V7h2z"/></svg>');--md-status--deprecated:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zm0 5h2v9H9zm4 0h2v9h-2z"/></svg>');--md-status--encrypted:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 1 3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5zm0 6c1.4 0 2.8 1.1 2.8 2.5V11c.6 0 1.2.6 1.2 1.3v3.5c0 .6-.6 1.2-1.3 1.2H9.2c-.6 0-1.2-.6-1.2-1.3v-3.5c0-.6.6-1.2 1.2-1.2V9.5C9.2 8.1 10.6 7 12 7m0 1.2c-.8 0-1.5.5-1.5 1.3V11h3V9.5c0-.8-.7-1.3-1.5-1.3"/></svg>')}.md-status:after{background-color:var(--md-default-fg-color--light);content:"";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.md-status:hover:after{background-color:currentcolor}.md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.md-status--encrypted:after{-webkit-mask-image:var(--md-status--encrypted);mask-image:var(--md-status--encrypted)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.234375em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.md-tabs__link{backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}[dir=ltr] .md-tabs__link svg{margin-right:.4rem}[dir=rtl] .md-tabs__link svg{margin-left:.4rem}.md-tabs__link svg{fill:currentcolor;height:1.3em}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m5.41 21 .71-4h-4l.35-2h4l1.06-6h-4l.35-2h4l.71-4h2l-.71 4h6l.71-4h2l-.71 4h4l-.35 2h-4l-1.06 6h4l-.35 2h-4l-.71 4h-2l.71-4h-6l-.71 4zM9.53 9l-1.06 6h6l1.06-6z"/></svg>')}.md-typeset .md-tags:not([hidden]){display:inline-flex;flex-wrap:wrap;gap:.5em;margin-bottom:.75em;margin-top:-.125em}.md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-shadow{opacity:.5}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}:root{--md-annotation-bg-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>');--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 13h-4v4h-2v-4H7v-2h4V7h2v4h4m-5-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>')}.md-tooltip{backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.md-tooltip--inline{font-weight:700;-webkit-user-select:none;user-select:none;width:auto}.md-tooltip--inline:not(.md-tooltip--active){transform:translateY(.2rem) scale(.9)}.md-tooltip--inline .md-tooltip__inner{font-size:.5rem;padding:.2rem .4rem}[hidden]+.md-tooltip--inline{display:none}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-style:normal;font-weight:400;outline:none;text-align:initial;vertical-align:text-bottom;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.md-annotation:not([hidden]){display:inline-block;line-height:1.25}.md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.md-annotation__index{width:2.2ch}[data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.md-annotation__index:after,.md-annotation__index:before{content:"";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.md-typeset .md-annotation-list{counter-reset:annotation;list-style:none!important}.md-typeset .md-annotation-list li{position:relative}[dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}[dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(annotation);counter-increment:annotation;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}:root{--md-tooltip-width:20rem;--md-tooltip-tail:0.3rem}.md-tooltip2{backface-visibility:hidden;color:var(--md-default-fg-color);font-family:var(--md-text-font-family);opacity:0;pointer-events:none;position:absolute;top:calc(var(--md-tooltip-host-y) + var(--md-tooltip-y));transform:translateY(-.4rem);transform-origin:calc(var(--md-tooltip-host-x) + var(--md-tooltip-x)) 0;transition:transform 0ms .25s,opacity .25s,z-index .25s;width:100%;z-index:0}.md-tooltip2:before{border-left:var(--md-tooltip-tail) solid #0000;border-right:var(--md-tooltip-tail) solid #0000;content:"";display:block;left:clamp(1.5 * .8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-tail),100vw - 2 * var(--md-tooltip-tail) - 1.5 * .8rem);position:absolute;z-index:1}.md-tooltip2--top:before{border-top:var(--md-tooltip-tail) solid var(--md-default-bg-color);bottom:calc(var(--md-tooltip-tail)*-1 + .025rem);filter:drop-shadow(0 1px 0 hsla(0,0%,0%,.05))}.md-tooltip2--bottom:before{border-bottom:var(--md-tooltip-tail) solid var(--md-default-bg-color);filter:drop-shadow(0 -1px 0 hsla(0,0%,0%,.05));top:calc(var(--md-tooltip-tail)*-1 + .025rem)}.md-tooltip2[role=dialog]:after{content:"";display:block;height:.8rem;left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);pointer-events:auto;position:absolute;width:var(--md-tooltip-width);z-index:1}.md-tooltip2[role=dialog].md-tooltip2--top:after{top:100%}.md-tooltip2[role=dialog].md-tooltip2--bottom:after{bottom:100%}.md-tooltip2--active{opacity:1;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.5,1),opacity .25s,z-index 0ms;z-index:4}.md-tooltip2__inner{scrollbar-gutter:stable;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);max-height:40vh;max-width:calc(100vw - 1.6rem);position:relative;scrollbar-width:thin}.md-tooltip2__inner::-webkit-scrollbar{height:.2rem;width:.2rem}.md-tooltip2__inner::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-tooltip2__inner::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}[role=dialog]>.md-tooltip2__inner{font-size:.64rem;overflow:auto;padding:0 .8rem;pointer-events:auto;width:var(--md-tooltip-width)}[role=dialog]>.md-tooltip2__inner:after,[role=dialog]>.md-tooltip2__inner:before{content:"";display:block;height:.8rem;position:sticky;width:100%;z-index:10}[role=dialog]>.md-tooltip2__inner:before{background:linear-gradient(var(--md-default-bg-color),#0000 75%);top:0}[role=dialog]>.md-tooltip2__inner:after{background:linear-gradient(#0000,var(--md-default-bg-color) 75%);bottom:0}[role=tooltip]>.md-tooltip2__inner{font-size:.5rem;font-weight:700;left:clamp(.8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-width)/2,100vw - var(--md-tooltip-width) - .8rem);max-width:min(100vw - 2 * .8rem,400px);padding:.2rem .4rem;-webkit-user-select:none;user-select:none;width:fit-content}.md-tooltip2__inner.md-typeset>:first-child{margin-top:0}.md-tooltip2__inner.md-typeset>:last-child{margin-bottom:0}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}.md-top.lucide{fill:#0000;stroke:currentcolor}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">\3c !--! Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192h-256c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 7 34.8l128 128z"/></svg>')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__alias{margin-left:.3rem;opacity:.7}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-typeset .pyodide{background-color:var(--md-code-bg-color);border-radius:.1rem;font-family:var(--md-code-font-family);padding:.65625em 1em}.md-typeset .pyodide>pre{margin:0}.md-typeset .pyodide-editor{font-size:.85em;margin-bottom:1em;margin-top:1em;width:100%}.md-typeset .pyodide-editor-bar{border-bottom:.05rem solid var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font:monospace;font-size:.75em;margin-bottom:.4rem;padding-bottom:.4rem;width:100%}.md-typeset .pyodide-bar-item{display:inline-block;width:50%}.md-typeset .pyodide-clickable{cursor:pointer;text-align:right}.md-typeset .pyodide-output{background:#0000;border-radius:0;padding:0;width:100%}.md-typeset .pyodide-output code{padding:0}.md-typeset .ace-zensical{background-color:initial;color:var(--md-code-fg-color)}.md-typeset .ace-zensical .ace_gutter{background-color:initial;color:var(--md-default-fg-color--light)}.md-typeset .ace-zensical .ace_gutter-cell{padding-left:0}.md-typeset .ace-zensical .ace_cursor{color:var(--md-code-fg-color)}.md-typeset .ace-zensical .ace_selection{background:var(--md-code-hl-color--light)}.md-typeset .ace-zensical .ace_active-line{background:var(--md-default-fg-color--lightest)}.md-typeset .ace-zensical .ace_comment{color:var(--md-code-hl-comment-color)}.md-typeset .ace-zensical .ace_string{color:var(--md-code-hl-string-color)}.md-typeset .ace-zensical .ace_keyword{color:var(--md-code-hl-keyword-color)}.md-typeset .ace-zensical .ace_identifier{color:var(--md-code-fg-color)}.md-typeset .ace-zensical .ace_variable{color:var(--md-code-hl-variable-color)}.md-typeset .ace-zensical .ace_function{color:var(--md-code-hl-function-color)}.md-typeset .ace-zensical .ace_constant,.md-typeset .ace-zensical .ace_support{color:var(--md-code-hl-constant-color)}.md-typeset .ace-zensical .ace_numeric{color:var(--md-code-hl-number-color)}.md-typeset .ace-zensical .ace_operator{color:var(--md-code-hl-operator-color)}.md-typeset .ace-zensical .ace_punctuation{color:var(--md-code-hl-punctuation-color)}html.glightbox-open{height:100%;overflow:initial}html .gslide .gslide-description{background:var(--md-default-bg-color);-webkit-user-select:text;user-select:text}html .gslide .gslide-title{color:var(--md-default-fg-color);font-size:.8rem;margin-bottom:.4rem;margin-top:0}html .gslide .gslide-desc{color:var(--md-default-fg-color--light);font-size:.7rem}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m3.1 5.07c.14 0 .28.05.4.16l1.27 1.27c.23.22.23.57 0 .78l-1 1-2.05-2.05 1-1c.1-.11.24-.16.38-.16m-1.97 1.74 2.06 2.06-6.06 6.06H7.07v-2.06z"/></svg>');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 9H7V7h10m0 6H7v-2h10m-3 6H7v-2h7M12 3a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m7 0h-4.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2"/></svg>');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.66 11.2c-.23-.3-.51-.56-.77-.82-.67-.6-1.43-1.03-2.07-1.66C13.33 7.26 13 4.85 13.95 3c-.95.23-1.78.75-2.49 1.32-2.59 2.08-3.61 5.75-2.39 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.23.1-.47.04-.66-.12a.6.6 0 0 1-.14-.17c-1.13-1.43-1.31-3.48-.55-5.12C5.78 10 4.87 12.3 5 14.47c.06.5.12 1 .29 1.5.14.6.41 1.2.71 1.73 1.08 1.73 2.95 2.97 4.96 3.22 2.14.27 4.43-.12 6.07-1.6 1.83-1.66 2.47-4.32 1.53-6.6l-.13-.26c-.21-.46-.77-1.26-.77-1.26m-3.16 6.3c-.28.24-.74.5-1.1.6-1.12.4-2.24-.16-2.9-.82 1.19-.28 1.9-1.16 2.11-2.05.17-.8-.15-1.46-.28-2.23-.12-.74-.1-1.37.17-2.06.19.38.39.76.63 1.06.77 1 1.98 1.44 2.24 2.8.04.14.06.28.06.43.03.82-.33 1.72-.93 2.27"/></svg>');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7 9 19l-5.5-5.5 1.41-1.41L9 16.17 19.59 5.59z"/></svg>');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m15.07 11.25-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 0 0-2-2 2 2 0 0 0-2 2H8a4 4 0 0 1 4-4 4 4 0 0 1 4 4 3.2 3.2 0 0 1-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10c0-5.53-4.5-10-10-10"/></svg>');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2z"/></svg>');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m11.5 20 4.86-9.73H13V4l-5 9.73h3.5zM12 2c2.75 0 5.1 1 7.05 2.95S22 9.25 22 12s-1 5.1-2.95 7.05S14.75 22 12 22s-5.1-1-7.05-2.95S2 14.75 2 12s1-5.1 2.95-7.05S9.25 2 12 2"/></svg>');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 13h2v1h-2zm10-8v6c0 5.5-3.8 10.7-9 12-5.2-1.3-9-6.5-9-12V5l9-4zm-4 5h-2.2c-.2-.6-.6-1.1-1.1-1.5l1.2-1.2-.7-.7L12.8 8H12c-.2 0-.5 0-.7.1L9.9 6.6l-.8.8 1.2 1.2c-.5.3-.9.8-1.1 1.4H7v1h2v1H7v1h2v1H7v1h2.2c.4 1.2 1.5 2 2.8 2s2.4-.8 2.8-2H17v-1h-2v-1h2v-1h-2v-1h2zm-6 2h2v-1h-2z"/></svg>');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 2v2h1v14a4 4 0 0 0 4 4 4 4 0 0 0 4-4V4h1V2zm4 14c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m2-4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m1-5h-4V4h4z"/></svg>');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14 17h3l2-4V7h-6v6h3M6 17h3l2-4V7H5v6h3z"/></svg>')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.075rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid;transition:box-shadow 125ms}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition:focus-within,.md-typeset details:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset .admonition.note,.md-typeset details.note{border-color:#448aff}.md-typeset .admonition.note:focus-within,.md-typeset details.note:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .note>.admonition-title,.md-typeset .note>summary{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{border-color:#00b0ff}.md-typeset .admonition.abstract:focus-within,.md-typeset details.abstract:focus-within{box-shadow:0 0 0 .2rem #00b0ff1a}.md-typeset .abstract>.admonition-title,.md-typeset .abstract>summary{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{border-color:#00b8d4}.md-typeset .admonition.info:focus-within,.md-typeset details.info:focus-within{box-shadow:0 0 0 .2rem #00b8d41a}.md-typeset .info>.admonition-title,.md-typeset .info>summary{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{border-color:#00bfa5}.md-typeset .admonition.tip:focus-within,.md-typeset details.tip:focus-within{box-shadow:0 0 0 .2rem #00bfa51a}.md-typeset .tip>.admonition-title,.md-typeset .tip>summary{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{border-color:#00c853}.md-typeset .admonition.success:focus-within,.md-typeset details.success:focus-within{box-shadow:0 0 0 .2rem #00c8531a}.md-typeset .success>.admonition-title,.md-typeset .success>summary{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{border-color:#64dd17}.md-typeset .admonition.question:focus-within,.md-typeset details.question:focus-within{box-shadow:0 0 0 .2rem #64dd171a}.md-typeset .question>.admonition-title,.md-typeset .question>summary{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{border-color:#ff9100}.md-typeset .admonition.warning:focus-within,.md-typeset details.warning:focus-within{box-shadow:0 0 0 .2rem #ff91001a}.md-typeset .warning>.admonition-title,.md-typeset .warning>summary{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{border-color:#ff5252}.md-typeset .admonition.failure:focus-within,.md-typeset details.failure:focus-within{box-shadow:0 0 0 .2rem #ff52521a}.md-typeset .failure>.admonition-title,.md-typeset .failure>summary{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{border-color:#ff1744}.md-typeset .admonition.danger:focus-within,.md-typeset details.danger:focus-within{box-shadow:0 0 0 .2rem #ff17441a}.md-typeset .danger>.admonition-title,.md-typeset .danger>summary{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{border-color:#f50057}.md-typeset .admonition.bug:focus-within,.md-typeset details.bug:focus-within{box-shadow:0 0 0 .2rem #f500571a}.md-typeset .bug>.admonition-title,.md-typeset .bug>summary{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{border-color:#7c4dff}.md-typeset .admonition.example:focus-within,.md-typeset details.example:focus-within{box-shadow:0 0 0 .2rem #7c4dff1a}.md-typeset .example>.admonition-title,.md-typeset .example>summary{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{border-color:#9e9e9e}.md-typeset .admonition.quote:focus-within,.md-typeset details.quote:focus-within{box-shadow:0 0 0 .2rem #9e9e9e1a}.md-typeset .quote>.admonition-title,.md-typeset .quote>summary{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.42L5.83 13H21V7z"/></svg>')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target,.md-typeset h2:target,.md-typeset h3:target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.doc-contents td code{word-break:normal!important}.doc-md-description,.doc-md-description>p:first-child{display:inline}.md-typeset h5 .doc-object-name{text-transform:none}.doc .md-typeset__table,.doc .md-typeset__table table{display:table!important;width:100%}.doc .md-typeset__table tr{display:table-row}.doc-param-default,.doc-type_param-default{float:right}.doc-heading-parameter,.doc-heading-type_parameter{display:inline}.md-typeset .doc-heading-parameter{font-size:inherit}.doc-heading-parameter .headerlink,.doc-heading-type_parameter .headerlink{margin-left:0!important;margin-right:.2rem}.doc-section-title{font-weight:700}.doc-signature .autorefs{color:inherit;text-decoration-style:dotted}:host,:root,[data-md-color-scheme=default]{--doc-symbol-parameter-fg-color:#829bd1;--doc-symbol-type_parameter-fg-color:#829bd1;--doc-symbol-attribute-fg-color:#953800;--doc-symbol-function-fg-color:#8250df;--doc-symbol-method-fg-color:#8250df;--doc-symbol-class-fg-color:#0550ae;--doc-symbol-type_alias-fg-color:#0550ae;--doc-symbol-module-fg-color:#5cad0f;--doc-symbol-parameter-bg-color:#829bd11a;--doc-symbol-type_parameter-bg-color:#829bd11a;--doc-symbol-attribute-bg-color:#9538001a;--doc-symbol-function-bg-color:#8250df1a;--doc-symbol-method-bg-color:#8250df1a;--doc-symbol-class-bg-color:#0550ae1a;--doc-symbol-type_alias-bg-color:#0550ae1a;--doc-symbol-module-bg-color:#5cad0f1a}[data-md-color-scheme=slate]{--doc-symbol-parameter-fg-color:#829bd1;--doc-symbol-type_parameter-fg-color:#829bd1;--doc-symbol-attribute-fg-color:#ffa657;--doc-symbol-function-fg-color:#d2a8ff;--doc-symbol-method-fg-color:#d2a8ff;--doc-symbol-class-fg-color:#79c0ff;--doc-symbol-type_alias-fg-color:#79c0ff;--doc-symbol-module-fg-color:#baff79;--doc-symbol-parameter-bg-color:#829bd11a;--doc-symbol-type_parameter-bg-color:#829bd11a;--doc-symbol-attribute-bg-color:#ffa6571a;--doc-symbol-function-bg-color:#d2a8ff1a;--doc-symbol-method-bg-color:#d2a8ff1a;--doc-symbol-class-bg-color:#79c0ff1a;--doc-symbol-type_alias-bg-color:#79c0ff1a;--doc-symbol-module-bg-color:#baff791a}code.doc-symbol{border-radius:.1rem;font-size:.85em;font-weight:700;padding:0 .3em}a code.doc-symbol-parameter,code.doc-symbol-parameter{background-color:var(--doc-symbol-parameter-bg-color);color:var(--doc-symbol-parameter-fg-color)}code.doc-symbol-parameter:after{content:"param"}a code.doc-symbol-type_parameter,code.doc-symbol-type_parameter{background-color:var(--doc-symbol-type_parameter-bg-color);color:var(--doc-symbol-type_parameter-fg-color)}code.doc-symbol-type_parameter:after{content:"type-param"}a code.doc-symbol-attribute,code.doc-symbol-attribute{background-color:var(--doc-symbol-attribute-bg-color);color:var(--doc-symbol-attribute-fg-color)}code.doc-symbol-attribute:after{content:"attr"}a code.doc-symbol-function,code.doc-symbol-function{background-color:var(--doc-symbol-function-bg-color);color:var(--doc-symbol-function-fg-color)}code.doc-symbol-function:after{content:"func"}a code.doc-symbol-method,code.doc-symbol-method{background-color:var(--doc-symbol-method-bg-color);color:var(--doc-symbol-method-fg-color)}code.doc-symbol-method:after{content:"meth"}a code.doc-symbol-class,code.doc-symbol-class{background-color:var(--doc-symbol-class-bg-color);color:var(--doc-symbol-class-fg-color)}code.doc-symbol-class:after{content:"class"}a code.doc-symbol-type_alias,code.doc-symbol-type_alias{background-color:var(--doc-symbol-type_alias-bg-color);color:var(--doc-symbol-type_alias-fg-color)}code.doc-symbol-type_alias:after{content:"type"}a code.doc-symbol-module,code.doc-symbol-module{background-color:var(--doc-symbol-module-bg-color);color:var(--doc-symbol-module-fg-color)}code.doc-symbol-module:after{content:"mod"}:root{--md-admonition-icon--mkdocstrings-source:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.22 4.97a.75.75 0 0 1 1.06 0l6.5 6.5a.75.75 0 0 1 0 1.06l-6.5 6.5a.749.749 0 0 1-1.275-.326.75.75 0 0 1 .215-.734L21.19 12l-5.97-5.97a.75.75 0 0 1 0-1.06m-6.44 0a.75.75 0 0 1 0 1.06L2.81 12l5.97 5.97a.749.749 0 0 1-.326 1.275.75.75 0 0 1-.734-.215l-6.5-6.5a.75.75 0 0 1 0-1.06l6.5-6.5a.75.75 0 0 1 1.06 0"/></svg>') }.md-typeset .admonition.mkdocstrings-source,.md-typeset details.mkdocstrings-source{border:none;padding:0}.md-typeset .admonition.mkdocstrings-source:focus-within,.md-typeset details.mkdocstrings-source:focus-within{box-shadow:none}.md-typeset .mkdocstrings-source>.admonition-title,.md-typeset .mkdocstrings-source>summary{background-color:inherit}.md-typeset .mkdocstrings-source>.admonition-title:before,.md-typeset .mkdocstrings-source>summary:before{background-color:var(--md-default-fg-color);-webkit-mask-image:var(--md-admonition-icon--mkdocstrings-source);mask-image:var(--md-admonition-icon--mkdocstrings-source)}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.md-typeset div.arithmatex{margin:0 -.8rem}.md-typeset div.arithmatex>*{width:min-content}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset div.arithmatex mjx-assistive-mml{height:0}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem;overflow:hidden}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{--md-icon-size:1.125em;display:inline-flex;height:var(--md-icon-size);vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:var(--md-icon-size)}.md-typeset .emojione svg.lucide,.md-typeset .gemoji svg.lucide,.md-typeset .twemoji svg.lucide{fill:#0000;stroke:currentcolor}.md-typeset .lg,.md-typeset .xl,.md-typeset .xxl,.md-typeset .xxxl{vertical-align:text-bottom}.md-typeset .middle{vertical-align:middle}.md-typeset .lg{--md-icon-size:1.5em}.md-typeset .xl{--md-icon-size:2.25em}.md-typeset .xxl{--md-icon-size:3em}.md-typeset .xxxl{--md-icon-size:4em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code>span[id^=__span]>:last-child .md-annotation{margin-right:2.4rem}.highlight code[data-md-copying]{display:initial}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.highlighttable tr:first-child>.linenos{border-top-left-radius:.1rem}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .linenodiv span[class]{padding-right:.5882352941em}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlighttable>tbody>tr:nth-child(2)>.code>div>pre>code{border-top-right-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.984375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.41 16.58 10.83 12l4.58-4.59L14 6l-6 6 6 6z"/></svg>');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.md-typeset .tabbed-labels>label>[href]:first-child{color:inherit}.md-typeset .tabbed-labels--linked>label{padding:0}.md-typeset .tabbed-labels--linked>label>a{display:block;padding:.78125em 1.25em .625em}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.md-typeset [role=dialog] .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset [role=dialog] .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset [role=dialog] .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset [role=dialog] .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset [role=dialog] .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset [role=dialog] .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset [role=dialog] .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset [role=dialog] .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset [role=dialog] .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset [role=dialog] .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset [role=dialog] .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset [role=dialog] .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset [role=dialog] .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset [role=dialog] .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset [role=dialog] .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset [role=dialog] .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset [role=dialog] .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset [role=dialog] .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset [role=dialog] .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset [role=dialog] .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),[role=dialog] .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,[role=dialog] .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),[role=dialog] .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),[role=dialog] .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),[role=dialog] .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),[role=dialog] .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),[role=dialog] .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),[role=dialog] .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),[role=dialog] .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),[role=dialog] .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),[role=dialog] .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),[role=dialog] .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),[role=dialog] .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),[role=dialog] .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),[role=dialog] .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),[role=dialog] .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),[role=dialog] .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),[role=dialog] .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),[role=dialog] .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),[role=dialog] .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12m16.28-2.72a.75.75 0 0 0-.018-1.042.75.75 0 0 0-1.042-.018l-5.97 5.97-2.47-2.47a.75.75 0 0 0-1.042.018.75.75 0 0 0-.018 1.042l3 3a.75.75 0 0 0 1.06 0Z"/></svg>');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12m16.28-2.72a.75.75 0 0 0-.018-1.042.75.75 0 0 0-1.042-.018l-5.97 5.97-2.47-2.47a.75.75 0 0 0-1.042.018.75.75 0 0 0-.018 1.042l3 3a.75.75 0 0 0 1.06 0Z"/></svg>')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}@media print{.giscus,[id=__comments]{display:none}}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.mermaid{line-height:normal;margin:1em 0}.md-typeset .grid{grid-gap:.4rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));margin:1em 0}.md-typeset .grid.cards>ol,.md-typeset .grid.cards>ul{display:contents}.md-typeset .grid.cards>ol>li,.md-typeset .grid.cards>ul>li,.md-typeset .grid>.card{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem;display:block;margin:0;padding:.8rem;transition:border .25s,box-shadow .25s}.md-typeset .grid.cards>ol>li:focus-within,.md-typeset .grid.cards>ol>li:hover,.md-typeset .grid.cards>ul>li:focus-within,.md-typeset .grid.cards>ul>li:hover,.md-typeset .grid>.card:focus-within,.md-typeset .grid>.card:hover{border-color:#0000;box-shadow:var(--md-shadow-z2)}.md-typeset .grid.cards>ol>li>hr,.md-typeset .grid.cards>ul>li>hr,.md-typeset .grid>.card>hr{margin-bottom:1em;margin-top:1em}.md-typeset .grid.cards>ol>li>:first-child,.md-typeset .grid.cards>ul>li>:first-child,.md-typeset .grid>.card>:first-child{margin-top:0}.md-typeset .grid.cards>ol>li>:last-child,.md-typeset .grid.cards>ul>li>:last-child,.md-typeset .grid>.card>:last-child{margin-bottom:0}.md-typeset .grid>*,.md-typeset .grid>.admonition,.md-typeset .grid>.highlight>*,.md-typeset .grid>.highlighttable,.md-typeset .grid>.md-typeset details,.md-typeset .grid>details,.md-typeset .grid>pre{margin-bottom:0;margin-top:0}.md-typeset .grid>.highlight>pre:only-child,.md-typeset .grid>.highlight>pre>code,.md-typeset .grid>.highlighttable,.md-typeset .grid>.highlighttable>tbody,.md-typeset .grid>.highlighttable>tbody>tr,.md-typeset .grid>.highlighttable>tbody>tr>.code,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre>code{height:100%}.md-typeset .grid>.tabbed-set{margin-bottom:0;margin-top:0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/site/assets/stylesheets/modern/main.19d3147f.min.css b/site/assets/stylesheets/modern/main.19d3147f.min.css deleted file mode 100644 index d4d48163c..000000000 --- a/site/assets/stylesheets/modern/main.19d3147f.min.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008c;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#0000000d;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-bg-color--light:#f5f5f5b3;--md-code-bg-color--lighter:#f5f5f54d;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059;--color-foreground:0 0 0;--color-background:255 255 255;--color-background-subtle:240 240 240;--color-backdrop:255 255 255}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}.md-icon svg.lucide{fill:#0000;stroke:currentcolor}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-down-up" viewBox="0 0 24 24"><path d="m3 16 4 4 4-4m-4 4V4m14 4-4-4-4 4m4-4v16"/></svg>');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-down-narrow-wide" viewBox="0 0 24 24"><path d="m3 16 4 4 4-4m-4 4V4m4 0h4m-4 4h7m-7 4h10"/></svg>');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-up-narrow-wide" viewBox="0 0 24 24"><path d="m3 8 4-4 4 4M7 4v16m4-8h4m-4 4h7m-7 4h10"/></svg>');--md-typeset-preview-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-mouse-pointer-2" viewBox="0 0 24 24"><path d="M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z"/></svg>')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.75rem;letter-spacing:-.01em;line-height:1.8;overflow-wrap:break-word}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color);font-size:1.875em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:700;letter-spacing:-.025em}.md-typeset h2{font-size:1.5em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:700;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset h5 code{text-transform:none}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);text-decoration:underline;word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset a code{color:var(--md-typeset-a-color)}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none;transition:background-color 125ms}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.2rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:.25em .4em;transition:color 125ms,background-color 125ms;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{border-radius:.4rem;-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{border-radius:.2rem;box-shadow:0 0 0 .05rem var(--md-typeset-kbd-border-color),0 .15rem 0 var(--md-typeset-kbd-border-color);color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}.md-typeset [data-preview]{position:relative}[dir=ltr] .md-typeset [data-preview]:after{margin-left:.125em}[dir=rtl] .md-typeset [data-preview]:after{margin-right:.125em}.md-typeset [data-preview]:after{background-color:currentcolor;content:"";display:inline-block;height:.8em;-webkit-mask-image:var(--md-typeset-preview-icon);mask-image:var(--md-typeset-preview-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-top;width:.8em}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol ol ol ol,.md-typeset ul ol ol ol{list-style-type:upper-alpha}.md-typeset ol ol ol ol ol,.md-typeset ul ol ol ol ol{list-style-type:upper-roman}.md-typeset ol[type],.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:fit-content}.md-typeset figure img{display:block;margin:0 auto}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-accent-fg-color--transparent);color:var(--md-default-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.no-js .md-banner__button{display:none}.md-banner__button:hover{opacity:.7}html{scrollbar-gutter:stable;font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.984375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-clipboard-copy" viewBox="0 0 24 24"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"/><path d="M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M16 4h2a2 2 0 0 1 2 2v4m1 4H11"/><path d="m15 10-4 4 4 4"/></svg>')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}:root{--md-code-select-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-scan" viewBox="0 0 24 24"><path d="M3 7V5a2 2 0 0 1 2-2h2m10 0h2a2 2 0 0 1 2 2v2m0 10v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2"/></svg>');--md-code-copy-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-clipboard-copy" viewBox="0 0 24 24"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"/><path d="M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M16 4h2a2 2 0 0 1 2 2v4m1 4H11"/><path d="m15 10-4 4 4 4"/></svg>')}.md-typeset .md-code__content{display:grid}.md-code__nav{background-color:var(--md-code-bg-color--lighter);border-radius:.1rem;display:flex;gap:.2rem;padding:.2rem;position:absolute;right:.25em;top:.25em;transition:background-color .25s;z-index:1}:hover>.md-code__nav{background-color:var(--md-code-bg-color--light)}.md-code__button{color:var(--md-default-fg-color--lightest);cursor:pointer;display:block;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em}:hover>*>.md-code__button{color:var(--md-default-fg-color--light)}.md-code__button.focus-visible,.md-code__button:hover{color:var(--md-accent-fg-color)}.md-code__button--active{color:var(--md-default-fg-color)!important}.md-code__button:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-code__button[data-md-type=select]:after{-webkit-mask-image:var(--md-code-select-icon);mask-image:var(--md-code-select-icon)}.md-code__button[data-md-type=copy]:after{-webkit-mask-image:var(--md-code-copy-icon);mask-image:var(--md-code-copy-icon)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .35s both;-webkit-backdrop-filter:blur(.2rem);backdrop-filter:blur(.2rem);background-color:var(--md-default-bg-color--light);height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{bottom:0;display:flex;justify-content:center;max-height:100%;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.8rem;box-shadow:var(--md-shadow-z3);margin:.4rem;overflow:auto;padding-left:1.2rem;padding-right:1.2rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{line-height:1.2;margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.7rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{background-color:var(--md-default-fg-color--lightest);border-radius:.4rem;display:flex;margin-top:.2rem;padding:.3rem}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color);transition:color .25s,background-color .25s}.md-typeset .md-content__button svg{opacity:.5;transition:opacity .25s}.md-typeset .md-content__button:focus,.md-typeset .md-content__button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .md-content__button:focus svg,.md-typeset .md-content__button:hover svg{opacity:1}.md-content__button svg{height:.9rem;width:.9rem}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}.md-content__button svg.lucide{fill:#0000;stroke:currentcolor}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-accent-fg-color);border-radius:1.2rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem 1.2rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{display:flex;flex-wrap:wrap;place-content:baseline center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}@media print{.md-feedback{display:none}}.md-footer{background-color:var(--md-default-bg-color);border-top:.05rem solid var(--md-default-fg-color--lightest);color:var(--md-default-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.8rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.6rem;opacity:.7}.md-footer-meta{background-color:var(--md-default-fg-color--lightest)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a:not(:focus,:hover){color:var(--md-default-fg-color)}.md-copyright{color:var(--md-default-fg-color--light);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-default-fg-color)}.md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-social__link svg.lucide{fill:#0000;stroke:currentcolor}.md-typeset .md-button{background-color:var(--md-default-fg-color--lightest);border-radius:1.2rem;color:var(--md-default-fg-color--light);cursor:pointer;display:inline-block;font-size:.875em;font-weight:700;padding:.625em 2em;text-decoration:none;transition:color 125ms,background-color 125ms,opacity 125ms}.md-typeset .md-button.focus-visible{outline-offset:0}.md-typeset .md-button:focus,.md-typeset .md-button:hover{color:var(--md-default-fg-color--light);opacity:.8}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button--primary:focus,.md-typeset .md-button--primary:hover{color:var(--md-primary-bg-color);opacity:.8}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);color:var(--md-default-fg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1)}.md-header--shadow{box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest);transition:transform .25s cubic-bezier(.1,.7,.1,1)}.md-header__inner{align-items:center;display:flex;padding:0 .4rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo img.lucide,.md-header__button.md-logo svg.lucide{fill:#0000;stroke:currentcolor}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;letter-spacing:-.025em;line-height:2.4rem;margin-left:.4rem;margin-right:.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;white-space:nowrap}.md-header__option>input{bottom:0}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.5rem;width:11.5rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-header .md-icon svg{height:1rem;width:1rem}:root{--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chevron-right" viewBox="0 0 24 24"><path d="m9 18 6-6-6-6"/></svg>')}.md-nav{font-size:.7rem;line-height:1.3;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav .md-nav__title{display:none}.md-nav__list{display:flex;flex-direction:column;gap:.2rem;list-style:none;margin:0;padding:0}[dir=ltr] .md-nav__list .md-nav__list{margin-left:.6rem}[dir=rtl] .md-nav__list .md-nav__list{margin-right:.6rem}.md-nav__item--nested .md-nav__list:after,.md-nav__item--nested .md-nav__list:before{content:" ";display:block;height:0}.md-nav__link{align-items:flex-start;border-radius:.4rem;cursor:pointer;display:flex;gap:.6rem;margin-left:.2rem;margin-right:.2rem;padding:.35rem .8rem;transition:color .25s,background-color .25s}.md-nav__link .md-nav__link{margin:0}.md-nav__link--passed,.md-nav__link--passed code{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{font-weight:500}.md-nav--primary .md-nav__item .md-nav__link--active{background:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-nav__item .md-nav__link--active,.md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.md-nav__item .md-nav__link--active code svg,.md-nav__item .md-nav__link--active svg{opacity:1}[dir=ltr] .md-nav__item--nested>.md-nav__link:not(.md-nav__container){padding-right:.35rem}[dir=rtl] .md-nav__item--nested>.md-nav__link:not(.md-nav__container){padding-left:.35rem}.md-nav__link .md-ellipsis{flex-grow:1;position:relative}.md-nav__link .md-ellipsis code{word-break:normal}.md-nav__link .md-typeset{font-size:.7rem;line-height:1.3}.md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em;opacity:.5;position:relative;width:1.3em}.md-nav__link svg.lucide{fill:#0000;stroke:currentcolor}.md-nav--primary .md-nav__link[for]:focus:not(.md-nav__link--active),.md-nav--primary .md-nav__link[for]:hover:not(.md-nav__link--active),.md-nav--primary .md-nav__link[href]:focus:not(.md-nav__link--active),.md-nav--primary .md-nav__link[href]:hover:not(.md-nav__link--active){background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color)}.md-nav--secondary .md-nav__link{margin-left:.2rem;margin-right:.2rem;overflow-wrap:normal;padding:.35rem .8rem}.md-nav--secondary .md-nav__link[for]:focus,.md-nav--secondary .md-nav__link[for]:hover,.md-nav--secondary .md-nav__link[href]:focus,.md-nav--secondary .md-nav__link[href]:hover{background-color:initial;color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link[for=__toc],.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__icon{font-size:.9rem;height:.9rem;width:.9rem}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;width:100%}@media screen and (min-width:76.25em){.md-nav__item--nested.md-nav__item--section>.md-nav__link .md-nav__icon:after{display:none}}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-toggle--indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav__container{background:#0000;gap:.2rem;padding:0}.md-nav__container>:first-child{flex-grow:1;min-width:0}.md-nav__container>:nth-child(2){padding:.35rem}@media screen and (min-width:76.25em){.md-nav__item--section>.md-nav__container>:nth-child(2){display:none}}.md-nav__container__icon{flex-shrink:0}.md-nav__toggle~.md-nav{display:grid;grid-template-rows:minmax(.005rem,0fr);opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.md-nav__toggle.md-toggle--indeterminate~.md-nav,.md-nav__toggle:checked~.md-nav{grid-template-rows:minmax(.4rem,1fr);opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.md-nav__toggle.md-toggle--indeterminate~.md-nav{transition:none}.md-nav--secondary{margin-bottom:.1rem;margin-top:.1rem}.md-nav--secondary .md-nav{margin-top:.2rem}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);display:flex;font-weight:700;margin-left:.2rem;margin-right:.2rem;padding:.35rem .6rem;position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}.md-nav--secondary .md-nav__link{padding:.2rem .6rem}@media screen and (max-width:76.234375em){.md-nav--primary{margin-bottom:.4rem;margin-left:.2rem;margin-right:.2rem}.md-nav .md-nav__title[for=__drawer]{align-items:center;border-bottom:.05rem solid var(--md-default-fg-color-lightest);display:flex;font-size:.8rem;font-weight:700;gap:.4rem;padding:.8rem}.md-nav .md-nav__title[for=__drawer] .md-logo{height:1.6rem;width:1.6rem}.md-nav .md-nav__title[for=__drawer] .md-logo img,.md-nav .md-nav__title[for=__drawer] .md-logo svg{fill:currentcolor;display:block;height:100%;max-width:100%;object-fit:contain;width:auto}.md-nav .md-nav__title[for=__drawer] .md-logo img.lucide,.md-nav .md-nav__title[for=__drawer] .md-logo svg.lucide{fill:#0000;stroke:currentcolor}}.md-nav__source{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.4rem;margin:.2rem .2rem .6rem;transition:background-color .25s,border-color .25s}.md-nav__source:focus,.md-nav__source:hover{background-color:var(--md-default-fg-color--lightest);border-color:#0000}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{margin-left:1.1rem}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{margin-right:1.1rem}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-default-fg-color--lightest)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-default-fg-color--lightest)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:.5em;margin-top:.5em;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary .md-nav__link{background:#0000}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary .md-nav__link--active{font-weight:500}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary .md-nav__link:focus,.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary .md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{margin-left:0;overflow:visible;padding-bottom:0}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}@media screen and (min-width:76.25em){.md-nav--primary{margin-bottom:.1rem;margin-top:.1rem}.md-nav__source{display:none}[dir=ltr] .md-nav__list .md-nav__item--section>.md-nav>.md-nav__list{margin-left:0}[dir=rtl] .md-nav__list .md-nav__item--section>.md-nav>.md-nav__list{margin-right:0}.md-nav__item--section>.md-nav__link--active,.md-nav__item--section>.md-nav__link>.md-nav__link--active{font-weight:700}.md-nav__item--section{margin-top:.4rem}.md-nav__item--section:first-child{margin-top:0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700}.md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav--lifted{margin-top:0}.md-nav--lifted>.md-nav__list>.md-nav__item{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav{margin-top:.1rem}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav>.md-nav__list:before,.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}.md-nav--lifted .md-nav[data-md-level="1"]{grid-template-rows:minmax(.4rem,1fr);opacity:1;visibility:visible}}:root{--md-path-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chevron-right" viewBox="0 0 24 24"><path d="m9 18 6-6-6-6"/></svg>')}.md-path{font-size:.7rem;margin:.4rem .8rem 0;overflow:auto;padding-top:1.2rem}.md-path:not([hidden]){display:block}@media screen and (min-width:76.25em){.md-path{margin:.4rem 1.2rem 0}}.md-path__list{align-items:center;display:flex;gap:.2rem;list-style:none;margin:0;padding:0}.md-path__item:not(:first-child){align-items:center;display:inline-flex;gap:.2rem;white-space:nowrap}.md-path__item:not(:first-child):before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline;height:.6rem;-webkit-mask-image:var(--md-path-icon);mask-image:var(--md-path-icon);width:.6rem}.md-path__link{align-items:center;color:var(--md-default-fg-color--light);display:flex;transition:color .25s}.md-path__link:focus,.md-path__link:hover{color:var(--md-accent-fg-color)}:root{--md-progress-value:0;--md-progress-delay:400ms}.md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}:root{--md-search-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>')}.md-search{position:relative}@media screen and (min-width:45em){.md-search{padding:.2rem 0}}@media screen and (max-width:59.984375em){.md-search{display:none}}.no-js .md-search{display:none}[dir=ltr] .md-search__button{padding-left:1.9rem;padding-right:2.2rem}[dir=rtl] .md-search__button{padding-left:2.2rem;padding-right:1.9rem}.md-search__button{background:var(--md-default-bg-color);color:var(--md-default-fg-color);cursor:pointer;font-size:.7rem;position:relative;text-align:left}@media screen and (min-width:45em){.md-search__button{background-color:var(--md-default-fg-color--lightest);border-radius:.4rem;height:1.6rem;transition:background-color .4s,color .4s;width:8.9rem}.md-search__button:focus,.md-search__button:hover{background-color:var(--md-default-fg-color--lighter);color:var(--md-default-fg-color)}}[dir=ltr] .md-search__button:before{left:0}[dir=rtl] .md-search__button:before{right:0}.md-search__button:before{background-color:var(--md-default-fg-color);content:"";height:1rem;margin-left:.5rem;-webkit-mask-image:var(--md-search-icon);mask-image:var(--md-search-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.3rem;width:1rem}.md-search__button:after{background:var(--md-default-bg-color--light);border-radius:.2rem;content:"Ctrl+K";display:block;font-size:.6rem;padding:.1rem .2rem;position:absolute;right:.6rem;top:.35rem}[data-platform^=Mac] .md-search__button:after{content:"⌘K"}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.4rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}@media screen and (max-width:59.984375em){.md-select__inner{left:100%;transform:translate3d(-100%,.3rem,0)}}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:min(75vh,28rem);opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}@media screen and (max-width:59.984375em){.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{transform:translate3d(-100%,0,0)}}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";filter:drop-shadow(0 -1px 0 var(--md-default-fg-color--lightest));height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}@media screen and (max-width:59.984375em){.md-select__inner:after{left:auto;right:1rem}}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-toc-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-text-align-start" viewBox="0 0 24 24"><path d="M21 5H3m12 7H3m14 7H3"/></svg>')}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.1rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);border-radius:.8rem;display:block;height:calc(100% - .8rem);position:fixed;top:.4rem;transform:translateX(0);transition:transform .2s cubic-bezier(.5,0,.5,0),box-shadow .2s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.5rem);transition:transform .25s cubic-bezier(.7,.7,.1,1),box-shadow .25s}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.5rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overscroll-behavior-y:contain;position:absolute;right:0;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{order:2}@media screen and (max-width:59.984375em){.md-sidebar--secondary{bottom:1.6rem;padding:0;position:fixed;right:.8rem;top:auto;width:auto;z-index:2}.md-sidebar--secondary .md-nav--secondary{margin-top:0}.md-sidebar--secondary .md-nav__title{padding:.55rem .6rem .35rem}.md-sidebar--secondary .md-sidebar__scrollwrap{display:flex;flex-direction:column-reverse;overflow-y:visible;position:relative}.md-sidebar--secondary .md-sidebar__inner{background-color:var(--md-default-bg-color);border-radius:.4rem;bottom:2.7rem;box-shadow:var(--md-shadow-z2);max-height:50vh;opacity:0;overflow-y:auto;padding-bottom:.4rem;pointer-events:none;position:absolute;right:0;transform:translateY(.4rem);transition:transform 0ms .25s,opacity .25s;width:11.7rem}.md-sidebar--secondary [type=checkbox]:checked~.md-sidebar__inner{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.35,1),opacity .25s,z-index 0ms}.md-sidebar--secondary .md-sidebar-button{-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:inline-flex;font-size:.7rem;gap:.4rem;outline:none;padding:.5rem;transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms}.md-sidebar--secondary .md-sidebar-button:after{background-color:currentcolor;content:"";display:block;height:.9rem;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;width:.9rem}.md-sidebar--secondary .md-sidebar-button:focus,.md-sidebar--secondary .md-sidebar-button:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-sidebar--secondary .md-sidebar-button__wrapper{text-align:right}}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.md-sidebar--secondary .md-sidebar-button{display:none}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{backface-visibility:hidden;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000}@media screen and (min-width:60em){.md-sidebar__scrollwrap{scrollbar-gutter:stable;scrollbar-width:thin}}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar__inner{padding-right:0}[dir=rtl] .md-sidebar__inner{padding-left:0}}}@media screen and (max-width:76.234375em){.md-overlay{-webkit-backdrop-filter:blur(.2rem);backdrop-filter:blur(.2rem);background-color:var(--md-default-bg-color--light);height:0;opacity:0;position:fixed;top:0;transition:width 0ms .5s,height 0ms .5s,opacity .25s 125ms;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-git-fork" viewBox="0 0 24 24"><circle cx="12" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><circle cx="18" cy="6" r="3"/><path d="M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9m6 3v3"/></svg>');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book" viewBox="0 0 24 24"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20"/></svg>');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-star" viewBox="0 0 24 24"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.12 2.12 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.12 2.12 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.12 2.12 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.12 2.12 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.12 2.12 0 0 0 1.597-1.16z"/></svg>');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-tag" viewBox="0 0 24 24"><path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z"/><circle cx="7.5" cy="7.5" r=".5" fill="currentColor"/></svg>')}.md-source{backface-visibility:hidden;display:block;font-size:.55rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}.md-header .md-source__icon svg{height:1.2rem;width:1.2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts 0ms ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact 0ms ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-source-file{margin:1em 0}[dir=ltr] .md-source-file__fact{margin-right:.6rem}[dir=rtl] .md-source-file__fact{margin-left:.6rem}.md-source-file__fact{align-items:center;color:var(--md-default-fg-color--light);display:inline-flex;font-size:.68rem;gap:.3rem}.md-source-file__fact .md-icon{flex-shrink:0;margin-bottom:.05rem}[dir=ltr] .md-source-file__fact .md-author{float:left}[dir=rtl] .md-source-file__fact .md-author{float:right}.md-source-file__fact .md-author{margin-right:.2rem}.md-source-file__fact svg{width:.9rem}:root{--md-status:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-info" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4m0-4h.01"/></svg>');--md-status--new:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-badge-alert" viewBox="0 0 24 24"><path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76M12 8v4m0 4h.01"/></svg>');--md-status--deprecated:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-trash" viewBox="0 0 24 24"><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/></svg>')}.md-status:after{background-color:var(--md-default-fg-color--light);content:"";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.md-status:hover:after{background-color:currentcolor}.md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.md-tabs{box-shadow:0 -.05rem 0 inset var(--md-default-fg-color--lightest);color:var(--md-default-fg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:2}@media print{.md-tabs{display:none}}@media screen and (max-width:76.234375em){.md-tabs{display:none}}.md-header--lifted .md-tabs{box-shadow:none;margin-bottom:-.05rem}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.4rem}[dir=rtl] .md-tabs__list{margin-right:.4rem}.md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__item--active{border-bottom:.05rem solid var(--md-default-fg-color);font-weight:500;position:relative;transition:border-bottom .25s}.md-tabs[hidden] .md-tabs__item--active{border-bottom:.05rem solid #0000}.md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.md-tabs__link{backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}[dir=ltr] .md-tabs__link svg{margin-right:.4rem}[dir=rtl] .md-tabs__link svg{margin-left:.4rem}.md-tabs__link svg{fill:currentcolor;height:1.3em}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m5.41 21 .71-4h-4l.35-2h4l1.06-6h-4l.35-2h4l.71-4h2l-.71 4h6l.71-4h2l-.71 4h4l-.35 2h-4l-1.06 6h4l-.35 2h-4l-.71 4h-2l.71-4h-6l-.71 4zM9.53 9l-1.06 6h6l1.06-6z"/></svg>')}.md-typeset .md-tags:not([hidden]){display:flex;flex-wrap:wrap;gap:.5em;margin-bottom:1.2rem;margin-top:.8rem;padding-top:1.2rem}.md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-shadow{opacity:.5}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}:root{--md-annotation-bg-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>');--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 13h-4v4h-2v-4H7v-2h4V7h2v4h4m-5-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>')}.md-tooltip{backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.4rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x) - .1rem,100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:calc(var(--md-tooltip-y) - .1rem);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.md-tooltip--inline{font-weight:400;-webkit-user-select:none;user-select:none;width:auto}.md-tooltip--inline:not(.md-tooltip--active){transform:translateY(.2rem) scale(.9)}.md-tooltip--inline .md-tooltip__inner{font-size:.55rem;padding:.2rem .4rem}[hidden]+.md-tooltip--inline{display:none}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-style:normal;font-weight:400;outline:none;text-align:initial;vertical-align:text-bottom;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.md-annotation:not([hidden]){display:inline-block;line-height:1.25}.md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.md-annotation__index{width:2.2ch}[data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.md-annotation__index:after,.md-annotation__index:before{content:"";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.md-typeset .md-annotation-list{counter-reset:annotation;list-style:none!important}.md-typeset .md-annotation-list li{position:relative}[dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}[dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(annotation);counter-increment:annotation;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}:root{--md-tooltip-width:20rem;--md-tooltip-tail:0.3rem}.md-tooltip2{backface-visibility:hidden;color:var(--md-default-fg-color);font-family:var(--md-text-font-family);opacity:0;pointer-events:none;position:absolute;top:calc(var(--md-tooltip-host-y) + var(--md-tooltip-y));transform:translateY(.4rem);transform-origin:calc(var(--md-tooltip-host-x) + var(--md-tooltip-x)) 0;transition:transform 0ms .25s,opacity .25s,z-index .25s;width:100%;z-index:0}.md-tooltip2:before{border-left:var(--md-tooltip-tail) solid #0000;border-right:var(--md-tooltip-tail) solid #0000;content:"";display:block;left:clamp(1.5 * .8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-tail),100vw - 2 * var(--md-tooltip-tail) - 1.5 * .8rem);position:absolute;z-index:1}.md-tooltip2--top:before{border-top:var(--md-tooltip-tail) solid var(--md-default-bg-color);bottom:calc(var(--md-tooltip-tail)*-1 + .025rem);filter:drop-shadow(0 1px 0 var(--md-default-fg-color--lightest))}.md-tooltip2--bottom:before{border-bottom:var(--md-tooltip-tail) solid var(--md-default-bg-color);filter:drop-shadow(0 -1px 0 var(--md-default-fg-color--lightest));top:calc(var(--md-tooltip-tail)*-1 + .025rem)}.md-tooltip2[role=dialog]:after{content:"";display:block;height:.8rem;left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);pointer-events:auto;position:absolute;width:var(--md-tooltip-width);z-index:1}.md-tooltip2[role=dialog].md-tooltip2--top:after{top:100%}.md-tooltip2[role=dialog].md-tooltip2--bottom:after{bottom:100%}.md-tooltip2--active{opacity:1;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.35,1),opacity .25s,z-index 0ms;z-index:4}.md-tooltip2__inner{scrollbar-gutter:stable;background-color:var(--md-default-bg-color);border-radius:.4rem;box-shadow:var(--md-shadow-z2);left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);max-height:40vh;max-width:calc(100vw - 1.6rem);position:relative;scrollbar-width:thin}.md-tooltip2__inner::-webkit-scrollbar{height:.2rem;width:.2rem}.md-tooltip2__inner::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-tooltip2__inner::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}[role=dialog]>.md-tooltip2__inner{font-size:.64rem;overflow:auto;padding:0 .8rem;pointer-events:auto;width:var(--md-tooltip-width)}[role=dialog]>.md-tooltip2__inner:after,[role=dialog]>.md-tooltip2__inner:before{content:"";display:block;height:.8rem;position:sticky;width:100%;z-index:10}[role=dialog]>.md-tooltip2__inner:before{background:linear-gradient(var(--md-default-bg-color),#0000 75%);top:0}[role=dialog]>.md-tooltip2__inner:after{background:linear-gradient(#0000,var(--md-default-bg-color) 75%);bottom:0}[role=tooltip]>.md-tooltip2__inner{font-size:.55rem;font-weight:400;left:clamp(.8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-width)/2,100vw - var(--md-tooltip-width) - .8rem);max-width:min(100vw - 2 * .8rem,400px);padding:.2rem .4rem;-webkit-user-select:none;user-select:none;width:fit-content}.md-tooltip2__inner.md-typeset>:first-child{margin-top:0}.md-tooltip2__inner.md-typeset>:last-child{margin-bottom:0}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);border-radius:1.6rem;bottom:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:flex;font-size:.7rem;gap:.4rem;outline:none;padding:.5rem .9rem .5rem .7rem;position:fixed;top:auto!important;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;height:.9rem;vertical-align:-.5em;width:.9rem}.md-top svg.lucide{fill:#0000;stroke:currentcolor}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">\3c !--! Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192h-256c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 7 34.8l128 128z"/></svg>')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__alias{margin-left:.3rem;opacity:.7}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}html.glightbox-open{height:100%;overflow:initial}html .gslide .gslide-description,html .gslide .gslide-image img{background:var(--md-default-bg-color)}html .gslide .gslide-description{-webkit-user-select:text;user-select:text}html .gslide .gslide-title{color:var(--md-default-fg-color);font-size:.8rem;margin-bottom:.4rem;margin-top:0}html .gslide .gslide-desc{color:var(--md-default-fg-color--light);font-size:.7rem}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-paperclip" viewBox="0 0 24 24"><path d="m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551"/></svg>');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-notebook-text" viewBox="0 0 24 24"><path d="M2 6h4m-4 4h4m-4 4h4m-4 4h4"/><rect width="16" height="20" x="4" y="2" rx="2"/><path d="M9.5 8h5m-5 4H16m-6.5 4H14"/></svg>');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-info" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4m0-4h.01"/></svg>');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-flame" viewBox="0 0 24 24"><path d="M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4"/></svg>');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-check" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-question-mark" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3m.08 4h.01"/></svg>');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-triangle-alert" viewBox="0 0 24 24"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01"/></svg>');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-octagon-alert" viewBox="0 0 24 24"><path d="M12 16h.01M12 8v4m3.312-10a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z"/></svg>');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-zap" viewBox="0 0 24 24"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"/></svg>');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-bug" viewBox="0 0 24 24"><path d="M12 20v-9m2-4a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4zm.12-3.12L16 2"/><path d="M21 21a4 4 0 0 0-3.81-4M21 5a4 4 0 0 1-3.55 3.97M22 13h-4M3 21a4 4 0 0 1 3.81-4M3 5a4 4 0 0 0 3.55 3.97M6 13H2M8 2l1.88 1.88M9 7.13V6a3 3 0 1 1 6 0v1.13"/></svg>');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-flask-conical" viewBox="0 0 24 24"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2M6.453 15h11.094M8.5 2h7"/></svg>');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-message-square-quote" viewBox="0 0 24 24"><path d="M14 14a2 2 0 0 0 2-2V8h-2"/><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"/><path d="M8 14a2 2 0 0 0 2-2V8H8"/></svg>')}.md-typeset .admonition,.md-typeset details{background-color:#448aff1a;border-radius:.4rem;color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .8rem;page-break-inside:avoid}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:1.6rem;padding-right:.8rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.8rem;padding-right:1.6rem}.md-typeset .admonition-title,.md-typeset summary{font-weight:700;margin-bottom:1em;margin-top:.6rem;position:relative}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:0}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:0}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.125em;width:1rem}.md-typeset .admonition.note,.md-typeset details.note{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-up-to-line" viewBox="0 0 24 24"><path d="M5 3h14m-1 10-6-6-6 6m6-6v14"/></svg>')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateY(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateY(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700;text-decoration:none}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateY(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateY(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateY(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;text-decoration:none;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target{--md-scroll-offset:0.1rem}.md-typeset h3:target,.md-typeset h4:target{--md-scroll-offset:-0.1rem}:root{--md-admonition-icon--mkdocstrings:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-unfold-vertical" viewBox="0 0 24 24"><path d="M12 22v-6m0-8V2M4 12H2m8 0H8m8 0h-2m8 0h-2m-5 7-3 3-3-3m6-14-3-3-3 3"/></svg>');--md-admonition-icon--mkdocstrings-open:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-fold-vertical" viewBox="0 0 24 24"><path d="M12 22v-6m0-8V2M4 12H2m8 0H8m8 0h-2m8 0h-2m-5 7-3-3-3 3m6-14-3 3-3-3"/></svg>')}.doc-object-name{font-family:var(--md-code-font-family)}code.doc-symbol-heading{margin-right:.4rem;padding:0}[dir=ltr] .doc-labels{margin-left:.4rem}[dir=rtl] .doc-labels{margin-right:.4rem}.doc-label code{background:#0000;border:1px solid var(--md-default-fg-color--lightest);border-radius:.5rem;color:var(--md-default-fg-color--light);font-weight:400;padding-left:.3rem;padding-right:.3rem;vertical-align:text-bottom}.doc-contents td code{word-break:normal!important}.doc-md-description,.doc-md-description>p:first-child{display:inline}.md-typeset h5 .doc-object-name{text-transform:none}.doc .md-typeset__table,.doc .md-typeset__table table{display:table!important;width:100%}.doc .md-typeset__table tr{display:table-row}.doc-param-default,.doc-type_param-default{float:right}.doc-heading-parameter,.doc-heading-type_parameter{display:inline}.md-typeset .doc-heading-parameter{font-size:inherit}.doc-heading-parameter .headerlink,.doc-heading-type_parameter .headerlink{margin-left:0!important;margin-right:.2rem}.doc-section-title{font-weight:700}.doc-signature .autorefs{color:inherit;text-decoration-style:dotted}div.doc-contents:not(.first){border-left:.05rem solid var(--md-code-bg-color);margin-left:.4rem;padding-left:.8rem}:host,:root,[data-md-color-scheme=default]{--doc-symbol-parameter-fg-color:#829bd1;--doc-symbol-type_parameter-fg-color:#829bd1;--doc-symbol-attribute-fg-color:#953800;--doc-symbol-function-fg-color:#8250df;--doc-symbol-method-fg-color:#8250df;--doc-symbol-class-fg-color:#0550ae;--doc-symbol-type_alias-fg-color:#0550ae;--doc-symbol-module-fg-color:#5cad0f}[data-md-color-scheme=slate]{--doc-symbol-parameter-fg-color:#829bd1;--doc-symbol-type_parameter-fg-color:#829bd1;--doc-symbol-attribute-fg-color:#ffa657;--doc-symbol-function-fg-color:#d2a8ff;--doc-symbol-method-fg-color:#d2a8ff;--doc-symbol-class-fg-color:#79c0ff;--doc-symbol-type_alias-fg-color:#79c0ff;--doc-symbol-module-fg-color:#baff79}.md-ellipsis:has(.doc-symbol){font-family:var(--md-code-font-family);font-size:.95em}code.doc-symbol{background-color:initial;border-radius:.1rem;font-size:1em;font-weight:400}a code.doc-symbol-parameter,code.doc-symbol-parameter{color:var(--doc-symbol-parameter-fg-color)}.md-content code.doc-symbol-parameter:after{content:"param"}.md-sidebar code.doc-symbol-parameter:after{content:"p"}a code.doc-symbol-type_parameter,code.doc-symbol-type_parameter{color:var(--doc-symbol-type_parameter-fg-color)}.md-content code.doc-symbol-type_parameter:after{content:"type-param"}.md-sidebar code.doc-symbol-type_parameter:after{content:"t"}a code.doc-symbol-attribute,code.doc-symbol-attribute{color:var(--doc-symbol-attribute-fg-color)}.md-content code.doc-symbol-attribute:after{content:"attribute"}.md-sidebar code.doc-symbol-attribute:after{content:"a"}a code.doc-symbol-function,code.doc-symbol-function{color:var(--doc-symbol-function-fg-color)}.md-content code.doc-symbol-function:after{content:"function"}.md-sidebar code.doc-symbol-function:after{content:"f"}a code.doc-symbol-method,code.doc-symbol-method{color:var(--doc-symbol-method-fg-color)}.md-content code.doc-symbol-method:after{content:"method"}.md-sidebar code.doc-symbol-method:after{content:"m"}a code.doc-symbol-class,code.doc-symbol-class{color:var(--doc-symbol-class-fg-color)}.md-content code.doc-symbol-class:after{content:"class"}.md-sidebar code.doc-symbol-class:after{content:"c"}a code.doc-symbol-type_alias,code.doc-symbol-type_alias{color:var(--doc-symbol-type_alias-fg-color)}.md-content code.doc-symbol-type_alias:after{content:"type"}.md-sidebar code.doc-symbol-type_alias:after{content:"t"}a code.doc-symbol-module,code.doc-symbol-module{color:var(--doc-symbol-module-fg-color)}.md-content code.doc-symbol-module:after{content:"module"}.md-sidebar code.doc-symbol-module:after{content:"mod"}.md-typeset details.mkdocstrings-source{background:#0000;border:.05rem solid var(--md-code-bg-color)}.md-typeset details.mkdocstrings-source>summary:before{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-admonition-icon--mkdocstrings);mask-image:var(--md-admonition-icon--mkdocstrings)}.md-typeset details.mkdocstrings-source[open]>summary:before{-webkit-mask-image:var(--md-admonition-icon--mkdocstrings-open);mask-image:var(--md-admonition-icon--mkdocstrings-open)}.md-typeset details.mkdocstrings-source>summary:after{background-color:var(--md-default-fg-color--light)}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.md-typeset div.arithmatex{margin:0 -.8rem}.md-typeset div.arithmatex>*{width:min-content}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset div.arithmatex mjx-assistive-mml{height:0}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chevron-right" viewBox="0 0 24 24"><path d="m9 18 6-6-6-6"/></svg>')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem;margin-bottom:.6rem}[dir=ltr] .md-typeset summary{padding-right:1.6rem}[dir=rtl] .md-typeset summary{padding-left:1.6rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem;overflow:hidden}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:0}[dir=rtl] .md-typeset summary:after{left:0}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.125em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{--md-icon-size:1.125em;display:inline-flex;height:var(--md-icon-size);vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:var(--md-icon-size)}.md-typeset .emojione svg.lucide,.md-typeset .gemoji svg.lucide,.md-typeset .twemoji svg.lucide{fill:#0000;stroke:currentcolor}.md-typeset .lg,.md-typeset .xl,.md-typeset .xxl,.md-typeset .xxxl{vertical-align:text-bottom}.md-typeset .middle{vertical-align:middle}.md-typeset .lg{--md-icon-size:1.5em}.md-typeset .xl{--md-icon-size:2.25em}.md-typeset .xxl{--md-icon-size:3em}.md-typeset .xxxl{--md-icon-size:4em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.4rem;border-top-right-radius:.4rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code>span[id^=__span]>:last-child .md-annotation{margin-right:2.4rem}.highlight code[data-md-copying]{display:initial}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.4rem;border-top-left-radius:.4rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .linenodiv span[class]{padding-right:.5882352941em}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit;text-decoration:none}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.4rem;border-bottom-right-radius:.4rem;border-top-width:.4rem;margin-top:-1.5em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.984375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.41 16.58 10.83 12l4.58-4.59L14 6l-6 6 6 6z"/></svg>');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>')}.md-typeset .tabbed-set{border-radius:.075rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:"";display:block;height:1.5px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.7rem;font-weight:400;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.md-typeset .tabbed-labels>label>[href]:first-child{color:inherit;text-decoration:none}.md-typeset .tabbed-labels--linked>label{padding:0}.md-typeset .tabbed-labels--linked>label>a{display:block;padding:.78125em 1.25em .625em}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);border-radius:100%;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.4rem;pointer-events:auto;transition:transform 125ms;width:.9rem}.md-typeset .tabbed-button:hover{transform:scale(1.125)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color);font-weight:500}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.md-typeset [role=dialog] .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset [role=dialog] .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset [role=dialog] .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset [role=dialog] .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset [role=dialog] .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset [role=dialog] .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset [role=dialog] .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset [role=dialog] .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset [role=dialog] .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset [role=dialog] .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset [role=dialog] .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset [role=dialog] .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset [role=dialog] .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset [role=dialog] .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset [role=dialog] .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset [role=dialog] .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset [role=dialog] .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset [role=dialog] .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset [role=dialog] .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset [role=dialog] .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),[role=dialog] .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,[role=dialog] .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),[role=dialog] .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),[role=dialog] .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),[role=dialog] .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),[role=dialog] .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),[role=dialog] .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),[role=dialog] .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),[role=dialog] .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),[role=dialog] .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),[role=dialog] .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),[role=dialog] .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),[role=dialog] .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),[role=dialog] .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),[role=dialog] .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),[role=dialog] .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),[role=dialog] .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),[role=dialog] .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),[role=dialog] .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),[role=dialog] .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/></svg>');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-check-big" viewBox="0 0 24 24"><path d="M21.801 10A10 10 0 1 1 17 3.335"/><path d="m9 11 3 3L22 4"/></svg>')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lighter);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.25em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}@media print{.giscus,[id=__comments]{display:none}}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.mermaid{line-height:normal;margin:1em 0}.md-typeset .grid{grid-gap:.4rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));margin:1em 0}.md-typeset .grid.cards>ol,.md-typeset .grid.cards>ul{display:contents}.md-typeset .grid.cards>ol>li,.md-typeset .grid.cards>ul>li,.md-typeset .grid>.card{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.4rem;display:block;margin:0;padding:.8rem;transition:background-color .25s,border .25s,box-shadow .25s}.md-typeset .grid.cards>ol>li:focus-within,.md-typeset .grid.cards>ol>li:hover,.md-typeset .grid.cards>ul>li:focus-within,.md-typeset .grid.cards>ul>li:hover,.md-typeset .grid>.card:focus-within,.md-typeset .grid>.card:hover{border-color:#0000;box-shadow:var(--md-shadow-z2)}.md-typeset .grid.cards>ol>li>hr,.md-typeset .grid.cards>ul>li>hr,.md-typeset .grid>.card>hr{margin-bottom:1em;margin-top:1em}.md-typeset .grid.cards>ol>li>:first-child,.md-typeset .grid.cards>ul>li>:first-child,.md-typeset .grid>.card>:first-child{margin-top:0}.md-typeset .grid.cards>ol>li>:last-child,.md-typeset .grid.cards>ul>li>:last-child,.md-typeset .grid>.card>:last-child{margin-bottom:0}.md-typeset .grid>*,.md-typeset .grid>.admonition,.md-typeset .grid>.highlight>*,.md-typeset .grid>.highlighttable,.md-typeset .grid>.md-typeset details,.md-typeset .grid>details,.md-typeset .grid>pre{margin-bottom:0;margin-top:0}.md-typeset .grid>.highlight>pre:only-child,.md-typeset .grid>.highlight>pre>code,.md-typeset .grid>.highlighttable,.md-typeset .grid>.highlighttable>tbody,.md-typeset .grid>.highlighttable>tbody>tr,.md-typeset .grid>.highlighttable>tbody>tr>.code,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre>code{height:100%}.md-typeset .grid>.tabbed-set{margin-bottom:0;margin-top:0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/site/assets/stylesheets/modern/main.5e19f6ca.min.css b/site/assets/stylesheets/modern/main.5e19f6ca.min.css new file mode 100644 index 000000000..65b48ad1a --- /dev/null +++ b/site/assets/stylesheets/modern/main.5e19f6ca.min.css @@ -0,0 +1 @@ +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008c;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#0000000d;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-bg-color--light:#f5f5f5b3;--md-code-bg-color--lighter:#f5f5f54d;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059;--color-foreground:0 0 0;--color-background:255 255 255;--color-background-subtle:240 240 240;--color-backdrop:255 255 255}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}.md-icon svg.lucide{fill:#0000;stroke:currentcolor}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-down-up" viewBox="0 0 24 24"><path d="m3 16 4 4 4-4m-4 4V4m14 4-4-4-4 4m4-4v16"/></svg>');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-down-narrow-wide" viewBox="0 0 24 24"><path d="m3 16 4 4 4-4m-4 4V4m4 0h4m-4 4h7m-7 4h10"/></svg>');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-up-narrow-wide" viewBox="0 0 24 24"><path d="m3 8 4-4 4 4M7 4v16m4-8h4m-4 4h7m-7 4h10"/></svg>');--md-typeset-preview-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-mouse-pointer-2" viewBox="0 0 24 24"><path d="M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z"/></svg>')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.75rem;letter-spacing:-.01em;line-height:1.8;overflow-wrap:break-word}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color);font-size:1.875em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:700;letter-spacing:-.025em}.md-typeset h2{font-size:1.5em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:700;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset h5 code{text-transform:none}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);text-decoration:underline;word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset a code{color:var(--md-typeset-a-color)}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none;transition:background-color 125ms}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.2rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.8533333333em;padding:.2em .4em;transition:color 125ms,background-color 125ms;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.5;position:relative}.md-typeset pre>code{border-radius:.4rem;-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.8203125em 1.25em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{border-radius:.2rem;box-shadow:0 0 0 .05rem var(--md-typeset-kbd-border-color),0 .15rem 0 var(--md-typeset-kbd-border-color);color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}.md-typeset [data-preview]{position:relative}[dir=ltr] .md-typeset [data-preview]:after{margin-left:.125em}[dir=rtl] .md-typeset [data-preview]:after{margin-right:.125em}.md-typeset [data-preview]:after{background-color:currentcolor;content:"";display:inline-block;height:.8em;-webkit-mask-image:var(--md-typeset-preview-icon);mask-image:var(--md-typeset-preview-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-top;width:.8em}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol ol ol ol,.md-typeset ul ol ol ol{list-style-type:upper-alpha}.md-typeset ol ol ol ol ol,.md-typeset ul ol ol ol ol{list-style-type:upper-roman}.md-typeset ol[type],.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:fit-content}.md-typeset figure img{display:block;margin:0 auto}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-accent-fg-color--transparent);color:var(--md-default-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.no-js .md-banner__button{display:none}.md-banner__button:hover{opacity:.7}html{scrollbar-gutter:stable;font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.984375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-clipboard-copy" viewBox="0 0 24 24"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"/><path d="M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M16 4h2a2 2 0 0 1 2 2v4m1 4H11"/><path d="m15 10-4 4 4 4"/></svg>')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}:root{--md-code-select-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-scan" viewBox="0 0 24 24"><path d="M3 7V5a2 2 0 0 1 2-2h2m10 0h2a2 2 0 0 1 2 2v2m0 10v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2"/></svg>');--md-code-copy-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-clipboard-copy" viewBox="0 0 24 24"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"/><path d="M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M16 4h2a2 2 0 0 1 2 2v4m1 4H11"/><path d="m15 10-4 4 4 4"/></svg>')}.md-typeset .md-code__content{display:grid}.md-code__nav{background-color:var(--md-code-bg-color--lighter);border-radius:.1rem;display:flex;gap:.2rem;padding:.2rem;position:absolute;right:.25em;top:.25em;transition:background-color .25s;z-index:1}:hover>.md-code__nav{background-color:var(--md-code-bg-color--light)}.md-code__button{color:var(--md-default-fg-color--lightest);cursor:pointer;display:block;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em}:hover>*>.md-code__button{color:var(--md-default-fg-color--light)}.md-code__button.focus-visible,.md-code__button:hover{color:var(--md-accent-fg-color)}.md-code__button--active{color:var(--md-default-fg-color)!important}.md-code__button:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-code__button[data-md-type=select]:after{-webkit-mask-image:var(--md-code-select-icon);mask-image:var(--md-code-select-icon)}.md-code__button[data-md-type=copy]:after{-webkit-mask-image:var(--md-code-copy-icon);mask-image:var(--md-code-copy-icon)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .35s both;-webkit-backdrop-filter:blur(.2rem);backdrop-filter:blur(.2rem);background-color:var(--md-default-bg-color--light);height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{bottom:0;display:flex;justify-content:center;max-height:100%;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.8rem;box-shadow:var(--md-shadow-z3);margin:.4rem;overflow:auto;padding-left:1.2rem;padding-right:1.2rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{line-height:1.2;margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.7rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{background-color:var(--md-default-fg-color--lightest);border-radius:.4rem;display:flex;margin-top:.2rem;padding:.3rem}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color);transition:color .25s,background-color .25s}.md-typeset .md-content__button svg{opacity:.5;transition:opacity .25s}.md-typeset .md-content__button:focus,.md-typeset .md-content__button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .md-content__button:focus svg,.md-typeset .md-content__button:hover svg{opacity:1}.md-content__button svg{height:.9rem;width:.9rem}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}.md-content__button svg.lucide{fill:#0000;stroke:currentcolor}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-accent-fg-color);border-radius:1.2rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem 1.2rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{display:flex;flex-wrap:wrap;place-content:baseline center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}@media print{.md-feedback{display:none}}.md-footer{background-color:var(--md-default-bg-color);border-top:.05rem solid var(--md-default-fg-color--lightest);color:var(--md-default-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.8rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.6rem;opacity:.7}.md-footer-meta{background-color:var(--md-default-fg-color--lightest)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a:not(:focus,:hover){color:var(--md-default-fg-color)}.md-copyright{color:var(--md-default-fg-color--light);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-default-fg-color)}.md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-social__link svg.lucide{fill:#0000;stroke:currentcolor}.md-typeset .md-button{background-color:var(--md-default-fg-color--lightest);border-radius:1.2rem;color:var(--md-default-fg-color--light);cursor:pointer;display:inline-block;font-size:.875em;font-weight:700;padding:.625em 2em;text-decoration:none;transition:color 125ms,background-color 125ms,opacity 125ms}.md-typeset .md-button.focus-visible{outline-offset:0}.md-typeset .md-button:focus,.md-typeset .md-button:hover{color:var(--md-default-fg-color--light);opacity:.8}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button--primary:focus,.md-typeset .md-button--primary:hover{color:var(--md-primary-bg-color);opacity:.8}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);color:var(--md-default-fg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1)}.md-header--shadow{box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest);transition:transform .25s cubic-bezier(.1,.7,.1,1)}.md-header__inner{align-items:center;display:flex;padding:0 .4rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo img.lucide,.md-header__button.md-logo svg.lucide{fill:#0000;stroke:currentcolor}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;letter-spacing:-.025em;line-height:2.4rem;margin-left:.4rem;margin-right:.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;white-space:nowrap}.md-header__option>input{bottom:0}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.5rem;width:11.5rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-header .md-icon svg{height:1rem;width:1rem}:root{--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chevron-right" viewBox="0 0 24 24"><path d="m9 18 6-6-6-6"/></svg>')}.md-nav{font-size:.7rem;line-height:1.3;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav .md-nav__title{display:none}.md-nav__list{display:flex;flex-direction:column;gap:.2rem;list-style:none;margin:0;padding:0}[dir=ltr] .md-nav__list .md-nav__list{margin-left:.6rem}[dir=rtl] .md-nav__list .md-nav__list{margin-right:.6rem}.md-nav__item--nested .md-nav__list:after,.md-nav__item--nested .md-nav__list:before{content:" ";display:block;height:0}.md-nav__link{align-items:flex-start;border-radius:.4rem;cursor:pointer;display:flex;gap:.6rem;margin-left:.2rem;margin-right:.2rem;padding:.35rem .8rem;transition:color .25s,background-color .25s}.md-nav__link .md-nav__link{margin:0}.md-nav__link--passed,.md-nav__link--passed code{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{font-weight:500}.md-nav--primary .md-nav__item .md-nav__link--active{background:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-nav__item .md-nav__link--active,.md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.md-nav__item .md-nav__link--active code svg,.md-nav__item .md-nav__link--active svg{opacity:1}[dir=ltr] .md-nav__item--nested>.md-nav__link:not(.md-nav__container){padding-right:.35rem}[dir=rtl] .md-nav__item--nested>.md-nav__link:not(.md-nav__container){padding-left:.35rem}.md-nav__link .md-ellipsis{flex-grow:1;position:relative}.md-nav__link .md-ellipsis code{word-break:normal}.md-nav__link .md-typeset{font-size:.7rem;line-height:1.3}.md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em;opacity:.5;position:relative;width:1.3em}.md-nav__link svg.lucide{fill:#0000;stroke:currentcolor}.md-nav--primary .md-nav__link[for]:focus:not(.md-nav__link--active),.md-nav--primary .md-nav__link[for]:hover:not(.md-nav__link--active),.md-nav--primary .md-nav__link[href]:focus:not(.md-nav__link--active),.md-nav--primary .md-nav__link[href]:hover:not(.md-nav__link--active){background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color)}.md-nav--secondary .md-nav__link{margin-left:.2rem;margin-right:.2rem;overflow-wrap:normal;padding:.35rem .8rem}.md-nav--secondary .md-nav__link[for]:focus,.md-nav--secondary .md-nav__link[for]:hover,.md-nav--secondary .md-nav__link[href]:focus,.md-nav--secondary .md-nav__link[href]:hover{background-color:initial;color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link[for=__toc],.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__icon{font-size:.9rem;height:.9rem;width:.9rem}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;width:100%}@media screen and (min-width:76.25em){.md-nav__item--nested.md-nav__item--section>.md-nav__link .md-nav__icon:after{display:none}}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-toggle--indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav__container{background:#0000;gap:.2rem;padding:0}.md-nav__container>:first-child{flex-grow:1;min-width:0}.md-nav__container>:nth-child(2){padding:.35rem}@media screen and (min-width:76.25em){.md-nav__item--section>.md-nav__container>:nth-child(2){display:none}}.md-nav__container__icon{flex-shrink:0}.md-nav__toggle~.md-nav{display:grid;grid-template-rows:minmax(.005rem,0fr);opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.md-nav__toggle.md-toggle--indeterminate~.md-nav,.md-nav__toggle:checked~.md-nav{grid-template-rows:minmax(.4rem,1fr);opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.md-nav__toggle.md-toggle--indeterminate~.md-nav{transition:none}.md-nav--secondary{margin-bottom:.1rem;margin-top:.1rem}.md-nav--secondary .md-nav{margin-top:.2rem}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);display:flex;font-weight:700;margin-left:.2rem;margin-right:.2rem;padding:.35rem .6rem;position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}.md-nav--secondary .md-nav__link{padding:.2rem .6rem}@media screen and (max-width:76.234375em){.md-nav--primary{margin-bottom:.4rem;margin-left:.2rem;margin-right:.2rem}.md-nav .md-nav__title[for=__drawer]{align-items:center;border-bottom:.05rem solid var(--md-default-fg-color-lightest);display:flex;font-size:.8rem;font-weight:700;gap:.4rem;padding:.8rem}.md-nav .md-nav__title[for=__drawer] .md-logo{height:1.6rem;width:1.6rem}.md-nav .md-nav__title[for=__drawer] .md-logo img,.md-nav .md-nav__title[for=__drawer] .md-logo svg{fill:currentcolor;display:block;height:100%;max-width:100%;object-fit:contain;width:auto}.md-nav .md-nav__title[for=__drawer] .md-logo img.lucide,.md-nav .md-nav__title[for=__drawer] .md-logo svg.lucide{fill:#0000;stroke:currentcolor}}.md-nav__source{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.4rem;margin:.2rem .2rem .6rem;transition:background-color .25s,border-color .25s}.md-nav__source:focus,.md-nav__source:hover{background-color:var(--md-default-fg-color--lightest);border-color:#0000}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{margin-left:1.1rem}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{margin-right:1.1rem}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-default-fg-color--lightest)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-default-fg-color--lightest)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:.5em;margin-top:.5em;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary .md-nav__link{background:#0000}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary .md-nav__link--active{font-weight:500}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary .md-nav__link:focus,.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary .md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{margin-left:0;overflow:visible;padding-bottom:0}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}@media screen and (min-width:76.25em){.md-nav--primary{margin-bottom:.1rem;margin-top:.1rem}.md-nav__source{display:none}[dir=ltr] .md-nav__list .md-nav__item--section>.md-nav>.md-nav__list{margin-left:0}[dir=rtl] .md-nav__list .md-nav__item--section>.md-nav>.md-nav__list{margin-right:0}.md-nav__item--section>.md-nav__link--active,.md-nav__item--section>.md-nav__link>.md-nav__link--active{font-weight:700}.md-nav__item--section{margin-top:.4rem}.md-nav__item--section:first-child{margin-top:0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700}.md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav--lifted{margin-top:0}.md-nav--lifted>.md-nav__list>.md-nav__item{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav{margin-top:.1rem}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav>.md-nav__list:before,.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}.md-nav--lifted .md-nav[data-md-level="1"]{grid-template-rows:minmax(.4rem,1fr);opacity:1;visibility:visible}}:root{--md-path-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chevron-right" viewBox="0 0 24 24"><path d="m9 18 6-6-6-6"/></svg>')}.md-path{font-size:.7rem;margin:.4rem .8rem 0;overflow:auto;padding-top:1.2rem}.md-path:not([hidden]){display:block}@media screen and (min-width:76.25em){.md-path{margin:.4rem 1.2rem 0}}.md-path__list{align-items:center;display:flex;gap:.2rem;list-style:none;margin:0;padding:0}.md-path__item:not(:first-child){align-items:center;display:inline-flex;gap:.2rem;white-space:nowrap}.md-path__item:not(:first-child):before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline;height:.6rem;-webkit-mask-image:var(--md-path-icon);mask-image:var(--md-path-icon);width:.6rem}.md-path__link{align-items:center;color:var(--md-default-fg-color--light);display:flex;transition:color .25s}.md-path__link:focus,.md-path__link:hover{color:var(--md-accent-fg-color)}:root{--md-progress-value:0;--md-progress-delay:400ms}.md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}:root{--md-search-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>')}.md-search{position:relative}@media screen and (min-width:45em){.md-search{padding:.2rem 0}}@media screen and (max-width:59.984375em){.md-search{display:none}}.no-js .md-search{display:none}[dir=ltr] .md-search__button{padding-left:1.9rem;padding-right:2.2rem}[dir=rtl] .md-search__button{padding-left:2.2rem;padding-right:1.9rem}.md-search__button{background:var(--md-default-bg-color);color:var(--md-default-fg-color);cursor:pointer;font-size:.7rem;position:relative;text-align:left}@media screen and (min-width:45em){.md-search__button{background-color:var(--md-default-fg-color--lightest);border-radius:.4rem;height:1.6rem;transition:background-color .4s,color .4s;width:8.9rem}.md-search__button:focus,.md-search__button:hover{background-color:var(--md-default-fg-color--lighter);color:var(--md-default-fg-color)}}[dir=ltr] .md-search__button:before{left:0}[dir=rtl] .md-search__button:before{right:0}.md-search__button:before{background-color:var(--md-default-fg-color);content:"";height:1rem;margin-left:.5rem;-webkit-mask-image:var(--md-search-icon);mask-image:var(--md-search-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.3rem;width:1rem}.md-search__button:after{background:var(--md-default-bg-color--light);border-radius:.2rem;content:"Ctrl+K";display:block;font-size:.6rem;padding:.1rem .2rem;position:absolute;right:.6rem;top:.35rem}[data-platform^=Mac] .md-search__button:after{content:"⌘K"}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.4rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}@media screen and (max-width:59.984375em){.md-select__inner{left:100%;transform:translate3d(-100%,.3rem,0)}}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:min(75vh,28rem);opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}@media screen and (max-width:59.984375em){.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{transform:translate3d(-100%,0,0)}}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";filter:drop-shadow(0 -1px 0 var(--md-default-fg-color--lightest));height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}@media screen and (max-width:59.984375em){.md-select__inner:after{left:auto;right:1rem}}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-toc-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-text-align-start" viewBox="0 0 24 24"><path d="M21 5H3m12 7H3m14 7H3"/></svg>')}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.1rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);border-radius:.8rem;display:block;height:calc(100% - .8rem);position:fixed;top:.4rem;transform:translateX(0);transition:transform .2s cubic-bezier(.5,0,.5,0),box-shadow .2s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.5rem);transition:transform .25s cubic-bezier(.7,.7,.1,1),box-shadow .25s}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.5rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overscroll-behavior-y:contain;position:absolute;right:0;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{order:2}@media screen and (max-width:59.984375em){.md-sidebar--secondary{bottom:1.6rem;padding:0;position:fixed;right:.8rem;top:auto;width:auto;z-index:2}.md-sidebar--secondary .md-nav--secondary{margin-top:0}.md-sidebar--secondary .md-nav__title{padding:.55rem .6rem .35rem}.md-sidebar--secondary .md-sidebar__scrollwrap{display:flex;flex-direction:column-reverse;overflow-y:visible;position:relative}.md-sidebar--secondary .md-sidebar__inner{background-color:var(--md-default-bg-color);border-radius:.4rem;bottom:2.7rem;box-shadow:var(--md-shadow-z2);max-height:50vh;opacity:0;overflow-y:auto;padding-bottom:.4rem;pointer-events:none;position:absolute;right:0;transform:translateY(.4rem);transition:transform 0ms .25s,opacity .25s;width:11.7rem}.md-sidebar--secondary [type=checkbox]:checked~.md-sidebar__inner{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.35,1),opacity .25s,z-index 0ms}.md-sidebar--secondary .md-sidebar-button{-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:inline-flex;font-size:.7rem;gap:.4rem;outline:none;padding:.5rem;transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms}.md-sidebar--secondary .md-sidebar-button:after{background-color:currentcolor;content:"";display:block;height:.9rem;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;width:.9rem}.md-sidebar--secondary .md-sidebar-button:focus,.md-sidebar--secondary .md-sidebar-button:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-sidebar--secondary .md-sidebar-button__wrapper{text-align:right}}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.md-sidebar--secondary .md-sidebar-button{display:none}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{backface-visibility:hidden;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000}@media screen and (min-width:60em){.md-sidebar__scrollwrap{scrollbar-gutter:stable;scrollbar-width:thin}}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar__inner{padding-right:0}[dir=rtl] .md-sidebar__inner{padding-left:0}}}@media screen and (max-width:76.234375em){.md-overlay{-webkit-backdrop-filter:blur(.2rem);backdrop-filter:blur(.2rem);background-color:var(--md-default-bg-color--light);height:0;opacity:0;position:fixed;top:0;transition:width 0ms .5s,height 0ms .5s,opacity .25s 125ms;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-git-fork" viewBox="0 0 24 24"><circle cx="12" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><circle cx="18" cy="6" r="3"/><path d="M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9m6 3v3"/></svg>');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book" viewBox="0 0 24 24"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20"/></svg>');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-star" viewBox="0 0 24 24"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.12 2.12 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.12 2.12 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.12 2.12 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.12 2.12 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.12 2.12 0 0 0 1.597-1.16z"/></svg>');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-tag" viewBox="0 0 24 24"><path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z"/><circle cx="7.5" cy="7.5" r=".5" fill="currentColor"/></svg>')}.md-source{backface-visibility:hidden;display:block;font-size:.55rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}.md-header .md-source__icon svg{height:1.2rem;width:1.2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts 0ms ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact 0ms ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-source-file{margin:1em 0}[dir=ltr] .md-source-file__fact{margin-right:.6rem}[dir=rtl] .md-source-file__fact{margin-left:.6rem}.md-source-file__fact{align-items:center;color:var(--md-default-fg-color--light);display:inline-flex;font-size:.68rem;gap:.3rem}.md-source-file__fact .md-icon{flex-shrink:0;margin-bottom:.05rem}[dir=ltr] .md-source-file__fact .md-author{float:left}[dir=rtl] .md-source-file__fact .md-author{float:right}.md-source-file__fact .md-author{margin-right:.2rem}.md-source-file__fact svg{width:.9rem}:root{--md-status:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-info" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4m0-4h.01"/></svg>');--md-status--new:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-badge-alert" viewBox="0 0 24 24"><path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76M12 8v4m0 4h.01"/></svg>');--md-status--deprecated:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-trash" viewBox="0 0 24 24"><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/></svg>')}.md-status:after{background-color:var(--md-default-fg-color--light);content:"";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.md-status:hover:after{background-color:currentcolor}.md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.md-tabs{box-shadow:0 -.05rem 0 inset var(--md-default-fg-color--lightest);color:var(--md-default-fg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:2}@media print{.md-tabs{display:none}}@media screen and (max-width:76.234375em){.md-tabs{display:none}}.md-header--lifted .md-tabs{box-shadow:none;margin-bottom:-.05rem}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.4rem}[dir=rtl] .md-tabs__list{margin-right:.4rem}.md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__item--active{border-bottom:.05rem solid var(--md-default-fg-color);font-weight:500;position:relative;transition:border-bottom .25s}.md-tabs[hidden] .md-tabs__item--active{border-bottom:.05rem solid #0000}.md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.md-tabs__link{backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}[dir=ltr] .md-tabs__link svg{margin-right:.4rem}[dir=rtl] .md-tabs__link svg{margin-left:.4rem}.md-tabs__link svg{fill:currentcolor;height:1.3em}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m5.41 21 .71-4h-4l.35-2h4l1.06-6h-4l.35-2h4l.71-4h2l-.71 4h6l.71-4h2l-.71 4h4l-.35 2h-4l-1.06 6h4l-.35 2h-4l-.71 4h-2l.71-4h-6l-.71 4zM9.53 9l-1.06 6h6l1.06-6z"/></svg>')}.md-typeset .md-tags:not([hidden]){display:flex;flex-wrap:wrap;gap:.5em;margin-bottom:1.2rem;margin-top:.8rem;padding-top:1.2rem}.md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-shadow{opacity:.5}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}:root{--md-annotation-bg-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>');--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 13h-4v4h-2v-4H7v-2h4V7h2v4h4m-5-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg>')}.md-tooltip{backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.4rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x) - .1rem,100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:calc(var(--md-tooltip-y) - .1rem);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.md-tooltip--inline{font-weight:400;-webkit-user-select:none;user-select:none;width:auto}.md-tooltip--inline:not(.md-tooltip--active){transform:translateY(.2rem) scale(.9)}.md-tooltip--inline .md-tooltip__inner{font-size:.55rem;padding:.2rem .4rem}[hidden]+.md-tooltip--inline{display:none}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-style:normal;font-weight:400;outline:none;text-align:initial;vertical-align:text-bottom;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.md-annotation:not([hidden]){display:inline-block;line-height:1.25}.md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.md-annotation__index{width:2.2ch}[data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.md-annotation__index:after,.md-annotation__index:before{content:"";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.md-typeset .md-annotation-list{counter-reset:annotation;list-style:none!important}.md-typeset .md-annotation-list li{position:relative}[dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}[dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(annotation);counter-increment:annotation;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}:root{--md-tooltip-width:20rem;--md-tooltip-tail:0.3rem}.md-tooltip2{backface-visibility:hidden;color:var(--md-default-fg-color);font-family:var(--md-text-font-family);opacity:0;pointer-events:none;position:absolute;top:calc(var(--md-tooltip-host-y) + var(--md-tooltip-y));transform:translateY(.4rem);transform-origin:calc(var(--md-tooltip-host-x) + var(--md-tooltip-x)) 0;transition:transform 0ms .25s,opacity .25s,z-index .25s;width:100%;z-index:0}.md-tooltip2:before{border-left:var(--md-tooltip-tail) solid #0000;border-right:var(--md-tooltip-tail) solid #0000;content:"";display:block;left:clamp(1.5 * .8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-tail),100vw - 2 * var(--md-tooltip-tail) - 1.5 * .8rem);position:absolute;z-index:1}.md-tooltip2--top:before{border-top:var(--md-tooltip-tail) solid var(--md-default-bg-color);bottom:calc(var(--md-tooltip-tail)*-1 + .025rem);filter:drop-shadow(0 1px 0 var(--md-default-fg-color--lightest))}.md-tooltip2--bottom:before{border-bottom:var(--md-tooltip-tail) solid var(--md-default-bg-color);filter:drop-shadow(0 -1px 0 var(--md-default-fg-color--lightest));top:calc(var(--md-tooltip-tail)*-1 + .025rem)}.md-tooltip2[role=dialog]:after{content:"";display:block;height:.8rem;left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);pointer-events:auto;position:absolute;width:var(--md-tooltip-width);z-index:1}.md-tooltip2[role=dialog].md-tooltip2--top:after{top:100%}.md-tooltip2[role=dialog].md-tooltip2--bottom:after{bottom:100%}.md-tooltip2--active{opacity:1;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.35,1),opacity .25s,z-index 0ms;z-index:4}.md-tooltip2__inner{scrollbar-gutter:stable;background-color:var(--md-default-bg-color);border-radius:.4rem;box-shadow:var(--md-shadow-z2);left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);max-height:40vh;max-width:calc(100vw - 1.6rem);position:relative;scrollbar-width:thin}.md-tooltip2__inner::-webkit-scrollbar{height:.2rem;width:.2rem}.md-tooltip2__inner::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-tooltip2__inner::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}[role=dialog]>.md-tooltip2__inner{font-size:.64rem;overflow:auto;padding:0 .8rem;pointer-events:auto;width:var(--md-tooltip-width)}[role=dialog]>.md-tooltip2__inner:after,[role=dialog]>.md-tooltip2__inner:before{content:"";display:block;height:.8rem;position:sticky;width:100%;z-index:10}[role=dialog]>.md-tooltip2__inner:before{background:linear-gradient(var(--md-default-bg-color),#0000 75%);top:0}[role=dialog]>.md-tooltip2__inner:after{background:linear-gradient(#0000,var(--md-default-bg-color) 75%);bottom:0}[role=tooltip]>.md-tooltip2__inner{font-size:.55rem;font-weight:400;left:clamp(.8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-width)/2,100vw - var(--md-tooltip-width) - .8rem);max-width:min(100vw - 2 * .8rem,400px);padding:.2rem .4rem;-webkit-user-select:none;user-select:none;width:fit-content}.md-tooltip2__inner.md-typeset>:first-child{margin-top:0}.md-tooltip2__inner.md-typeset>:last-child{margin-bottom:0}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);border-radius:1.6rem;bottom:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:flex;font-size:.7rem;gap:.4rem;outline:none;padding:.5rem .9rem .5rem .7rem;position:fixed;top:auto!important;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;height:.9rem;vertical-align:-.5em;width:.9rem}.md-top svg.lucide{fill:#0000;stroke:currentcolor}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">\3c !--! Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192h-256c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 7 34.8l128 128z"/></svg>')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__alias{margin-left:.3rem;opacity:.7}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-typeset .pyodide{background-color:var(--md-code-bg-color);border-radius:.4rem;font-family:var(--md-code-font-family);padding:.7em 1.0666666667em}.md-typeset .pyodide>pre{margin:0}.md-typeset .pyodide-editor{font-size:.8533333333em;margin-bottom:1em;margin-top:1em;width:100%}.md-typeset .pyodide-editor-bar{border-bottom:.05rem solid var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font:monospace;font-size:.75em;margin-bottom:.4rem;padding-bottom:.4rem;width:100%}.md-typeset .pyodide-bar-item{display:inline-block;width:50%}.md-typeset .pyodide-clickable{cursor:pointer;text-align:right}.md-typeset .pyodide-output{background:#0000;border-radius:0;padding:0;width:100%}.md-typeset .pyodide-output code{padding:0}.md-typeset .ace-zensical{background-color:initial;color:var(--md-code-fg-color)}.md-typeset .ace-zensical .ace_gutter{background-color:initial;color:var(--md-default-fg-color--light)}.md-typeset .ace-zensical .ace_gutter-cell{padding-left:0}.md-typeset .ace-zensical .ace_cursor{color:var(--md-code-fg-color)}.md-typeset .ace-zensical .ace_selection{background:var(--md-code-hl-color--light)}.md-typeset .ace-zensical .ace_active-line{background:var(--md-default-fg-color--lightest)}.md-typeset .ace-zensical .ace_comment{color:var(--md-code-hl-comment-color)}.md-typeset .ace-zensical .ace_string{color:var(--md-code-hl-string-color)}.md-typeset .ace-zensical .ace_keyword{color:var(--md-code-hl-keyword-color)}.md-typeset .ace-zensical .ace_identifier{color:var(--md-code-fg-color)}.md-typeset .ace-zensical .ace_variable{color:var(--md-code-hl-variable-color)}.md-typeset .ace-zensical .ace_function{color:var(--md-code-hl-function-color)}.md-typeset .ace-zensical .ace_constant,.md-typeset .ace-zensical .ace_support{color:var(--md-code-hl-constant-color)}.md-typeset .ace-zensical .ace_numeric{color:var(--md-code-hl-number-color)}.md-typeset .ace-zensical .ace_operator{color:var(--md-code-hl-operator-color)}.md-typeset .ace-zensical .ace_punctuation{color:var(--md-code-hl-punctuation-color)}html.glightbox-open{height:100%;overflow:initial}html .gslide .gslide-description,html .gslide .gslide-image img{background:var(--md-default-bg-color)}html .gslide .gslide-description{-webkit-user-select:text;user-select:text}html .gslide .gslide-title{color:var(--md-default-fg-color);font-size:.8rem;margin-bottom:.4rem;margin-top:0}html .gslide .gslide-desc{color:var(--md-default-fg-color--light);font-size:.7rem}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-paperclip" viewBox="0 0 24 24"><path d="m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551"/></svg>');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-notebook-text" viewBox="0 0 24 24"><path d="M2 6h4m-4 4h4m-4 4h4m-4 4h4"/><rect width="16" height="20" x="4" y="2" rx="2"/><path d="M9.5 8h5m-5 4H16m-6.5 4H14"/></svg>');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-info" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4m0-4h.01"/></svg>');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-flame" viewBox="0 0 24 24"><path d="M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4"/></svg>');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-check" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-question-mark" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3m.08 4h.01"/></svg>');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-triangle-alert" viewBox="0 0 24 24"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01"/></svg>');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-octagon-alert" viewBox="0 0 24 24"><path d="M12 16h.01M12 8v4m3.312-10a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z"/></svg>');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-zap" viewBox="0 0 24 24"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"/></svg>');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-bug" viewBox="0 0 24 24"><path d="M12 20v-9m2-4a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4zm.12-3.12L16 2"/><path d="M21 21a4 4 0 0 0-3.81-4M21 5a4 4 0 0 1-3.55 3.97M22 13h-4M3 21a4 4 0 0 1 3.81-4M3 5a4 4 0 0 0 3.55 3.97M6 13H2M8 2l1.88 1.88M9 7.13V6a3 3 0 1 1 6 0v1.13"/></svg>');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-flask-conical" viewBox="0 0 24 24"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2M6.453 15h11.094M8.5 2h7"/></svg>');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-message-square-quote" viewBox="0 0 24 24"><path d="M14 14a2 2 0 0 0 2-2V8h-2"/><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"/><path d="M8 14a2 2 0 0 0 2-2V8H8"/></svg>')}.md-typeset .admonition,.md-typeset details{background-color:#448aff1a;border-radius:.4rem;color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .8rem;page-break-inside:avoid}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:1.6rem;padding-right:.8rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.8rem;padding-right:1.6rem}.md-typeset .admonition-title,.md-typeset summary{font-weight:700;margin-bottom:1em;margin-top:.6rem;position:relative}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:0}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:0}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.125em;width:1rem}.md-typeset .admonition.note,.md-typeset details.note{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-up-to-line" viewBox="0 0 24 24"><path d="M5 3h14m-1 10-6-6-6 6m6-6v14"/></svg>')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateY(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateY(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700;text-decoration:none}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateY(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateY(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateY(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;text-decoration:none;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target{--md-scroll-offset:0.1rem}.md-typeset h3:target,.md-typeset h4:target{--md-scroll-offset:-0.1rem}:root{--md-admonition-icon--mkdocstrings:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-unfold-vertical" viewBox="0 0 24 24"><path d="M12 22v-6m0-8V2M4 12H2m8 0H8m8 0h-2m8 0h-2m-5 7-3 3-3-3m6-14-3-3-3 3"/></svg>');--md-admonition-icon--mkdocstrings-open:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-fold-vertical" viewBox="0 0 24 24"><path d="M12 22v-6m0-8V2M4 12H2m8 0H8m8 0h-2m8 0h-2m-5 7-3-3-3 3m6-14-3 3-3-3"/></svg>')}.doc-object-name{font-family:var(--md-code-font-family)}code.doc-symbol-heading{margin-right:.4rem;padding:0}[dir=ltr] .doc-labels{margin-left:.4rem}[dir=rtl] .doc-labels{margin-right:.4rem}.doc-label code{background:#0000;border:1px solid var(--md-default-fg-color--lightest);border-radius:.5rem;color:var(--md-default-fg-color--light);font-weight:400;padding-left:.3rem;padding-right:.3rem;vertical-align:text-bottom}.doc-contents td code{word-break:normal!important}.doc-md-description,.doc-md-description>p:first-child{display:inline}.md-typeset h5 .doc-object-name{text-transform:none}.doc .md-typeset__table,.doc .md-typeset__table table{display:table!important;width:100%}.doc .md-typeset__table tr{display:table-row}.doc-param-default,.doc-type_param-default{float:right}.doc-heading-parameter,.doc-heading-type_parameter{display:inline}.md-typeset .doc-heading-parameter{font-size:inherit}.doc-heading-parameter .headerlink,.doc-heading-type_parameter .headerlink{margin-left:0!important;margin-right:.2rem}.doc-section-title{font-weight:700}.doc-signature .autorefs{color:inherit;text-decoration-style:dotted}div.doc-contents:not(.first){border-left:.05rem solid var(--md-code-bg-color);margin-left:.4rem;padding-left:.8rem}:host,:root,[data-md-color-scheme=default]{--doc-symbol-parameter-fg-color:#829bd1;--doc-symbol-type_parameter-fg-color:#829bd1;--doc-symbol-attribute-fg-color:#953800;--doc-symbol-function-fg-color:#8250df;--doc-symbol-method-fg-color:#8250df;--doc-symbol-class-fg-color:#0550ae;--doc-symbol-type_alias-fg-color:#0550ae;--doc-symbol-module-fg-color:#5cad0f}[data-md-color-scheme=slate]{--doc-symbol-parameter-fg-color:#829bd1;--doc-symbol-type_parameter-fg-color:#829bd1;--doc-symbol-attribute-fg-color:#ffa657;--doc-symbol-function-fg-color:#d2a8ff;--doc-symbol-method-fg-color:#d2a8ff;--doc-symbol-class-fg-color:#79c0ff;--doc-symbol-type_alias-fg-color:#79c0ff;--doc-symbol-module-fg-color:#baff79}.md-ellipsis:has(.doc-symbol){font-family:var(--md-code-font-family);font-size:.95em}code.doc-symbol{background-color:initial;border-radius:.1rem;font-size:1em;font-weight:400}a code.doc-symbol-parameter,code.doc-symbol-parameter{color:var(--doc-symbol-parameter-fg-color)}.md-content code.doc-symbol-parameter:after{content:"param"}.md-sidebar code.doc-symbol-parameter:after{content:"p"}a code.doc-symbol-type_parameter,code.doc-symbol-type_parameter{color:var(--doc-symbol-type_parameter-fg-color)}.md-content code.doc-symbol-type_parameter:after{content:"type-param"}.md-sidebar code.doc-symbol-type_parameter:after{content:"t"}a code.doc-symbol-attribute,code.doc-symbol-attribute{color:var(--doc-symbol-attribute-fg-color)}.md-content code.doc-symbol-attribute:after{content:"attribute"}.md-sidebar code.doc-symbol-attribute:after{content:"a"}a code.doc-symbol-function,code.doc-symbol-function{color:var(--doc-symbol-function-fg-color)}.md-content code.doc-symbol-function:after{content:"function"}.md-sidebar code.doc-symbol-function:after{content:"f"}a code.doc-symbol-method,code.doc-symbol-method{color:var(--doc-symbol-method-fg-color)}.md-content code.doc-symbol-method:after{content:"method"}.md-sidebar code.doc-symbol-method:after{content:"m"}a code.doc-symbol-class,code.doc-symbol-class{color:var(--doc-symbol-class-fg-color)}.md-content code.doc-symbol-class:after{content:"class"}.md-sidebar code.doc-symbol-class:after{content:"c"}a code.doc-symbol-type_alias,code.doc-symbol-type_alias{color:var(--doc-symbol-type_alias-fg-color)}.md-content code.doc-symbol-type_alias:after{content:"type"}.md-sidebar code.doc-symbol-type_alias:after{content:"t"}a code.doc-symbol-module,code.doc-symbol-module{color:var(--doc-symbol-module-fg-color)}.md-content code.doc-symbol-module:after{content:"module"}.md-sidebar code.doc-symbol-module:after{content:"mod"}.md-typeset details.mkdocstrings-source{background:#0000;border:.05rem solid var(--md-code-bg-color)}.md-typeset details.mkdocstrings-source>summary:before{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-admonition-icon--mkdocstrings);mask-image:var(--md-admonition-icon--mkdocstrings)}.md-typeset details.mkdocstrings-source[open]>summary:before{-webkit-mask-image:var(--md-admonition-icon--mkdocstrings-open);mask-image:var(--md-admonition-icon--mkdocstrings-open)}.md-typeset details.mkdocstrings-source>summary:after{background-color:var(--md-default-fg-color--light)}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.md-typeset div.arithmatex{margin:0 -.8rem}.md-typeset div.arithmatex>*{width:min-content}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset div.arithmatex mjx-assistive-mml{height:0}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chevron-right" viewBox="0 0 24 24"><path d="m9 18 6-6-6-6"/></svg>')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem;margin-bottom:.6rem}[dir=ltr] .md-typeset summary{padding-right:1.6rem}[dir=rtl] .md-typeset summary{padding-left:1.6rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem;overflow:hidden}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:0}[dir=rtl] .md-typeset summary:after{left:0}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.125em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{--md-icon-size:1.125em;display:inline-flex;height:var(--md-icon-size);vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:var(--md-icon-size)}.md-typeset .emojione svg.lucide,.md-typeset .gemoji svg.lucide,.md-typeset .twemoji svg.lucide{fill:#0000;stroke:currentcolor}.md-typeset .lg,.md-typeset .xl,.md-typeset .xxl,.md-typeset .xxxl{vertical-align:text-bottom}.md-typeset .middle{vertical-align:middle}.md-typeset .lg{--md-icon-size:1.5em}.md-typeset .xl{--md-icon-size:2.25em}.md-typeset .xxl{--md-icon-size:3em}.md-typeset .xxxl{--md-icon-size:4em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.4rem;border-top-right-radius:.4rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code>span[id^=__span]>:last-child .md-annotation{margin-right:2.4rem}.highlight code[data-md-copying]{display:initial}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.4rem;font-size:.85em;padding:.8203125em 0 .8203125em 1.25em;-webkit-user-select:none;user-select:none}.highlighttable tr:first-child>.linenos{border-top-left-radius:.4rem}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .linenodiv span[class]{padding-right:.5882352941em}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit;text-decoration:none}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlighttable>tbody>tr:nth-child(2)>.code>div>pre>code{border-top-right-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.4rem;border-bottom-right-radius:.4rem;border-top-width:.4rem;margin-top:-1.5em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.984375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.41 16.58 10.83 12l4.58-4.59L14 6l-6 6 6 6z"/></svg>');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>')}.md-typeset .tabbed-set{border-radius:.075rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:"";display:block;height:1.5px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.7rem;font-weight:400;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.md-typeset .tabbed-labels>label>[href]:first-child{color:inherit;text-decoration:none}.md-typeset .tabbed-labels--linked>label{padding:0}.md-typeset .tabbed-labels--linked>label>a{display:block;padding:.78125em 1.25em .625em}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;-webkit-backdrop-filter:blur(.4rem);backdrop-filter:blur(.4rem);background-color:var(--md-default-bg-color--light);border-radius:100%;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.4rem;pointer-events:auto;transition:transform 125ms;width:.9rem}.md-typeset .tabbed-button:hover{transform:scale(1.125)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color);font-weight:500}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.md-typeset [role=dialog] .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset [role=dialog] .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset [role=dialog] .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset [role=dialog] .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset [role=dialog] .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset [role=dialog] .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset [role=dialog] .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset [role=dialog] .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset [role=dialog] .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset [role=dialog] .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset [role=dialog] .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset [role=dialog] .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset [role=dialog] .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset [role=dialog] .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset [role=dialog] .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset [role=dialog] .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset [role=dialog] .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset [role=dialog] .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset [role=dialog] .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset [role=dialog] .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),[role=dialog] .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,[role=dialog] .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),[role=dialog] .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),[role=dialog] .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),[role=dialog] .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),[role=dialog] .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),[role=dialog] .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),[role=dialog] .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),[role=dialog] .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),[role=dialog] .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),[role=dialog] .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),[role=dialog] .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),[role=dialog] .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),[role=dialog] .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),[role=dialog] .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),[role=dialog] .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),[role=dialog] .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),[role=dialog] .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),[role=dialog] .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),[role=dialog] .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/></svg>');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-check-big" viewBox="0 0 24 24"><path d="M21.801 10A10 10 0 1 1 17 3.335"/><path d="m9 11 3 3L22 4"/></svg>')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lighter);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.25em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}@media print{.giscus,[id=__comments]{display:none}}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.mermaid{line-height:normal;margin:1em 0}.md-typeset .grid{grid-gap:.4rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));margin:1em 0}.md-typeset .grid.cards>ol,.md-typeset .grid.cards>ul{display:contents}.md-typeset .grid.cards>ol>li,.md-typeset .grid.cards>ul>li,.md-typeset .grid>.card{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.4rem;display:block;margin:0;padding:.8rem;transition:background-color .25s,border .25s,box-shadow .25s}.md-typeset .grid.cards>ol>li:focus-within,.md-typeset .grid.cards>ol>li:hover,.md-typeset .grid.cards>ul>li:focus-within,.md-typeset .grid.cards>ul>li:hover,.md-typeset .grid>.card:focus-within,.md-typeset .grid>.card:hover{border-color:#0000;box-shadow:var(--md-shadow-z2)}.md-typeset .grid.cards>ol>li>hr,.md-typeset .grid.cards>ul>li>hr,.md-typeset .grid>.card>hr{margin-bottom:1em;margin-top:1em}.md-typeset .grid.cards>ol>li>:first-child,.md-typeset .grid.cards>ul>li>:first-child,.md-typeset .grid>.card>:first-child{margin-top:0}.md-typeset .grid.cards>ol>li>:last-child,.md-typeset .grid.cards>ul>li>:last-child,.md-typeset .grid>.card>:last-child{margin-bottom:0}.md-typeset .grid>*,.md-typeset .grid>.admonition,.md-typeset .grid>.highlight>*,.md-typeset .grid>.highlighttable,.md-typeset .grid>.md-typeset details,.md-typeset .grid>details,.md-typeset .grid>pre{margin-bottom:0;margin-top:0}.md-typeset .grid>.highlight>pre:only-child,.md-typeset .grid>.highlight>pre>code,.md-typeset .grid>.highlighttable,.md-typeset .grid>.highlighttable>tbody,.md-typeset .grid>.highlighttable>tbody>tr,.md-typeset .grid>.highlighttable>tbody>tr>.code,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre>code{height:100%}.md-typeset .grid>.tabbed-set{margin-bottom:0;margin-top:0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/site/blog/2026-01-27-building-ctx-using-ctx/index.html b/site/blog/2026-01-27-building-ctx-using-ctx/index.html index b8351796f..b8d9230ce 100644 --- a/site/blog/2026-01-27-building-ctx-using-ctx/index.html +++ b/site/blog/2026-01-27-building-ctx-using-ctx/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1849,7 +1857,7 @@ <h2 id="conclusion">Conclusion<a class="headerlink" href="#conclusion" title="Pe <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-01-ctx-v0.2.0-the-archaeology-release/index.html b/site/blog/2026-02-01-ctx-v0.2.0-the-archaeology-release/index.html index 28b09d275..fa2cbfa60 100644 --- a/site/blog/2026-02-01-ctx-v0.2.0-the-archaeology-release/index.html +++ b/site/blog/2026-02-01-ctx-v0.2.0-the-archaeology-release/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1803,7 +1811,7 @@ <h2 id="get-started">Get Started<a class="headerlink" href="#get-started" title= <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-01-refactoring-with-intent/index.html b/site/blog/2026-02-01-refactoring-with-intent/index.html index eec4c43c5..a34d89da5 100644 --- a/site/blog/2026-02-01-refactoring-with-intent/index.html +++ b/site/blog/2026-02-01-refactoring-with-intent/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1799,7 +1807,7 @@ <h2 id="the-meta-continues">The Meta Continues<a class="headerlink" href="#the-m <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-03-the-attention-budget/index.html b/site/blog/2026-02-03-the-attention-budget/index.html index 148572d94..b8eb12099 100644 --- a/site/blog/2026-02-03-the-attention-budget/index.html +++ b/site/blog/2026-02-03-the-attention-budget/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1736,7 +1744,7 @@ <h2 id="the-mental-model">The Mental Model<a class="headerlink" href="#the-menta <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-04-skills-that-fight-the-platform/index.html b/site/blog/2026-02-04-skills-that-fight-the-platform/index.html index 1f7a1a727..17dcb36ca 100644 --- a/site/blog/2026-02-04-skills-that-fight-the-platform/index.html +++ b/site/blog/2026-02-04-skills-that-fight-the-platform/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1745,7 +1753,7 @@ <h2 id="the-meta-lesson">The Meta-Lesson<a class="headerlink" href="#the-meta-le <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-05-you-cant-import-expertise/index.html b/site/blog/2026-02-05-you-cant-import-expertise/index.html index 0ffef2deb..edd3afdf4 100644 --- a/site/blog/2026-02-05-you-cant-import-expertise/index.html +++ b/site/blog/2026-02-05-you-cant-import-expertise/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1734,7 +1742,7 @@ <h2 id="what-good-adaptation-looks-like">What Good Adaptation Looks Like<a class <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-07-the-anatomy-of-a-skill-that-works/index.html b/site/blog/2026-02-07-the-anatomy-of-a-skill-that-works/index.html index fcf5a6e21..e9da15939 100644 --- a/site/blog/2026-02-07-the-anatomy-of-a-skill-that-works/index.html +++ b/site/blog/2026-02-07-the-anatomy-of-a-skill-that-works/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1713,7 +1721,7 @@ <h2 id="the-meta-lesson">The Meta-Lesson<a class="headerlink" href="#the-meta-le <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-08-not-everything-is-a-skill/index.html b/site/blog/2026-02-08-not-everything-is-a-skill/index.html index 8ed729bdb..1588ab99e 100644 --- a/site/blog/2026-02-08-not-everything-is-a-skill/index.html +++ b/site/blog/2026-02-08-not-everything-is-a-skill/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1751,7 +1759,7 @@ <h2 id="this-mindset-in-the-context-of-ctx">This Mindset in the Context of <code <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-09-defense-in-depth-securing-ai-agents/index.html b/site/blog/2026-02-09-defense-in-depth-securing-ai-agents/index.html index aefcb4913..fce04085b 100644 --- a/site/blog/2026-02-09-defense-in-depth-securing-ai-agents/index.html +++ b/site/blog/2026-02-09-defense-in-depth-securing-ai-agents/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1749,7 +1757,7 @@ <h2 id="what-changed-in-ctx">What Changed in <code>ctx</code><a class="headerlin <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-12-how-deep-is-too-deep/index.html b/site/blog/2026-02-12-how-deep-is-too-deep/index.html index 4a9331a34..2337e51b0 100644 --- a/site/blog/2026-02-12-how-deep-is-too-deep/index.html +++ b/site/blog/2026-02-12-how-deep-is-too-deep/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1683,7 +1691,7 @@ <h2 id="closing-thought">Closing Thought<a class="headerlink" href="#closing-tho <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-14-irc-as-context/index.html b/site/blog/2026-02-14-irc-as-context/index.html index 68d364514..dc1365320 100644 --- a/site/blog/2026-02-14-irc-as-context/index.html +++ b/site/blog/2026-02-14-irc-as-context/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1563,7 +1571,7 @@ <h2 id="motd">MOTD<a class="headerlink" href="#motd" title="Permanent link">&par <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-14-parallel-agents-with-worktrees/index.html b/site/blog/2026-02-14-parallel-agents-with-worktrees/index.html index 73fc87b82..30192be9b 100644 --- a/site/blog/2026-02-14-parallel-agents-with-worktrees/index.html +++ b/site/blog/2026-02-14-parallel-agents-with-worktrees/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1589,7 +1597,7 @@ <h2 id="the-takeaway">The Takeaway<a class="headerlink" href="#the-takeaway" tit <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-15-ctx-v0.3.0-the-discipline-release/index.html b/site/blog/2026-02-15-ctx-v0.3.0-the-discipline-release/index.html index b5e8ecdbe..57db67f63 100644 --- a/site/blog/2026-02-15-ctx-v0.3.0-the-discipline-release/index.html +++ b/site/blog/2026-02-15-ctx-v0.3.0-the-discipline-release/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1656,7 +1664,7 @@ <h2 id="what-comes-next">What Comes Next<a class="headerlink" href="#what-comes- <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-15-eight-ways-a-hook-can-talk/index.html b/site/blog/2026-02-15-eight-ways-a-hook-can-talk/index.html index 6d63186a5..b583a0659 100644 --- a/site/blog/2026-02-15-eight-ways-a-hook-can-talk/index.html +++ b/site/blog/2026-02-15-eight-ways-a-hook-can-talk/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1463,7 +1471,7 @@ <h2 id="the-principle">The Principle<a class="headerlink" href="#the-principle" <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-15-why-zensical/index.html b/site/blog/2026-02-15-why-zensical/index.html index 8006a38e7..33b34e2f7 100644 --- a/site/blog/2026-02-15-why-zensical/index.html +++ b/site/blog/2026-02-15-why-zensical/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1721,7 +1729,7 @@ <h2 id="the-broader-pattern">The Broader Pattern<a class="headerlink" href="#the <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-16-ctx-v0.6.0-the-integration-release/index.html b/site/blog/2026-02-16-ctx-v0.6.0-the-integration-release/index.html index d60716de6..bb270987a 100644 --- a/site/blog/2026-02-16-ctx-v0.6.0-the-integration-release/index.html +++ b/site/blog/2026-02-16-ctx-v0.6.0-the-integration-release/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1672,7 +1680,7 @@ <h2 id="what-comes-next">What Comes Next<a class="headerlink" href="#what-comes- <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-17-code-is-cheap-judgment-is-not/index.html b/site/blog/2026-02-17-code-is-cheap-judgment-is-not/index.html index 1d90e5ca0..b730d9352 100644 --- a/site/blog/2026-02-17-code-is-cheap-judgment-is-not/index.html +++ b/site/blog/2026-02-17-code-is-cheap-judgment-is-not/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1707,7 +1715,7 @@ <h2 id="the-arc">The Arc<a class="headerlink" href="#the-arc" title="Permanent l <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-17-context-as-infrastructure/index.html b/site/blog/2026-02-17-context-as-infrastructure/index.html index 43b8b6134..3b27526d3 100644 --- a/site/blog/2026-02-17-context-as-infrastructure/index.html +++ b/site/blog/2026-02-17-context-as-infrastructure/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1831,7 +1839,7 @@ <h2 id="the-arc">The Arc<a class="headerlink" href="#the-arc" title="Permanent l <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-17-parallel-agents-merge-debt-and-the-myth-of-overnight-progress/index.html b/site/blog/2026-02-17-parallel-agents-merge-debt-and-the-myth-of-overnight-progress/index.html index 75d32ece3..ff25f3bdb 100644 --- a/site/blog/2026-02-17-parallel-agents-merge-debt-and-the-myth-of-overnight-progress/index.html +++ b/site/blog/2026-02-17-parallel-agents-merge-debt-and-the-myth-of-overnight-progress/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1756,7 +1764,7 @@ <h2 id="practical-summary">Practical Summary<a class="headerlink" href="#practic <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-17-the-3-1-ratio/index.html b/site/blog/2026-02-17-the-3-1-ratio/index.html index c41e96eed..5f571034b 100644 --- a/site/blog/2026-02-17-the-3-1-ratio/index.html +++ b/site/blog/2026-02-17-the-3-1-ratio/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1781,7 +1789,7 @@ <h2 id="the-arc-so-far">The Arc so Far<a class="headerlink" href="#the-arc-so-fa <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-17-when-a-system-starts-explaining-itself/index.html b/site/blog/2026-02-17-when-a-system-starts-explaining-itself/index.html index 724b4fff7..fef5744e1 100644 --- a/site/blog/2026-02-17-when-a-system-starts-explaining-itself/index.html +++ b/site/blog/2026-02-17-when-a-system-starts-explaining-itself/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1607,7 +1615,7 @@ <h2 id="the-arc">The Arc<a class="headerlink" href="#the-arc" title="Permanent l <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-25-the-homework-problem/index.html b/site/blog/2026-02-25-the-homework-problem/index.html index 7f6386f7f..a36c4d6b9 100644 --- a/site/blog/2026-02-25-the-homework-problem/index.html +++ b/site/blog/2026-02-25-the-homework-problem/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -2443,7 +2451,7 @@ <h3 id="putting-it-all-together">Putting It All Together<a class="headerlink" hr <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-02-28-the-last-question/index.html b/site/blog/2026-02-28-the-last-question/index.html index 7371e6c7f..d06a1a550 100644 --- a/site/blog/2026-02-28-the-last-question/index.html +++ b/site/blog/2026-02-28-the-last-question/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1542,7 +1550,7 @@ <h2 id="the-arc">The Arc<a class="headerlink" href="#the-arc" title="Permanent l <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-03-04-agent-memory-is-infrastructure/index.html b/site/blog/2026-03-04-agent-memory-is-infrastructure/index.html index 3e1b02c74..a24ca9711 100644 --- a/site/blog/2026-03-04-agent-memory-is-infrastructure/index.html +++ b/site/blog/2026-03-04-agent-memory-is-infrastructure/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1734,7 +1742,7 @@ <h2 id="the-arc">The Arc<a class="headerlink" href="#the-arc" title="Permanent l <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-03-23-ctx-v0.8.0-the-architecture-release/index.html b/site/blog/2026-03-23-ctx-v0.8.0-the-architecture-release/index.html index 80eb4a192..26e4551a0 100644 --- a/site/blog/2026-03-23-ctx-v0.8.0-the-architecture-release/index.html +++ b/site/blog/2026-03-23-ctx-v0.8.0-the-architecture-release/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1790,7 +1798,7 @@ <h2 id="the-arc">The Arc<a class="headerlink" href="#the-arc" title="Permanent l <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-03-23-we-broke-the-3-1-rule/index.html b/site/blog/2026-03-23-we-broke-the-3-1-rule/index.html index f78250123..a944b7c72 100644 --- a/site/blog/2026-03-23-we-broke-the-3-1-rule/index.html +++ b/site/blog/2026-03-23-we-broke-the-3-1-rule/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1687,7 +1695,7 @@ <h2 id="the-arc">The Arc<a class="headerlink" href="#the-arc" title="Permanent l <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-04-02-code-structure-as-an-agent-interface/index.html b/site/blog/2026-04-02-code-structure-as-an-agent-interface/index.html index 690683b47..95d0a738e 100644 --- a/site/blog/2026-04-02-code-structure-as-an-agent-interface/index.html +++ b/site/blog/2026-04-02-code-structure-as-an-agent-interface/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1904,7 +1912,7 @@ <h2 id="whats-next">What's Next<a class="headerlink" href="#whats-next" title="P <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-04-06-the-watermelon-rind-anti-pattern/index.html b/site/blog/2026-04-06-the-watermelon-rind-anti-pattern/index.html index 477af5fff..fd0b46198 100644 --- a/site/blog/2026-04-06-the-watermelon-rind-anti-pattern/index.html +++ b/site/blog/2026-04-06-the-watermelon-rind-anti-pattern/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -1524,7 +1532,7 @@ <h2 id="takeaway">Takeaway<a class="headerlink" href="#takeaway" title="Permanen <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/2026-06-21-the-cheapest-patch-was-the-most-expensive/index.html b/site/blog/2026-06-21-the-cheapest-patch-was-the-most-expensive/index.html index 9b29ea055..b330c7ff4 100644 --- a/site/blog/2026-06-21-the-cheapest-patch-was-the-most-expensive/index.html +++ b/site/blog/2026-06-21-the-cheapest-patch-was-the-most-expensive/index.html @@ -21,7 +21,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +32,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +313,8 @@ + + @@ -397,6 +399,8 @@ + + @@ -746,6 +750,8 @@ + + @@ -890,6 +896,8 @@ + + @@ -2188,7 +2196,7 @@ <h2 id="where-this-connects">Where This Connects<a class="headerlink" href="#whe <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/blog/index.html b/site/blog/index.html index d52e38b42..3b18b8121 100644 --- a/site/blog/index.html +++ b/site/blog/index.html @@ -25,7 +25,7 @@ <link rel="icon" href="../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -36,7 +36,7 @@ - <link rel="stylesheet" href="../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -319,6 +319,8 @@ + + @@ -403,6 +405,8 @@ + + @@ -768,6 +772,8 @@ + + @@ -912,6 +918,8 @@ + + @@ -2024,7 +2032,7 @@ <h3 id="building-ctx-using-ctx-a-meta-experiment-in-ai-assisted-development"><a <script id="__config" type="application/json">{"annotate":null,"base":"..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/cli/bootstrap/index.html b/site/cli/bootstrap/index.html index a57087469..3871e65b6 100644 --- a/site/cli/bootstrap/index.html +++ b/site/cli/bootstrap/index.html @@ -15,13 +15,17 @@ <link rel="canonical" href="https://ctx.ist/cli/bootstrap/"> + <link rel="prev" href="../system/"> + + + <link rel="next" href="../completion/"> <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -32,7 +36,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -313,6 +317,8 @@ + + @@ -336,6 +342,8 @@ + + @@ -362,7 +370,7 @@ - <li class="md-tabs__item"> + <li class="md-tabs__item md-tabs__item--active"> <a href="../" class="md-tabs__link"> @@ -397,6 +405,8 @@ + + @@ -746,6 +756,8 @@ + + @@ -798,6 +810,8 @@ + + @@ -814,6 +828,78 @@ + + + + + + + + + + + + + + + + + + + + <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> + + + + <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked> + + + <div class="md-nav__link md-nav__container"> + <a href="../" class="md-nav__link "> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-terminal" viewBox="0 0 24 24"><path d="M12 19h8M4 17l6-6-6-6"/></svg> + + <span class="md-ellipsis"> + + + CLI + + + </span> + + + + </a> + + + <label class="md-nav__link " for="__nav_6" id="__nav_6_label" tabindex=""> + <span class="md-nav__icon md-icon"></span> + </label> + + </div> + + <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true"> + <label class="md-nav__title" for="__nav_6"> + <span class="md-nav__icon md-icon"></span> + + + CLI + + </label> + <ul class="md-nav__list" data-md-scrollfix> + + + + + + + + + + + @@ -839,16 +925,14 @@ - <a href="../" class="md-nav__link"> + <a href="../init-status/" class="md-nav__link"> - <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-terminal" viewBox="0 0 24 24"><path d="M12 19h8M4 17l6-6-6-6"/></svg> - <span class="md-ellipsis"> - CLI + Getting Started </span> @@ -865,9 +949,10 @@ </li> - - - + + + + @@ -876,14 +961,6 @@ - - - - - - - - @@ -911,16 +988,14 @@ - <a href="../../reference/" class="md-nav__link"> + <a href="../context/" class="md-nav__link"> - <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg> - <span class="md-ellipsis"> - Reference + Context </span> @@ -937,9 +1012,10 @@ </li> - - - + + + + @@ -948,7 +1024,9 @@ - + + + @@ -977,16 +1055,14 @@ - <a href="../../operations/" class="md-nav__link"> + <a href="../journal/" class="md-nav__link"> - <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-settings" viewBox="0 0 24 24"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"/><circle cx="12" cy="12" r="3"/></svg> - <span class="md-ellipsis"> - Operations + Sessions </span> @@ -1003,9 +1079,10 @@ </li> - - - + + + + @@ -1014,7 +1091,17 @@ - + + + + + + + + + + + @@ -1043,16 +1130,14 @@ - <a href="../../security/" class="md-nav__link"> + <a href="../setup/" class="md-nav__link"> - <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-shield-check" viewBox="0 0 24 24"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/><path d="m9 12 2 2 4-4"/></svg> - <span class="md-ellipsis"> - Security + Integrations </span> @@ -1069,104 +1154,872 @@ </li> - - </ul> -</nav> - </div> - </div> - </div> - + - <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > - <div class="md-sidebar__scrollwrap"> - - - - - - <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> - <div class="md-sidebar-button__wrapper"> - <label class="md-sidebar-button" for="__toc"></label> - </div> - - - <div class="md-sidebar__inner"> - - - -<nav class="md-nav md-nav--secondary" aria-label="On this page"> + - <label class="md-nav__title" for="__toc"> - <span class="md-nav__icon md-icon"></span> - On this page - </label> - <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> + + - <li class="md-nav__item"> - <a href="#ctx-system-bootstrap" class="md-nav__link"> - <span class="md-ellipsis"> - <span class="md-typeset"> - <code>ctx system bootstrap</code> - </span> - </span> - </a> + + + + + + + + + + + + + + + + + + + + + <li class="md-nav__item md-nav__item--pruned md-nav__item--nested"> + + -</li> + + + <a href="../doctor/" class="md-nav__link"> - </ul> -</nav> - </div> - </div> - </div> - - - - <div class="md-content" data-md-component="content"> - - - + + <span class="md-ellipsis"> + + + Diagnostics + + </span> + + + + <span class="md-nav__icon md-icon"></span> + + </a> + + </li> + - <article class="md-content__inner md-typeset"> + + - - - - <h1 id="__skip">System Bootstrap</h1> - -<p><img alt="ctx" src="../../images/ctx-banner.png" /></p> -<h3 id="ctx-system-bootstrap"><code>ctx system bootstrap</code><a class="headerlink" href="#ctx-system-bootstrap" title="Permanent link">¶</a></h3> -<p>Print the resolved context directory path so AI agents can anchor -their session. The default output lists the context directory, the -tracked context files, and a short health snapshot. <code>--quiet</code> prints -just the path; <code>--json</code> produces structured output for automation.</p> -<p>This is a hidden, agent-only command that agents are instructed to -run first in their session-start procedure; it is the authoritative -answer to "where does this project's context live?".</p> -<div class="language-bash highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>ctx<span class="w"> </span>system<span class="w"> </span>bootstrap<span class="w"> </span><span class="o">[</span>flags<span class="o">]</span> -</span></code></pre></div> -<p><strong>Flags</strong>:</p> -<table> -<thead> -<tr> -<th>Flag</th> -<th>Description</th> -</tr> -</thead> -<tbody> -<tr> -<td><code>-q</code>, <code>--quiet</code></td> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li class="md-nav__item md-nav__item--active md-nav__item--nested"> + + + + <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" checked> + + + <label class="md-nav__link" for="__nav_6_7" id="__nav_6_7_label" tabindex="0"> + + + + <span class="md-ellipsis"> + + + Runtime + + + </span> + + + + <span class="md-nav__icon md-icon"></span> + </label> + + <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="true"> + <label class="md-nav__title" for="__nav_6_7"> + <span class="md-nav__icon md-icon"></span> + + + Runtime + + </label> + <ul class="md-nav__list" data-md-scrollfix> + + + + + + + + <li class="md-nav__item"> + <a href="../config/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-settings-2" viewBox="0 0 24 24"><path d="M14 17H5M19 7h-9"/><circle cx="17" cy="17" r="3"/><circle cx="7" cy="7" r="3"/></svg> + + <span class="md-ellipsis"> + + + Config + + + </span> + + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../prune/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-trash-2" viewBox="0 0 24 24"><path d="M10 11v6M14 11v6M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/></svg> + + <span class="md-ellipsis"> + + + Prune + + + </span> + + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../hook/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-webhook" viewBox="0 0 24 24"><path d="M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2"/><path d="m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06"/><path d="m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8"/></svg> + + <span class="md-ellipsis"> + + + Hook + + + </span> + + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../event/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-scroll-text" viewBox="0 0 24 24"><path d="M15 12h-5M15 8h-5M19 17V5a2 2 0 0 0-2-2H4"/><path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3"/></svg> + + <span class="md-ellipsis"> + + + Event + + + </span> + + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../message/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-message-square-text" viewBox="0 0 24 24"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2zM7 11h10M7 15h6M7 7h8"/></svg> + + <span class="md-ellipsis"> + + + Message + + + </span> + + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../system/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-settings" viewBox="0 0 24 24"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"/><circle cx="12" cy="12" r="3"/></svg> + + <span class="md-ellipsis"> + + + System + + + </span> + + + + </a> + </li> + + + + + + + + + + + + + <li class="md-nav__item md-nav__item--active"> + + + + + + <label class="md-nav__link md-nav__link--active" for="__toc"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-compass" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"/></svg> + + <span class="md-ellipsis"> + + + System Bootstrap + + + </span> + + + + <span class="md-nav__icon md-icon"></span> + </label> + + <a href="././" class="md-nav__link md-nav__link--active"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-compass" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"/></svg> + + <span class="md-ellipsis"> + + + System Bootstrap + + + </span> + + + + </a> + + + + +<nav class="md-nav md-nav--secondary" aria-label="On this page"> + + + + + <label class="md-nav__title" for="__toc"> + <span class="md-nav__icon md-icon"></span> + On this page + </label> + <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> + + <li class="md-nav__item"> + <a href="#ctx-system-bootstrap" class="md-nav__link"> + <span class="md-ellipsis"> + <span class="md-typeset"> + <code>ctx system bootstrap</code> + </span> + </span> + </a> + +</li> + + </ul> + +</nav> + + </li> + + + + + </ul> + </nav> + + </li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li class="md-nav__item md-nav__item--pruned md-nav__item--nested"> + + + + + + <a href="../completion/" class="md-nav__link"> + + + + <span class="md-ellipsis"> + + + Shell + + + </span> + + + + + <span class="md-nav__icon md-icon"></span> + + </a> + + + + </li> + + + + + </ul> + </nav> + + </li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li class="md-nav__item md-nav__item--pruned md-nav__item--nested"> + + + + + + <a href="../../reference/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg> + + <span class="md-ellipsis"> + + + Reference + + + </span> + + + + + <span class="md-nav__icon md-icon"></span> + + </a> + + + + </li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li class="md-nav__item md-nav__item--pruned md-nav__item--nested"> + + + + + + <a href="../../operations/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-settings" viewBox="0 0 24 24"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"/><circle cx="12" cy="12" r="3"/></svg> + + <span class="md-ellipsis"> + + + Operations + + + </span> + + + + + <span class="md-nav__icon md-icon"></span> + + </a> + + + + </li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li class="md-nav__item md-nav__item--pruned md-nav__item--nested"> + + + + + + <a href="../../security/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-shield-check" viewBox="0 0 24 24"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/><path d="m9 12 2 2 4-4"/></svg> + + <span class="md-ellipsis"> + + + Security + + + </span> + + + + + <span class="md-nav__icon md-icon"></span> + + </a> + + + + </li> + + + + </ul> +</nav> + </div> + </div> + </div> + + + + <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > + <div class="md-sidebar__scrollwrap"> + + + + + + <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> + <div class="md-sidebar-button__wrapper"> + <label class="md-sidebar-button" for="__toc"></label> + </div> + + + <div class="md-sidebar__inner"> + + + +<nav class="md-nav md-nav--secondary" aria-label="On this page"> + + + + + <label class="md-nav__title" for="__toc"> + <span class="md-nav__icon md-icon"></span> + On this page + </label> + <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> + + <li class="md-nav__item"> + <a href="#ctx-system-bootstrap" class="md-nav__link"> + <span class="md-ellipsis"> + <span class="md-typeset"> + <code>ctx system bootstrap</code> + </span> + </span> + </a> + +</li> + + </ul> + +</nav> + </div> + </div> + </div> + + + + <div class="md-content" data-md-component="content"> + + + + + + + + + <nav class="md-path" aria-label="Navigation" > + <ol class="md-path__list"> + + + + + <li class="md-path__item"> + <a href="../.." class="md-path__link"> + + + <span class="md-ellipsis"> + Manifesto + </span> + + </a> + </li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li class="md-path__item"> + <a href="../" class="md-path__link"> + + + <span class="md-ellipsis"> + CLI + </span> + + </a> + </li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li class="md-path__item"> + <a href="../config/" class="md-path__link"> + + + <span class="md-ellipsis"> + Runtime + </span> + + </a> + </li> + + + + + </ol> + </nav> + + + <article class="md-content__inner md-typeset"> + + + + + + + <h1 id="__skip">System Bootstrap</h1> + +<p><img alt="ctx" src="../../images/ctx-banner.png" /></p> +<h3 id="ctx-system-bootstrap"><code>ctx system bootstrap</code><a class="headerlink" href="#ctx-system-bootstrap" title="Permanent link">¶</a></h3> +<p>Print the resolved context directory path so AI agents can anchor +their session. The default output lists the context directory, the +tracked context files, and a short health snapshot. <code>--quiet</code> prints +just the path; <code>--json</code> produces structured output for automation.</p> +<p>This is a hidden, agent-only command that agents are instructed to +run first in their session-start procedure; it is the authoritative +answer to "where does this project's context live?".</p> +<div class="language-bash highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>ctx<span class="w"> </span>system<span class="w"> </span>bootstrap<span class="w"> </span><span class="o">[</span>flags<span class="o">]</span> +</span></code></pre></div> +<p><strong>Flags</strong>:</p> +<table> +<thead> +<tr> +<th>Flag</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td><code>-q</code>, <code>--quiet</code></td> <td>Output only the context directory path</td> </tr> <tr> @@ -1222,6 +2075,44 @@ <h3 id="ctx-system-bootstrap"><code>ctx system bootstrap</code><a class="headerl <footer class="md-footer"> + + <nav class="md-footer__inner md-grid" aria-label="Footer" > + + + <a href="../system/" class="md-footer__link md-footer__link--prev" aria-label="Previous: System"> + <div class="md-footer__button md-icon"> + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-left" viewBox="0 0 24 24"><path d="m12 19-7-7 7-7M19 12H5"/></svg> + </div> + <div class="md-footer__title"> + <span class="md-footer__direction"> + Previous + </span> + <div class="md-ellipsis"> + System + </div> + </div> + </a> + + + + <a href="../completion/" class="md-footer__link md-footer__link--next" aria-label="Next: Completion"> + <div class="md-footer__title"> + <span class="md-footer__direction"> + Next + </span> + <div class="md-ellipsis"> + Completion + </div> + </div> + <div class="md-footer__button md-icon"> + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-right" viewBox="0 0 24 24"><path d="M5 12h14M12 5l7 7-7 7"/></svg> + </div> + </a> + + </nav> + <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> @@ -1293,7 +2184,7 @@ <h3 id="ctx-system-bootstrap"><code>ctx system bootstrap</code><a class="headerl <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/cli/change/index.html b/site/cli/change/index.html index 9bfbcc078..e05438d53 100644 --- a/site/cli/change/index.html +++ b/site/cli/change/index.html @@ -25,7 +25,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -36,7 +36,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -317,6 +317,8 @@ + + @@ -403,6 +405,8 @@ + + @@ -752,6 +756,8 @@ + + @@ -961,6 +967,8 @@ + + @@ -1156,6 +1164,35 @@ + <li class="md-nav__item"> + <a href="../kb/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-library" viewBox="0 0 24 24"><path d="m16 6 4 14M12 6v14M8 8v12M4 4v16"/></svg> + + <span class="md-ellipsis"> + + + ctx kb + + + </span> + + + + </a> + </li> + + + + + + + + + + <li class="md-nav__item"> <a href="../watch/" class="md-nav__link"> @@ -1201,6 +1238,10 @@ + + + + @@ -1400,6 +1441,12 @@ + + + + + + @@ -1533,6 +1580,8 @@ + + @@ -1854,6 +1903,8 @@ + + @@ -2092,7 +2143,7 @@ <h2 id="ctx-change"><code>ctx change</code><a class="headerlink" href="#ctx-chan <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/cli/completion/index.html b/site/cli/completion/index.html index c5db43821..8f2b12e9e 100644 --- a/site/cli/completion/index.html +++ b/site/cli/completion/index.html @@ -15,7 +15,7 @@ <link rel="canonical" href="https://ctx.ist/cli/completion/"> - <link rel="prev" href="../system/"> + <link rel="prev" href="../bootstrap/"> <link rel="next" href="../../reference/"> @@ -25,7 +25,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -36,7 +36,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -317,6 +317,8 @@ + + @@ -403,6 +405,8 @@ + + @@ -752,6 +756,8 @@ + + @@ -959,6 +965,8 @@ + + @@ -1020,6 +1028,10 @@ + + + + @@ -1219,6 +1231,12 @@ + + + + + + @@ -1474,6 +1492,8 @@ + + @@ -1954,7 +1974,7 @@ <h3 id="installation">Installation<a class="headerlink" href="#installation" tit <nav class="md-footer__inner md-grid" aria-label="Footer" > - <a href="../system/" class="md-footer__link md-footer__link--prev" aria-label="Previous: System"> + <a href="../bootstrap/" class="md-footer__link md-footer__link--prev" aria-label="Previous: System Bootstrap"> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-left" viewBox="0 0 24 24"><path d="m12 19-7-7 7-7M19 12H5"/></svg> @@ -1964,7 +1984,7 @@ <h3 id="installation">Installation<a class="headerlink" href="#installation" tit Previous </span> <div class="md-ellipsis"> - System + System Bootstrap </div> </div> </a> @@ -2059,7 +2079,7 @@ <h3 id="installation">Installation<a class="headerlink" href="#installation" tit <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/cli/config/index.html b/site/cli/config/index.html index 5cffa53d3..0f6321a8e 100644 --- a/site/cli/config/index.html +++ b/site/cli/config/index.html @@ -25,7 +25,7 @@ <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> + <meta name="generator" content="zensical-0.0.47"> @@ -36,7 +36,7 @@ - <link rel="stylesheet" href="../../assets/stylesheets/modern/main.19d3147f.min.css"> + <link rel="stylesheet" href="../../assets/stylesheets/modern/main.5e19f6ca.min.css"> @@ -317,6 +317,8 @@ + + @@ -403,6 +405,8 @@ + + @@ -752,6 +756,8 @@ + + @@ -959,6 +965,8 @@ + + @@ -1020,6 +1028,10 @@ + + + + @@ -1218,6 +1230,12 @@ + + + + + + @@ -1444,6 +1462,64 @@ + <li class="md-nav__item"> + <a href="../event/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-scroll-text" viewBox="0 0 24 24"><path d="M15 12h-5M15 8h-5M19 17V5a2 2 0 0 0-2-2H4"/><path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3"/></svg> + + <span class="md-ellipsis"> + + + Event + + + </span> + + + + </a> + </li> + + + + + + + + + + + <li class="md-nav__item"> + <a href="../message/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-message-square-text" viewBox="0 0 24 24"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2zM7 11h10M7 15h6M7 7h8"/></svg> + + <span class="md-ellipsis"> + + + Message + + + </span> + + + + </a> + </li> + + + + + + + + + + <li class="md-nav__item"> <a href="../system/" class="md-nav__link"> @@ -1467,6 +1543,35 @@ + + + + + + + <li class="md-nav__item"> + <a href="../bootstrap/" class="md-nav__link"> + + + + <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-compass" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"/></svg> + + <span class="md-ellipsis"> + + + System Bootstrap + + + </span> + + + + </a> + </li> + + + + </ul> </nav> @@ -1561,6 +1666,8 @@ + + @@ -1906,6 +2013,12 @@ + + + + + + @@ -2162,7 +2275,7 @@ <h4 id="ctx-config-status"><code>ctx config status</code><a class="headerlink" h <script id="__config" type="application/json">{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script> - <script src="../../assets/javascripts/bundle.ee611ef6.min.js"></script> + <script src="../../assets/javascripts/bundle.0df4f2d0.min.js"></script> </body> diff --git a/site/cli/connect/index.html b/site/cli/connect/index.html deleted file mode 100644 index 452b2f155..000000000 --- a/site/cli/connect/index.html +++ /dev/null @@ -1,1463 +0,0 @@ - -<!doctype html> -<html lang="en" class="no-js"> - <head> - - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width,initial-scale=1"> - - <meta name="description" content="ctx provides temporal continuity across sessions"> - - - <meta name="author" content="Jose Alekhinne <alekhinejose@gmail.com>"> - - - <link rel="canonical" href="https://ctx.ist/cli/connect/"> - - - - - - - - <link rel="icon" href="../../images/favicon-32.png"> - <meta name="generator" content="zensical-0.0.46"> - - - - <title>Connect - ctx: do you remember? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - -
- - - - - - - -
- -
- - - - -
-
- - - -
-
-
- - - - - - - -
-
-
- - - - - - - -
- - - - - - - - - -
- - - - - - -

Connect

- -

ctx

-

ctx connect

-

Connect a project to a ctx Hub for cross-project -knowledge sharing. Projects publish decisions, learnings, -conventions, and tasks to a hub; other subscribed projects receive -them alongside local context.

-
-

New to the Hub?

-

Start with the -ctx Hub overview for -the mental model (what the hub is, who it's for, what it is -not), then walk through -Getting Started. -This page is a command reference, not an introduction.

-
-

The unit of identity is a project, not a user. Registering a -directory with ctx connect register binds a per-project client -token in .context/.connect.enc. Two developers on the same -project either share that file over a trusted channel, or each -register under a different project name.

-

Only structured entries flow through the hub: decision, -learning, convention, task. Session journals, scratchpad -contents, and other local state stay on the machine that created -them.

-

ctx connect register

-

One-time registration with a hub. Requires the hub address and -admin token (printed by ctx hub start on first run).

-
ctx connect register localhost:9900 --token ctx_adm_7f3a...
-
-

On success, stores an encrypted connection config in -.context/.connect.enc for future RPCs.

-

ctx connect subscribe

-

Set which entry types to receive from the hub. Only matching types -are returned by sync and listen.

-
ctx connect subscribe decision learning
-ctx connect subscribe decision learning convention
-
-

ctx connect sync

-

Pull matching entries from the hub and write them to -.context/hub/ as Markdown files with origin tags and date -headers. Tracks last-seen sequence for incremental sync.

-
ctx connect sync
-
-

ctx connect publish

-

Push entries to the hub. Specify type and content as arguments.

-
ctx connect publish decision "Use UTC timestamps everywhere"
-
-

ctx connect listen

-

Stream new entries from the hub in real-time. Writes to -.context/hub/ as entries arrive. Press Ctrl-C to stop.

-
ctx connect listen
-
-

ctx connect status

-

Show hub connection state and entry statistics.

-
ctx connect status
-
-

Automatic Sharing

-

Use --share on ctx add to write locally AND publish to the hub:

-
ctx decision add "Use UTC" --share \
-  --context "Need consistency" \
-  --rationale "Avoid timezone bugs" \
-  --consequence "UI does conversion"
-
-

If the hub is unreachable, the local write succeeds and a warning -is printed. The --share flag is best-effort; it never blocks -local context updates.

-

Auto-Sync

-

Once registered, the check-hub-sync hook automatically syncs -new entries from the hub at the start of each session (daily -throttled). No manual ctx connect sync needed.

-

Shared Files

-

Entries from the hub are stored in .context/hub/:

-
.context/hub/
-  decisions.md      # Shared decisions with origin tags
-  learnings.md      # Shared learnings
-  conventions.md    # Shared conventions
-  .sync-state.json  # Last-seen sequence tracker
-
-

These files are read-only (managed by sync/listen) and never -mixed with local context files.

-

Agent Integration

-

Include shared knowledge in agent context packets:

-
ctx agent --include-hub
-
-

Shared entries are included as Tier 8 in the budget-aware -assembly, scored by recency and type relevance.

- - - - - - - - - - - - - - - - - - -
-
- - - - - -
- - - -
- -
- - - - -
- -
-
-
-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/site/cli/connection/index.html b/site/cli/connection/index.html index 0233a89df..b4e45ff26 100644 --- a/site/cli/connection/index.html +++ b/site/cli/connection/index.html @@ -25,7 +25,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -87,7 +87,7 @@
- + Skip to content @@ -317,6 +317,8 @@ + + @@ -403,6 +405,8 @@ + + @@ -752,6 +756,8 @@ + + @@ -959,6 +965,8 @@ + + @@ -1020,6 +1028,10 @@ + + + + @@ -1414,15 +1426,15 @@
+ + - - - + + + + + - - -
+ + + + +
  • + + + + + + + + + + Scratchpad - - + + + + +
  • + -
    + + - + + +
  • + + + + + + + + + + Remind + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Pause + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Resume + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Integrations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Diagnostics + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Runtime + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Shell + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    + + + + + +
    +
    + + + + + + +
    + +
    + + + +
    +
    + + + +
    + + + + + + + + + + + +
    + + + + + + +

    Dream

    - -

    Dream

    -

    ctx

    ctx dream

    Run a disciplined, out-of-band dream pass over the gitignored @@ -1379,6 +2282,44 @@

    ctx dream amend <id> --act

    - + - - - - -
    - - - + + + + + Diagnostics + + + + + + + + + + + -
    + + - - - -

    Event

    - -

    ctx

    -

    ctx hook event

    -

    Query the local hook event log. Requires event_log: true in -.ctxrc. Reads events from .context/state/events.jsonl and outputs -them in a human-readable table or raw JSONL format.

    -

    All filter flags combine with AND logic.

    -
    ctx hook event [flags]
    -
    -

    Flags:

    - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Shell + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    + + +
    + + + + +
    +
    +
    + + + +
    + + + + + + + + + + + +
    + + + + + + +

    Event

    + +

    ctx

    +

    ctx hook event

    +

    Query the local hook event log. Requires event_log: true in +.ctxrc. Reads events from .context/state/events.jsonl and outputs +them in a human-readable table or raw JSONL format.

    +

    All filter flags combine with AND logic.

    +
    ctx hook event [flags]
    +
    +

    Flags:

    +
    FlagDescription
    --hookFilter by hook name
    + + + + + + + + + + + + @@ -1232,6 +2085,44 @@

    ctx hook event + + + - - - - - -
    -
    - - - - - - -
    - -
    - - -
    - + + + + + + + -
    -
    -
    + + + + + - - -
    + + + + +
  • + + + + + + + + + + Dream - - + + + + +
  • + -
    + + - + + +
  • + + + + + + + + + + Scratchpad + + + + -

    ctx handover

    +
    +
  • + -

    ctx

    -

    ctx handover

    -

    Writes the per-session handover under -.context/handovers/<TS>-<slug>.md: a former-agent-to-next-agent -note created at session end by /ctx-wrap-up and read at -session start by /ctx-remember. When .context/kb/ exists, -the writer additionally folds postdated closeouts into the -handover's ## Folded Closeouts section and archives them.

    -

    ctx handover write <title>

    -
    ctx handover write "Cursor Hooks deep dive" \
    +              
    +            
    +              
    +                
    +  
    +  
    +  
    +  
    +    
  • + + + + + + + + + + Remind + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Pause + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Resume + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Integrations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Diagnostics + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Runtime + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Shell + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    +
    + + + + +
    +
    + + + + + + +
    + +
    + + +
    + + + + +
    +
    +
    + + + +
    + + + + + + + + + + + +
    + + + + + + +

    ctx handover

    + +

    ctx

    +

    ctx handover

    +

    Writes the per-session handover under +.context/handovers/<TS>-<slug>.md: a former-agent-to-next-agent +note created at session end by /ctx-wrap-up and read at +session start by /ctx-remember. When .context/kb/ exists, +the writer additionally folds postdated closeouts into the +handover's ## Folded Closeouts section and archives them.

    +

    ctx handover write <title>

    +
    ctx handover write "Cursor Hooks deep dive" \
       --summary "Drafted topic-page; minted EV-018..EV-024; cold-reader passed." \
       --next "Re-ingest the v1.1 release notes URL once you have it."
     
    @@ -1313,6 +2205,44 @@

    Reference + + +

    FlagDescription
    --hookFilter by hook name
    --session Filter by session ID
    @@ -2358,6 +2384,42 @@

    Configuration FileConfiguration File{"annotate":null,"base":"..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null} - + diff --git a/site/cli/init-status/index.html b/site/cli/init-status/index.html index 714a9df70..26475a6fe 100644 --- a/site/cli/init-status/index.html +++ b/site/cli/init-status/index.html @@ -25,7 +25,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -317,6 +317,8 @@ + + @@ -403,6 +405,8 @@ + + @@ -752,6 +756,8 @@ + + @@ -1144,6 +1150,8 @@ + + @@ -1205,6 +1213,10 @@ + + + + @@ -1404,6 +1416,12 @@ + + + + + + @@ -1537,6 +1555,8 @@ + + @@ -2093,7 +2113,7 @@

    ctx agent
  • Skill: named skill content (from --skill)
  • Hub: entries from .context/hub/ (with --include-hub, - see ctx connect)
  • + see ctx connection)

    Decisions and learnings are ranked by a combined score (how recent + how relevant to your current tasks). High-scoring entries are included with @@ -2339,7 +2359,7 @@

    ctx load{"annotate":null,"base":"../..","features":["announce.dismiss","content.code.annotate","content.code.copy","content.code.select","content.footnote.tooltips","content.tabs.link","content.tooltips","navigation.footer","navigation.indexes","navigation.instant","navigation.instant.prefetch","navigation.path","navigation.prune","navigation.tabs","navigation.tabs.sticky","navigation.top","navigation.tracking","search.highlight"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null} - + diff --git a/site/cli/journal/index.html b/site/cli/journal/index.html index b70bc3fea..fd57038f8 100644 --- a/site/cli/journal/index.html +++ b/site/cli/journal/index.html @@ -18,14 +18,14 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -317,6 +317,8 @@ + + @@ -403,6 +405,8 @@ + + @@ -752,6 +756,8 @@ + + @@ -959,6 +965,8 @@ + + @@ -1022,6 +1030,10 @@ + + + + @@ -1305,6 +1317,64 @@ +
  • + + + + + + + + + + ctx handover + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Dream + + + + + + + +
  • + + + + + + + + + +
  • @@ -1573,6 +1643,12 @@ + + + + + + @@ -1706,6 +1782,8 @@ + + @@ -2169,6 +2247,10 @@ + + + + @@ -2225,7 +2307,7 @@

    ctx journal source

  • - + @@ -2239,6 +2321,16 @@

    ctx journal sourceFilter by tool (e.g., claude-code)

    + + + + + + + + + + @@ -2302,7 +2394,7 @@

    ctx journal import

    - + @@ -2310,7 +2402,7 @@

    ctx journal import

    - + @@ -2326,22 +2418,44 @@

    ctx journal import

    --limit-n-M Maximum sessions to display (default: 20)
    --sinceShow sessions on or after this date (YYYY-MM-DD)
    --untilShow sessions on or before this date (YYYY-MM-DD)
    --all-projects Include sessions from all projects
    --allImport all sessions (only new files by default)Import new sessions and complete any whose transcript has grown
    --all-projects
    --regenerateRe-import existing files (preserves YAML frontmatter by default)Edge case: force a full re-render of existing entries
    --keep-frontmatter
    -

    Safe by default: --all only imports new sessions. Existing files are -skipped. Use --regenerate to re-import existing files (conversation content -is regenerated, YAML frontmatter from enrichment is preserved by default). -Use --keep-frontmatter=false to discard enriched frontmatter during -regeneration.

    -

    Locked entries (via ctx journal lock) are always skipped, regardless of flags.

    -

    Single-session import (ctx journal import <id>) always writes without -prompting, since you are explicitly targeting one session.

    +

    Self-healing, no flags required. Import's unit of memory is the source +transcript, not the output file. A sweep (--all) automatically:

    +
      +
    • imports new sessions it has never seen;
    • +
    • completes grown sessions — any whose transcript gained messages since the + last import (for example, a session imported while it was still running) is + re-rendered up to its current end. Claude Code transcripts are append-only, + so "it grew" is detected from the file's size and mtime alone; a partial + import is just an intermediate state the next sweep finishes;
    • +
    • skips unchanged sessions, byte-for-byte, writing nothing.
    • +
    +

    So you never have to remember to re-import or time it: importing a live session +mid-flight is safe and the next sweep heals it. That "no new flags" is the +feature — it is why import is wired into /ctx-wrap-up and a SessionEnd hook, +where it runs on the way out of every session (idempotent; one stat per +session when there is nothing to do).

    +

    Your edits are never clobbered. Journal entries are meant to be edited (add +notes, clean up the transcript). Before re-rendering a grown entry, import +checks whether the file's body is still exactly what ctx last wrote; if you +edited it, ctx leaves the file untouched and warns, pointing you at +ctx journal lock (permanent protection) or an explicit --regenerate +(deliberate discard). Locked entries are never rewritten under any flag.

    +

    --regenerate is an edge-case tool, not the routine path. Reach for it to +(a) mass-re-render after a change to the render format, or (b) one-time heal a +pre-self-heal entry that an old mid-session import truncated — its source will +never grow again, so the automatic path cannot heal it, and --regenerate +re-renders it from the full transcript. --keep-frontmatter=false additionally +discards enriched frontmatter during that re-render.

    +

    Single-session import (ctx journal import <id>) always re-renders the targeted +session without prompting, since you are explicitly targeting it.

    The journal/ directory should be gitignored (like sessions/) since it contains raw conversation data.

    Example:

    -
    ctx journal import abc123                 # Import one session
    -ctx journal import --all                  # Import only new sessions
    +
    ctx journal import abc123                 # Import (or re-render) one session
    +ctx journal import --all                  # Import new + complete grown sessions
     ctx journal import --all --dry-run        # Preview what would be imported
    -ctx journal import --all --regenerate     # Re-import existing (prompts)
    -ctx journal import --all --regenerate -y  # Re-import without prompting
    +ctx journal import --all --regenerate     # Edge case: force full re-render (prompts)
    +ctx journal import --all --regenerate -y  # Force full re-render without prompting
     ctx journal import --all --regenerate --keep-frontmatter=false -y  # Discard frontmatter
     

    ctx journal lock

    @@ -2624,13 +2738,13 @@

    ctx serve + + +

    -
    - - - - -
    -
    - - - - - - -
    - -
    - - -
    - + + + + + + + -
    -
    -
    + + + + + - - -
    - - - - - + + + +
  • + + + + + + + + + + Watch + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Sessions + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Integrations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Diagnostics + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Runtime + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Shell + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    + + + + + +
    +
    + + + + + + +
    + +
    + + + +
    +
    + + + +
    + + + + + + + + + +
    @@ -1349,6 +2201,44 @@

    Reference + + + - + - - - - -
    - - - - - + + + + Diagnostics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Shell + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    +

    + + + + +
    +
    + + + + + + +
    + +
    + + + +
    +
    + + + +
    + + + + + + + + +
    @@ -1289,6 +2186,44 @@

    ctx hook message reset + + + - + -

    - + + + + + + + + + + + + + + + +
  • + + + + + + + + + + Breaking Migration + + + + + + + +
  • + + + -
    -
    - - - - - - - - -
    - -
    - - -
    - + + + + + + + +
  • + + + + + + + + + + + + + + + + + Backup Strategy + + + + + + + + + -
  • -
    -
    - + + + + + + + + + + + + +
  • + + + + + + + + + + Hub Deployment + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + New Contributor + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Codebase Audit + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Docs Semantic Audit + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Out-of-Band Audit Channel + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Sanitize Permissions + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Architecture Exploration + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Maintainers + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hub + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + + + + + + + + +
    @@ -1244,6 +2016,111 @@ + +
    @@ -1384,6 +2261,44 @@

    Why ctx No Longer

    - + -
    -
    - - - - - - -
    - -
    - - -
    - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + CLI + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    +
    +
    + + + +
    +
    + + + + + + +
    + +
    + + +
    + + + +
    - - - -
    -
    - - - - - - -
    - -
    - - -
    - + + + + + + + -
    -
    -
    + + + + + - - -
    + + + + +
  • + + + + + + + + + + Typical KB Session - - + + + + +
  • + -
    + + - + + +
  • + + + + + + + + + + Recover an Aborted KB Session + + + + -

    Build a Knowledge Base

    +
    +
  • + -

    ctx

    -

    The Problem

    -

    You are doing knowledge-shaped work (vendor-spec analysis, a -research project, a post-incident review, domain modeling) and -the standard five context files (TASKS.md, DECISIONS.md, -LEARNINGS.md, CONVENTIONS.md, CONSTITUTION.md) don't fit. -Because those files are tuned for code-development context, not for -evidence-tracked knowledge with confidence bands, -contradictions, and external citations.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hooks and Notifications + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Maintenance + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Agents and Automation + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hub + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + CLI + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    +
    +
    + + + + + + + +
    + + + + + + + + + + + +
    + + + + + + +

    Build a Knowledge Base

    + +

    ctx

    +

    The Problem

    +

    You are doing knowledge-shaped work (vendor-spec analysis, a +research project, a post-incident review, domain modeling) and +the standard five context files (TASKS.md, DECISIONS.md, +LEARNINGS.md, CONVENTIONS.md, CONSTITUTION.md) don't fit. +Because those files are tuned for code-development context, not for +evidence-tracked knowledge with confidence bands, +contradictions, and external citations.

    You need a place where:

    +
    + + + + + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + + + +
    - - - - -
    - - - + -
    -
    - + + + + -
    -
    -
    - - - + - - - + + + + + + + @@ -604,7 +1652,17 @@ - + + + + + + + + + + + @@ -625,16 +1683,14 @@ - + - - - Blog + Maintenance @@ -651,9 +1707,10 @@ - - - + + + + @@ -662,7 +1719,7 @@ - + @@ -695,16 +1752,14 @@ - + - - - Home + Agents and Automation @@ -721,9 +1776,10 @@ - - - + + + + @@ -732,12 +1788,6 @@ - - - - - - @@ -767,16 +1817,14 @@ - + - - - Recipes + Hub @@ -793,6 +1841,14 @@ + + + + + + + + @@ -890,6 +1946,8 @@ + + @@ -1434,6 +2492,107 @@ + +
    @@ -2349,6 +3508,44 @@

    State File Reference + + + -

    -
    - - - -
    -
    - - - - - - -
    - -
    - - -
    - + + + + + + + -
    -
    -
    - - - -
    - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hooks and Notifications + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Maintenance + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Agents and Automation + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hub + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + CLI + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    +
    +
    + + + + + + + +
    + + + + + + + + +
    @@ -1420,6 +2310,44 @@

    Reference + + + -

    - + -
    -
    - - - - - - - - -
    - -
    - - -
    - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + CLI + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    +
    +
    + + + +
    +
    + + + + + + + + +
    + +
    + + +
    + + + +
    - - - -
    -
    + + + + + + + + + + + + + +
  • + + + + + + + + + + Session Reminders + + + + + + + +
  • + + + + + + + + + + +
  • + + + + + + + + + + Pausing Context Hooks + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Knowledge and Tasks + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Knowledge Base + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hooks and Notifications + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Maintenance + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Agents and Automation + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hub + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + CLI + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    +
    +
    + + + +
    +
    @@ -1229,6 +2111,109 @@ + +
    @@ -1357,6 +2342,44 @@

    Tips&par

    -
    - + -
    -
    - - - - - - -
    - -
    - - -
    - - - - +
    +
    +
    + + + +
    +
    + + + + + + +
    + +
    + + +
    + + + +
    -
    -
    - - - -
    -
    - - - - - - -
    - -
    - - -
    - + + + + + + + -
    -
    -
    + + + + + - - -
    + + + + +
  • + + + + + + + + + + Recover an Aborted KB Session + + + + - + +
  • + + + + + + + -
    + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hooks and Notifications + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Maintenance + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Agents and Automation + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + Hub + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + CLI + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Reference + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Operations + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • + + + + + + + + + + + + + + + Security + + + + + + + + + + + + + +
  • + + + + + +
    +
    +
    + + + + + + + +
    + + + + + + + + + + + +
    + + + + + -

    Typical KB Session

    ctx

    @@ -1470,6 +2410,44 @@

    Reference + + + + @@ -1172,6 +1528,73 @@ + +
    @@ -1299,6 +1722,44 @@

    Why the contract, not just cron + + +