diff --git a/docs/.nojekyll b/.hugo_build.lock similarity index 100% rename from docs/.nojekyll rename to .hugo_build.lock diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..1cbe940 --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,114 @@ +/* Logo dark/light switching. + Congo toggles a .dark class on via JS โ€” the native + prefers-color-scheme media query inside tags does not respond + to this toggle, so we handle switching with CSS classes instead. */ +.logo-light { + display: block; + max-width: 100%; + height: auto; +} +.logo-dark { + display: none; + max-width: 100%; + height: auto; +} +html.dark .logo-light { + display: none; +} +html.dark .logo-dark { + display: block; +} + +/* Experimental page โ€” v2 callout and problem cards */ +html.dark .v2-callout { + background: #1e3a5f !important; + border-color: #3b82f6 !important; +} +html.dark .v2-callout p { color: #93c5fd !important; } +html.dark .v2-callout strong { color: #bfdbfe !important; } +html.dark .problem-card { + background: #1f2937 !important; + border-color: #374151 !important; +} +html.dark .problem-card p { color: #9ca3af !important; } +html.dark .problem-card strong { color: #d1d5db !important; } +html.dark .v2-pipeline-step-neutral { + background: #1f2937 !important; + border-color: #374151 !important; + color: #d1d5db !important; +} +html.dark .v2-pipeline-step-purple { + background: #2e1065 !important; + border-color: #4c1d95 !important; + color: #c4b5fd !important; +} +html.dark .v2-pipeline-step-blue { + background: #1e3a5f !important; + border-color: #1e40af !important; + color: #93c5fd !important; +} +html.dark .v2-pipeline-step-yellow { + background: #422006 !important; + border-color: #854d0e !important; + color: #fde68a !important; +} +html.dark .v2-pipeline-step-green { + background: #052e16 !important; + border-color: #166534 !important; + color: #86efac !important; +} + +/* Hero entrance animations */ +@keyframes fadeUp { + from { opacity: 0; transform: translateY(28px); } + to { opacity: 1; transform: translateY(0); } +} +.hero-fade-1 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.15s both; } +.hero-fade-2 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.30s both; } +.hero-fade-3 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.45s both; } +.hero-fade-4 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.60s both; } +.hero-fade-5 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.75s both; } + +/* List view logos */ +.list-logo-light { display: block; } +.list-logo-dark { display: none; } +html.dark .list-logo-light { display: none !important; } +html.dark .list-logo-dark { display: block !important; } + +/* Pipeline step hover bounce (spring easing gives natural overshoot) */ +.pipeline-step { + transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.2s ease; +} +.pipeline-step:hover { + transform: translateY(-4px) scale(1.04); + box-shadow: 0 6px 16px rgba(0,0,0,0.13); +} +html.dark .pipeline-step:hover { + box-shadow: 0 6px 16px rgba(0,0,0,0.45); +} + +/* Pill icon */ +.pill-icon { + height: 14px; + width: 14px; + object-fit: contain; + vertical-align: middle; + margin-right: 4px; + border-radius: 2px; + display: inline-block; + position: relative; + top: -1px; +} + +/* Hero dark mode overrides */ +html.dark .hero-tagline { color: #9ca3af !important; } +html.dark .hero-arrow { color: #4b5563 !important; } +html.dark .hero-stage-label { color: #6b7280 !important; } + +html.dark .hero-pill-neutral { background: #1f2937 !important; border-color: #374151 !important; color: #d1d5db !important; } +html.dark .hero-pill-purple { background: #2e1065 !important; border-color: #4c1d95 !important; color: #c4b5fd !important; } +html.dark .hero-pill-blue { background: #1e3a5f !important; border-color: #1e40af !important; color: #93c5fd !important; } +html.dark .hero-pill-green { background: #052e16 !important; border-color: #166534 !important; color: #86efac !important; } +html.dark .hero-btn-primary { background: #3b82f6 !important; } +html.dark .hero-btn-outline { border-color: #374151 !important; color: #d1d5db !important; } +html.dark .hero-secondary-link { color: #6b7280 !important; border-bottom-color: #374151 !important; } diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml new file mode 100644 index 0000000..3f6e42d --- /dev/null +++ b/config/_default/hugo.toml @@ -0,0 +1,12 @@ +baseURL = "https://cytomining.github.io/" +locale = "en" +title = "Cytomining" +theme = "congo" + +enableRobotsTXT = true +paginate = 10 + +[markup] + [markup.goldmark] + [markup.goldmark.renderer] + unsafe = true diff --git a/config/_default/languages.en.toml b/config/_default/languages.en.toml new file mode 100644 index 0000000..34a0408 --- /dev/null +++ b/config/_default/languages.en.toml @@ -0,0 +1,9 @@ +label = "English" +weight = 1 +title = "Cytomining" + +[params] + description = "Essential tools, workflows, and best practices for single-cell image-based profiling." + +[params.author] + name = "Cytomining" diff --git a/config/_default/menus.en.toml b/config/_default/menus.en.toml new file mode 100644 index 0000000..1d0d172 --- /dev/null +++ b/config/_default/menus.en.toml @@ -0,0 +1,29 @@ +[[main]] + name = "Tools" + pageRef = "tools" + weight = 10 + +[[main]] + name = "Experimental tools" + pageRef = "experimental" + weight = 20 + +[[main]] + name = "Media" + pageRef = "media" + weight = 30 + +[[main]] + name = "About" + pageRef = "about" + weight = 40 + +[[main]] + name = "History" + pageRef = "history" + weight = 50 + +[[main]] + name = "Contact" + pageRef = "contact" + weight = 60 diff --git a/config/_default/params.toml b/config/_default/params.toml new file mode 100644 index 0000000..a2debb7 --- /dev/null +++ b/config/_default/params.toml @@ -0,0 +1,32 @@ +colorScheme = "ocean" +defaultAppearance = "light" +autoSwitchAppearance = true +enableSearch = true +enableCodeCopy = false + +[homepage] + layout = "background" + showRecent = false + +[header] + layout = "fixed" + +[footer] + showCopyright = true + showThemeAttribution = false + showAppearanceSwitcher = true + showScrollToTop = true + +[article] + showDate = false + showAuthor = false + showReadingTime = false + showTableOfContents = true + showRelatedContent = false + showEdit = false + +[list] + showCards = true + groupByYear = false + cardView = true + showSummary = true diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..f633a05 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,91 @@ +--- +title: "Cytomining" +description: "Open-source tools for single-cell image-based profiling" +--- + +
+ + +
+ Cytomining +

Cytomining

+
+ + +
+

+ Open-source tools for every stage of the
single-cell image-based profiling workflow. +

+
+ + +
+
+ +
+ ๐Ÿ”ฌ Raw Images +
+ + โ†’ + + + iceberg-bioimage + + + โ†’ + + + CytoTable + + + โ†’ + + + coSMicQC + + + โ†’ + + + pycytominer + + + โ†’ + + + copairs + + + / + + + buscar + + +
+

ingest  ยท  quality control  ยท  process  ยท  evaluate

+
+ + + + + + + +
diff --git a/content/about/_index.md b/content/about/_index.md new file mode 100644 index 0000000..e46ba93 --- /dev/null +++ b/content/about/_index.md @@ -0,0 +1,7 @@ +--- +title: "About" +description: "About the Cytomining ecosystem and community." +--- + +Cytomining is an open-source software ecosystem that maintains essential tools, workflows, and best practices for single-cell image-based profiling and microscopy data analysis research. +We are proud members of the [CytoData](https://www.cytodata.org/) scientific community. diff --git a/content/contact/_index.md b/content/contact/_index.md new file mode 100644 index 0000000..2adddb1 --- /dev/null +++ b/content/contact/_index.md @@ -0,0 +1,8 @@ +--- +title: "Contact" +description: "Get in touch with the Cytomining community." +--- + +- ๐Ÿ’ฌ Join the conversation on our [Discourse forums](https://forum.image.sc/) +- ๐Ÿ“ซ Subscribe to the [CytoData mailing list](https://www.cytodata.org/contact/) +- ๐Ÿ› Report issues on [GitHub](https://github.com/cytomining) diff --git a/content/experimental/_index.md b/content/experimental/_index.md new file mode 100644 index 0000000..a3591f2 --- /dev/null +++ b/content/experimental/_index.md @@ -0,0 +1,6 @@ +--- +title: "Experimental" +description: "Next-generation tools under active development in the WayScience organization." +--- + +The following tools are under active development in the [WayScience](https://github.com/WayScience) organization and represent the next generation of the Cytomining ecosystem. diff --git a/content/experimental/buscar.md b/content/experimental/buscar.md new file mode 100644 index 0000000..89cec3f --- /dev/null +++ b/content/experimental/buscar.md @@ -0,0 +1,23 @@ +--- +title: "buscar" +description: "Hit calling โ€” identifies biologically active perturbations from single-cell morphological profiles using distribution-level scoring." +showDate: false +showAuthor: false +logoUrl: "https://raw.githubusercontent.com/WayScience/buscar/main/logo/just-icon.png" +--- + +buscar logo +buscar logo + +buscar is a Python package for reproducible hit calling in high-content screening. +Rather than averaging cells into population-level summaries, it operates on individual cell distributions to preserve biological heterogeneity and identify perturbations with on-target morphological signatures. + +**Key capabilities:** + +- Define on-target and off-target morphology signatures from reference profiles +- Score perturbation efficacy via Earth Mover's Distance +- Assess specificity with off-target scoring to reduce false positives +- Preserve single-cell heterogeneity throughout hit calling +- Integrates directly with pycytominer, coSMicQC, and CytoTable workflows + +**[View on GitHub โ†’](https://github.com/WayScience/buscar)** diff --git a/content/experimental/iceberg-bioimage.md b/content/experimental/iceberg-bioimage.md new file mode 100644 index 0000000..564919b --- /dev/null +++ b/content/experimental/iceberg-bioimage.md @@ -0,0 +1,22 @@ +--- +title: "iceberg-bioimage" +description: "Data cataloging โ€” scans bioimaging stores and publishes image metadata to Cytomining-compatible Parquet warehouses via Apache Iceberg." +showDate: false +showAuthor: false +logoUrl: "https://raw.githubusercontent.com/WayScience/iceberg-bioimage/main/docs/src/_static/iceberg-bioimage-logo.png" +--- + +iceberg-bioimage logo + +iceberg-bioimage is a Python package that catalogs bioimaging data using Apache Iceberg. +It scans image stores across formats, publishes structured metadata tables, and exports layouts compatible with the Cytomining profiling ecosystem โ€” bridging raw image archives and downstream analysis pipelines. + +**Key capabilities:** + +- Scan image stores into canonical `ScanResult` objects +- Publish image metadata with PyIceberg for versioned, queryable catalogs +- Export Cytomining-compatible Parquet warehouses for profiling workflows +- Validate profile tables against microscopy join contracts +- Supports Zarr, OME-TIFF, and Parquet source formats + +**[View documentation โ†’](https://wayscience.github.io/iceberg-bioimage/)** diff --git a/content/experimental/ome-arrow.md b/content/experimental/ome-arrow.md new file mode 100644 index 0000000..a115cea --- /dev/null +++ b/content/experimental/ome-arrow.md @@ -0,0 +1,22 @@ +--- +title: "OME-arrow" +description: "Image storage โ€” stores microscopy images alongside metadata and derived data in a unified, queryable Apache Arrow format." +showDate: false +showAuthor: false +logoUrl: "https://raw.githubusercontent.com/WayScience/OME-arrow/main/docs/src/_static/ome-arrow-logo.png" +--- + +OME-arrow logo + +OME-arrow brings Open Microscopy Environment (OME) specifications to Apache Arrow, enabling microscopy images to be stored directly in data tables alongside their metadata and derived features as multilayer structs. +This makes bioimaging data fast to query, easy to share, and compatible with modern tensor-based ML workflows. + +**Key capabilities:** + +- Store images, metadata, and derived features together in a single table +- Support for TIFF, OME-Zarr, NumPy, and Parquet source formats +- Lazy reading and region-of-interest (ROI) access for large datasets +- Tensor-focused output compatible with PyTorch, JAX, and DLPack +- Visualization integrations for matplotlib, PyVista, and Napari + +**[View documentation โ†’](https://wayscience.github.io/ome-arrow/)** diff --git a/content/experimental/zedprofiler.md b/content/experimental/zedprofiler.md new file mode 100644 index 0000000..464f278 --- /dev/null +++ b/content/experimental/zedprofiler.md @@ -0,0 +1,19 @@ +--- +title: "zedprofiler" +description: "3D feature extraction โ€” extracts morphological features from volumetric microscopy images for CPU-efficient high-content profiling." +showDate: false +showAuthor: false +--- + +zedprofiler is a CPU-first toolkit for extracting morphological features from 3D volumetric microscopy images. +It is designed for high-content and high-throughput workflows where classical segmentation-and-measurement pipelines need to scale to single-cell features in z-stacks. + +**Key capabilities:** + +- Extract features from 3D volumetric (z-stack) single-cell images +- Multi-channel fluorescence microscopy support +- Anisotropic voxel spacing correction for accurate 3D measurements +- Modular, extensible architecture for custom feature sets +- CPU-optimized for high-throughput processing without GPU dependency + +**[View on GitHub โ†’](https://github.com/WayScience/zedprofiler)** diff --git a/content/history/_index.md b/content/history/_index.md new file mode 100644 index 0000000..c589b1e --- /dev/null +++ b/content/history/_index.md @@ -0,0 +1,6 @@ +--- +title: "History" +description: "The history of the Cytomining ecosystem." +--- + +The Cytomining ecosystem has grown from early image-based profiling research into a comprehensive open-source software suite. diff --git a/content/media/_index.md b/content/media/_index.md new file mode 100644 index 0000000..ea2210e --- /dev/null +++ b/content/media/_index.md @@ -0,0 +1,6 @@ +--- +title: "Media" +description: "Videos, events, posters, and more from the Cytomining community." +--- + +Find videos, conference posters, event recordings, and other media from the Cytomining and CytoData communities here. diff --git a/content/tools/_index.md b/content/tools/_index.md new file mode 100644 index 0000000..67f18c1 --- /dev/null +++ b/content/tools/_index.md @@ -0,0 +1,6 @@ +--- +title: "Tools" +description: "Production-ready tools for image-based profiling bioinformatics." +--- + +The Cytomining ecosystem provides a suite of production-ready tools for every stage of the image-based profiling workflow. diff --git a/content/tools/copairs.md b/content/tools/copairs.md new file mode 100644 index 0000000..1db6b49 --- /dev/null +++ b/content/tools/copairs.md @@ -0,0 +1,35 @@ +--- +title: "copairs" +description: "Downstream evaluation โ€” measures how reproducibly perturbation profiles retrieve their matched replicates, quantifying profile quality and similarity." +showDate: false +showAuthor: false +--- + +copairs is a Python package for evaluating the quality of morphological profiles by measuring how well a perturbation's profile can be retrieved relative to controls. +It implements mean Average Precision (mAP) and related metrics widely used in the image-based profiling community. + +**Key capabilities:** + +- Define matched pairs based on experimental metadata +- Compute mean Average Precision (mAP) for retrieval assessment +- Evaluate intra- vs. inter-group morphological similarity +- Scale efficiently to large screening datasets + +**[View documentation โ†’](https://cytomining.github.io/copairs/)** + +## Publication + +
+
+ Nature Communications ยท 2025 +
+

+ A versatile information retrieval framework for evaluating profile strength and similarity +

+

+ Kalinin AA, Arevalo J, Serrano E, Vulliard L, Tsang H, et al. +

+

+ doi: 10.1038/s41467-025-60306-2 +

+
diff --git a/content/tools/cosmicqc.md b/content/tools/cosmicqc.md new file mode 100644 index 0000000..8b9bf9c --- /dev/null +++ b/content/tools/cosmicqc.md @@ -0,0 +1,39 @@ +--- +title: "coSMicQC" +description: "Quality control step โ€” flags and removes low-quality cells before profile processing to prevent artifacts from propagating downstream." +showDate: false +showAuthor: false +logoUrl: "https://raw.githubusercontent.com/cytomining/coSMicQC/main/media/logo/just-icon.png" +--- + +coSMicQC logo +coSMicQC logo + +coSMicQC (Single-cell Morphology Quality Control) identifies and removes low-quality cells from image-based profiling datasets before downstream analysis. +It catches common problems such as over-segmented nuclei, poorly segmented cells, and imaging artifacts. + +**Key capabilities:** + +- Flag over-segmented, under-segmented, and poorly focused cells +- Apply threshold-based or z-score-based QC criteria +- Generate summary reports of QC outcomes +- Integrate seamlessly with CytoTable and pycytominer workflows + +**[View documentation โ†’](https://cytomining.github.io/coSMicQC/)** + +## Publication + +
+
+ bioRxiv Preprint ยท 2025 +
+

+ Stellar quality control for single-cell image-based profiling with coSMicQC +

+

+ Tomkinson J, Bunten D, Way GP +

+

+ doi: 10.1101/2025.10.14.682427 +

+
diff --git a/content/tools/cytodataframe.md b/content/tools/cytodataframe.md new file mode 100644 index 0000000..4fb6e23 --- /dev/null +++ b/content/tools/cytodataframe.md @@ -0,0 +1,21 @@ +--- +title: "CytoDataFrame" +description: "Interactive exploration โ€” view and inspect morphological profiles alongside their source cell images directly in Jupyter notebooks." +showDate: false +showAuthor: false +logoUrl: "https://raw.githubusercontent.com/cytomining/CytoDataFrame/main/logo/just-icon.png" +--- + +CytoDataFrame logo +CytoDataFrame logo + +CytoDataFrame extends the familiar pandas DataFrame interface to let researchers view and analyze single-cell morphological profiles alongside their corresponding microscopy images and segmentation masks โ€” all within a Jupyter notebook. + +**Key capabilities:** + +- Display cell images inline with profile data in Jupyter +- Link numerical features directly to visual representations +- Overlay segmentation masks for quality inspection +- Built on top of pandas for full compatibility with existing workflows + +**[View documentation โ†’](https://cytomining.github.io/CytoDataFrame/)** diff --git a/content/tools/cytotable.md b/content/tools/cytotable.md new file mode 100644 index 0000000..91db344 --- /dev/null +++ b/content/tools/cytotable.md @@ -0,0 +1,39 @@ +--- +title: "CytoTable" +description: "Upstream ingestion โ€” converts raw CellProfiler, DeepProfiler, and IN Carta outputs into scalable, analysis-ready Parquet tables." +showDate: false +showAuthor: false +logoUrl: "https://raw.githubusercontent.com/cytomining/CytoTable/main/logo/just-icon.png" +--- + +CytoTable logo +CytoTable logo + +CytoTable harmonizes output from different high-content image analysis tools โ€” including CellProfiler, DeepProfiler, and IN Carta โ€” into a single, analysis-ready format. +It scales to large datasets using Apache Parquet and DuckDB under the hood. + +**Key capabilities:** + +- Convert CellProfiler SQLite, CSV, and other formats into Parquet +- Harmonize schema differences across analysis tools +- Scale to datasets with millions of single cells +- Produce outputs compatible with pycytominer and AnnData workflows + +**[View documentation โ†’](https://cytomining.github.io/CytoTable/)** + +## Publication + +
+
+ Patterns (Cell Press) ยท 2026 +
+

+ Scalable data harmonization for single-cell image-based profiling with CytoTable +

+

+ Bunten D, Tomkinson J, Serrano E, Lippincott MJ, Brewer KI, et al. +

+

+ doi: 10.1016/j.patter.2026.101514 +

+
diff --git a/content/tools/deepprofiler.md b/content/tools/deepprofiler.md new file mode 100644 index 0000000..d0de1ac --- /dev/null +++ b/content/tools/deepprofiler.md @@ -0,0 +1,37 @@ +--- +title: "DeepProfiler" +description: "Alternative feature extraction โ€” deep learning embeddings from raw microscopy images, bypassing classical segmentation-and-measurement pipelines." +showDate: false +showAuthor: false +--- + +DeepProfiler logo + +DeepProfiler uses deep neural networks to extract morphological features directly from raw microscopy images, bypassing traditional segmentation-and-measurement pipelines. +It is designed for high-throughput screens where deep learning representations outperform classical feature sets. + +**Key capabilities:** + +- Train and apply convolutional neural networks for feature extraction +- Support for EfficientNet, ResNet, and custom architectures +- Crop and embed single cells from large microscopy images +- Produce embeddings compatible with pycytominer and downstream profiling workflows + +**[View on GitHub โ†’](https://github.com/cytomining/DeepProfiler)** + +## Publication + +
+
+ Nature Communications ยท 2024 +
+

+ Learning representations for image-based profiling of perturbations +

+

+ Moshkov N, Bornholdt M, Benoit G, Smith K, et al. +

+

+ doi: 10.1038/s41467-024-45999-1 +

+
diff --git a/content/tools/pycytominer.md b/content/tools/pycytominer.md new file mode 100644 index 0000000..18aefd8 --- /dev/null +++ b/content/tools/pycytominer.md @@ -0,0 +1,40 @@ +--- +title: "pycytominer" +description: "Core processing pipeline โ€” aggregates, normalizes, and feature-selects morphological profiles for downstream analysis." +showDate: false +showAuthor: false +logoUrl: "https://raw.githubusercontent.com/cytomining/pycytominer/main/logo/just-icon.png" +--- + +pycytominer logo +pycytominer logo + +pycytominer is the core Python package in the Cytomining ecosystem. +It provides a clean, composable API for processing single-cell morphological profiles produced by tools like CellProfiler. + +**Key capabilities:** + +- Aggregate single-cell data to well- or treatment-level profiles +- Annotate profiles with experimental metadata +- Normalize features using population-level statistics +- Select high-quality features and remove noise +- Output analysis-ready profiles in standard formats + +**[View documentation โ†’](https://pycytominer.readthedocs.io/)** + +## Publication + +
+
+ Nature Methods ยท 2025 +
+

+ Reproducible image-based profiling with Pycytominer +

+

+ Serrano E, Chandrasekaran SN, Bunten D, Brewer KI, Tomkinson J, et al. +

+

+ doi: 10.1038/s41592-025-02611-8 +

+
diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 1d239e6..0000000 --- a/docs/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - Redirecting to https://github.com/cytomining - - - Redirecting to https://github.com/cytomining - - diff --git a/layouts/_partials/article-link.html b/layouts/_partials/article-link.html new file mode 100644 index 0000000..3c25ca4 --- /dev/null +++ b/layouts/_partials/article-link.html @@ -0,0 +1,81 @@ +
+ {{- $images := $.Resources.ByType "image" }} + {{- $thumbnail := $images.GetMatch (.Params.thumbnail | default "*thumb*") }} + {{- $feature := $images.GetMatch (.Params.feature | default "*feature*") | default $thumbnail }} + {{- with $feature }} +
+ + {{ $.Params.featureAlt | default $.Params.thumbnailAlt | default + +
+ {{- end }} +
+ {{/* Small icon above title */}} + {{ with .Params.logoUrl }} + {{ $.Title }} icon + {{ end }} +

+ {{ with .Params.externalUrl }} +
+ {{ $.Title | emojify }} + + + + +
+ {{ else }} + {{ .Title | emojify }} + {{ end }} + {{ if and .Draft .Site.Params.article.showDraftLabel }} +
+ {{ partial "badge.html" (i18n "article.draft" | emojify) }} +
+ {{ end }} + {{ if templates.Exists "_partials/extend-article-link.html" }} + {{ partial "extend-article-link.html" . }} + {{ end }} +

+
+ {{ partial "article-meta.html" . }} +
+ {{ if .Params.showSummary | default (.Site.Params.list.showSummary | default false) }} +
+ {{ .Description }} +
+ {{ end }} +
+
diff --git a/layouts/_partials/functions/warnings.html b/layouts/_partials/functions/warnings.html new file mode 100644 index 0000000..d7cb617 --- /dev/null +++ b/layouts/_partials/functions/warnings.html @@ -0,0 +1,9 @@ +{{ if ne .Params.showAppearanceSwitcher nil }} + {{ warnf "[CONGO] Theme parameter `showAppearanceSwitcher` has been renamed to `footer.showAppearanceSwitcher`. Please update your site configuration." }} +{{ end }} +{{ if ne .Params.showScrollToTop nil }} + {{ warnf "[CONGO] Theme parameter `showScrollToTop` has been renamed to `footer.showScrollToTop`. Please update your site configuration." }} +{{ end }} +{{ if ne .Params.logo nil }} + {{ warnf "[CONGO] Theme parameter `logo` has been renamed to `header.logo`. Please update your site configuration." }} +{{ end }} diff --git a/layouts/_partials/home/page.html b/layouts/_partials/home/page.html new file mode 100644 index 0000000..fac5ea0 --- /dev/null +++ b/layouts/_partials/home/page.html @@ -0,0 +1,6 @@ +
+
{{ .Content | emojify }}
+
+
+ {{ partial "recent-articles.html" . }} +
diff --git a/layouts/experimental/list.html b/layouts/experimental/list.html new file mode 100644 index 0000000..9ebc2d7 --- /dev/null +++ b/layouts/experimental/list.html @@ -0,0 +1,137 @@ +{{ define "main" }} +
+ + {{/* Header */}} +

Experimental Tools

+

+ Next-generation tools under active development in the WayScience organization, + designed to become the foundation of Cytomining v2. +

+ + {{/* V2 pitch */}} +
+

What does Cytomining v2 solve?

+

+ The current Cytomining stack was designed around 2D single-cell data from CellProfiler. + As the field moves toward 3D organoid imaging, larger-scale archives, and deep learning feature extraction, + several gaps have emerged: no standardized image catalog, images and features stored separately, no 3D support, and hit calling that collapses single-cell heterogeneity. + The tools below are purpose-built to close each of these gaps โ€” together forming a fully traceable, format-agnostic, 3D-capable profiling pipeline. +

+
+ {{/* V2 pipeline */}} +

Cytomining v2 pipeline

+
+
+ +
+
๐Ÿ”ฌ Raw Images
+
+ + โ†’ + +
+ iceberg-bioimage + catalog +
+ + โ†’ + +
+ OME-arrow + store +
+ + โ†’ + +
+
๐Ÿ“Š Feature Extraction
+
+ + โ†’ + +
+ zedprofiler 3D + 3D extract +
+ + โ†’ + +
+ CytoTable + harmonize +
+ + โ†’ + +
+ coSMicQC + QC +
+ + โ†’ + +
+ pycytominer + process +
+ + โ†’ + +
+ buscar + hit call +
+ +
+
+

+ Yellow = new 3D-capable step. Purple = new data infrastructure. Blue = existing Cytomining tools. +

+ + {{/* Per-tool problem statements */}} +

What each tool solves

+ +
+ +
+ ๐Ÿ—„๏ธ +
+

iceberg-bioimage

+

Problem: Raw bioimaging archives have no standard catalog โ€” finding, versioning, and joining images to downstream data requires bespoke scripts per lab. Solution: Scans any image store into a versioned Apache Iceberg catalog that directly exports Cytomining-compatible Parquet warehouses.

+
+
+ +
+ ๐Ÿน +
+

OME-arrow

+

Problem: Images and feature tables live in separate systems โ€” linking a numeric outlier back to its source cell requires error-prone manual joins across formats. Solution: Embeds images as first-class columns in Arrow tables so features, metadata, and pixel data travel together and can be queried or exported as tensors.

+
+
+ +
+ ๐Ÿ“ฆ +
+

zedprofiler

+

Problem: Classical profiling tools only extract 2D features โ€” organoid, cleared-tissue, and confocal z-stack experiments are left without a first-class CPU-efficient feature extractor. Solution: Extracts morphological features directly from 3D volumetric images with anisotropic spacing correction, no GPU required.

+
+
+ +
+ ๐Ÿ” +
+

buscar

+

Problem: Population-level hit calling averages away biologically meaningful cell-to-cell variation โ€” heterogeneous responses and rare subpopulations are invisible to copairs-style metrics. Solution: Scores perturbation efficacy and specificity directly on single-cell distributions using Earth Mover's Distance, preserving heterogeneity throughout hit calling.

+
+
+ +
+ + {{/* Tool list */}} +

Tools

+ {{ range .Pages }} + {{ partial "article-link.html" . }} + {{ end }} + +
+{{ end }} diff --git a/layouts/index.html b/layouts/index.html new file mode 100644 index 0000000..e6a0d4d --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,66 @@ +{{ define "main" }} +
+
+ + {{/* Logo + title */}} +
+ Cytomining +

Cytomining

+
+ + {{/* Tagline */}} +
+

+ Open-source tools for every stage of the single-cell image-based profiling workflow. +

+
+ + {{/* Pipeline visualization โ€” core tools only */}} +
+
+
+ ๐Ÿ”ฌ Raw Images +
+ โ†’ +
+ ๐Ÿ“Š Feature Extraction +
+ โ†’ + CytoTable + โ†’ + coSMicQC + โ†’ + pycytominer + โ†’ + copairs +
+

+ ingest  ยท  QC  ยท  process  ยท  evaluate +

+
+ + {{/* CTA buttons */}} + + + {{/* Secondary links */}} + + +
+
+{{ end }} diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..7ff6c8f --- /dev/null +++ b/public/404.html @@ -0,0 +1,400 @@ + + + + + + + + + + + + + 404 Page not found · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ +

Page Not Found ๐Ÿ˜•

+

+ Error 404 +

+
+

It seems that the page you've requested does not exist.

+
+ +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/about/index.html b/public/about/index.html new file mode 100644 index 0000000..2e0c2e0 --- /dev/null +++ b/public/about/index.html @@ -0,0 +1,414 @@ + + + + + + + + + + + + + About · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ + +
+ +

About

+
+
+ +
+

Cytomining is an open-source software ecosystem that maintains essential tools, workflows, and best practices for single-cell image-based profiling and microscopy data analysis research. +We are proud members of the CytoData scientific community.

+ +
+
+ +
+

+ There's no articles to list here yet. +

+
+ + +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/about/index.xml b/public/about/index.xml new file mode 100644 index 0000000..1c4492f --- /dev/null +++ b/public/about/index.xml @@ -0,0 +1,11 @@ + + + + About on Cytomining + http://localhost:1314/about/ + Recent content in About on Cytomining + Hugo + en + + + diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000..baadce5 Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000..b73f257 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..e6e4e8c Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/categories/index.html b/public/categories/index.html new file mode 100644 index 0000000..446dd0a --- /dev/null +++ b/public/categories/index.html @@ -0,0 +1,402 @@ + + + + + + + + + + + + + Categories · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ +
+ +

Categories

+
+ +
+ +
+ +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/categories/index.xml b/public/categories/index.xml new file mode 100644 index 0000000..861ad8b --- /dev/null +++ b/public/categories/index.xml @@ -0,0 +1,11 @@ + + + + Categories on Cytomining + http://localhost:1314/categories/ + Recent content in Categories on Cytomining + Hugo + en + + + diff --git a/public/contact/index.html b/public/contact/index.html new file mode 100644 index 0000000..c9b0113 --- /dev/null +++ b/public/contact/index.html @@ -0,0 +1,417 @@ + + + + + + + + + + + + + Contact · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ + +
+ +

Contact

+
+
+ +
+ + +
+
+ +
+

+ There's no articles to list here yet. +

+
+ + +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/contact/index.xml b/public/contact/index.xml new file mode 100644 index 0000000..2c86716 --- /dev/null +++ b/public/contact/index.xml @@ -0,0 +1,11 @@ + + + + Contact on Cytomining + http://localhost:1314/contact/ + Recent content in Contact on Cytomining + Hugo + en + + + diff --git a/public/css/main.bundle.min.035e4b76e168599b67aeb90a6a4aa9f874c79ca95b5d25f37b0900f38084a11d.css b/public/css/main.bundle.min.035e4b76e168599b67aeb90a6a4aa9f874c79ca95b5d25f37b0900f38084a11d.css new file mode 100644 index 0000000..b4ecc26 --- /dev/null +++ b/public/css/main.bundle.min.035e4b76e168599b67aeb90a6a4aa9f874c79ca95b5d25f37b0900f38084a11d.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}}.logo-light{display:block;max-width:100%;height:auto}.logo-dark{display:none;max-width:100%;height:auto}html.dark .logo-light{display:none}html.dark .logo-dark{display:block}@keyframes fadeUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.hero-fade-1{animation:fadeUp .65s cubic-bezier(.22,1,.36,1)both}.hero-fade-2{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).12s both}.hero-fade-3{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).24s both}.hero-fade-4{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).36s both}.hero-fade-5{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).48s both}.pipeline-step{transition:transform .2s ease,box-shadow .2s ease}.pipeline-step:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}html.dark .hero-tagline{color:#9ca3af!important}html.dark .hero-arrow{color:#4b5563!important}html.dark .hero-stage-label{color:#6b7280!important}html.dark .hero-pill-neutral{background:#1f2937!important;border-color:#374151!important;color:#d1d5db!important}html.dark .hero-pill-purple{background:#2e1065!important;border-color:#4c1d95!important;color:#c4b5fd!important}html.dark .hero-pill-blue{background:#1e3a5f!important;border-color:#1e40af!important;color:#93c5fd!important}html.dark .hero-pill-green{background:#052e16!important;border-color:#166534!important;color:#86efac!important}html.dark .hero-btn-primary{background:#3b82f6!important}html.dark .hero-btn-outline{border-color:#374151!important;color:#d1d5db!important}html.dark .hero-secondary-link{color:#6b7280!important;border-bottom-color:#374151!important} \ No newline at end of file diff --git a/public/css/main.bundle.min.0f028ba75a858b9f7c1d3385287158ddfd26a57d8a4e9a83fd33b7d30d8fb2ae.css b/public/css/main.bundle.min.0f028ba75a858b9f7c1d3385287158ddfd26a57d8a4e9a83fd33b7d30d8fb2ae.css new file mode 100644 index 0000000..9050f07 --- /dev/null +++ b/public/css/main.bundle.min.0f028ba75a858b9f7c1d3385287158ddfd26a57d8a4e9a83fd33b7d30d8fb2ae.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}} \ No newline at end of file diff --git a/public/css/main.bundle.min.401c393f8feee7b168f9c840a689dd2705f3d82b893fdc2cae8787c6b1b658e2.css b/public/css/main.bundle.min.401c393f8feee7b168f9c840a689dd2705f3d82b893fdc2cae8787c6b1b658e2.css new file mode 100644 index 0000000..91a434a --- /dev/null +++ b/public/css/main.bundle.min.401c393f8feee7b168f9c840a689dd2705f3d82b893fdc2cae8787c6b1b658e2.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}}.logo-light{display:block;max-width:100%;height:auto}.logo-dark{display:none;max-width:100%;height:auto}html.dark .logo-light{display:none}html.dark .logo-dark{display:block}html.dark .v2-callout{background:#1e3a5f!important;border-color:#3b82f6!important}html.dark .v2-callout p{color:#93c5fd!important}html.dark .v2-callout strong{color:#bfdbfe!important}html.dark .problem-card{background:#1f2937!important;border-color:#374151!important}html.dark .problem-card p{color:#9ca3af!important}html.dark .problem-card strong{color:#d1d5db!important}html.dark .v2-pipeline-step-neutral{background:#1f2937!important;border-color:#374151!important;color:#d1d5db!important}html.dark .v2-pipeline-step-purple{background:#2e1065!important;border-color:#4c1d95!important;color:#c4b5fd!important}html.dark .v2-pipeline-step-blue{background:#1e3a5f!important;border-color:#1e40af!important;color:#93c5fd!important}html.dark .v2-pipeline-step-yellow{background:#422006!important;border-color:#854d0e!important;color:#fde68a!important}html.dark .v2-pipeline-step-green{background:#052e16!important;border-color:#166534!important;color:#86efac!important}@keyframes fadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}.hero-fade-1{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).15s both}.hero-fade-2{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).3s both}.hero-fade-3{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).45s both}.hero-fade-4{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).6s both}.hero-fade-5{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).75s both}.list-logo-light{display:block}.list-logo-dark{display:none}html.dark .list-logo-light{display:none!important}html.dark .list-logo-dark{display:block!important}.pipeline-step{transition:transform .25s cubic-bezier(.34,1.56,.64,1),box-shadow .2s ease}.pipeline-step:hover{transform:translateY(-4px)scale(1.04);box-shadow:0 6px 16px rgba(0,0,0,.13)}html.dark .pipeline-step:hover{box-shadow:0 6px 16px rgba(0,0,0,.45)}.pill-icon{height:14px;width:14px;object-fit:contain;vertical-align:middle;margin-right:4px;border-radius:2px;display:inline-block;position:relative;top:-1px}html.dark .hero-tagline{color:#9ca3af!important}html.dark .hero-arrow{color:#4b5563!important}html.dark .hero-stage-label{color:#6b7280!important}html.dark .hero-pill-neutral{background:#1f2937!important;border-color:#374151!important;color:#d1d5db!important}html.dark .hero-pill-purple{background:#2e1065!important;border-color:#4c1d95!important;color:#c4b5fd!important}html.dark .hero-pill-blue{background:#1e3a5f!important;border-color:#1e40af!important;color:#93c5fd!important}html.dark .hero-pill-green{background:#052e16!important;border-color:#166534!important;color:#86efac!important}html.dark .hero-btn-primary{background:#3b82f6!important}html.dark .hero-btn-outline{border-color:#374151!important;color:#d1d5db!important}html.dark .hero-secondary-link{color:#6b7280!important;border-bottom-color:#374151!important} \ No newline at end of file diff --git a/public/css/main.bundle.min.6be8ddf1d1cbb5ac1c361c93bfa008f96eea5fec79b0159a83621a28750f57c7.css b/public/css/main.bundle.min.6be8ddf1d1cbb5ac1c361c93bfa008f96eea5fec79b0159a83621a28750f57c7.css new file mode 100644 index 0000000..c4cbfdf --- /dev/null +++ b/public/css/main.bundle.min.6be8ddf1d1cbb5ac1c361c93bfa008f96eea5fec79b0159a83621a28750f57c7.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}}.logo-light{display:block;max-width:100%;height:auto}.logo-dark{display:none;max-width:100%;height:auto}html.dark .logo-light{display:none}html.dark .logo-dark{display:block}@keyframes fadeUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.hero-fade-1{animation:fadeUp .65s cubic-bezier(.22,1,.36,1)both}.hero-fade-2{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).12s both}.hero-fade-3{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).24s both}.hero-fade-4{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).36s both}.hero-fade-5{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).48s both}.pipeline-step{transition:transform .2s ease,box-shadow .2s ease}.pipeline-step:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}html.dark .pipeline-step:hover{box-shadow:0 4px 12px rgba(0,0,0,.4)} \ No newline at end of file diff --git a/public/css/main.bundle.min.9950f9f7b74113ba9a57b002aacbe35d6116d49ad868e4980a5375995bc43326.css b/public/css/main.bundle.min.9950f9f7b74113ba9a57b002aacbe35d6116d49ad868e4980a5375995bc43326.css new file mode 100644 index 0000000..69108ef --- /dev/null +++ b/public/css/main.bundle.min.9950f9f7b74113ba9a57b002aacbe35d6116d49ad868e4980a5375995bc43326.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}}.logo-light{display:block;max-width:100%;height:auto}.logo-dark{display:none;max-width:100%;height:auto}html.dark .logo-light{display:none}html.dark .logo-dark{display:block}@keyframes fadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}.hero-fade-1{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).15s both}.hero-fade-2{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).3s both}.hero-fade-3{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).45s both}.hero-fade-4{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).6s both}.hero-fade-5{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).75s both}.list-logo-light{display:block}.list-logo-dark{display:none}html.dark .list-logo-light{display:none!important}html.dark .list-logo-dark{display:block!important}.pipeline-step{transition:transform .2s ease,box-shadow .2s ease}.pipeline-step:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}html.dark .hero-tagline{color:#9ca3af!important}html.dark .hero-arrow{color:#4b5563!important}html.dark .hero-stage-label{color:#6b7280!important}html.dark .hero-pill-neutral{background:#1f2937!important;border-color:#374151!important;color:#d1d5db!important}html.dark .hero-pill-purple{background:#2e1065!important;border-color:#4c1d95!important;color:#c4b5fd!important}html.dark .hero-pill-blue{background:#1e3a5f!important;border-color:#1e40af!important;color:#93c5fd!important}html.dark .hero-pill-green{background:#052e16!important;border-color:#166534!important;color:#86efac!important}html.dark .hero-btn-primary{background:#3b82f6!important}html.dark .hero-btn-outline{border-color:#374151!important;color:#d1d5db!important}html.dark .hero-secondary-link{color:#6b7280!important;border-bottom-color:#374151!important} \ No newline at end of file diff --git a/public/css/main.bundle.min.b581e64b582cabe10cc0bb129fb19600bd1dec02ce1b7f2f6a50fbdebc4d6176.css b/public/css/main.bundle.min.b581e64b582cabe10cc0bb129fb19600bd1dec02ce1b7f2f6a50fbdebc4d6176.css new file mode 100644 index 0000000..eb2ecc3 --- /dev/null +++ b/public/css/main.bundle.min.b581e64b582cabe10cc0bb129fb19600bd1dec02ce1b7f2f6a50fbdebc4d6176.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}}.logo-light{display:block;max-width:100%;height:auto}.logo-dark{display:none;max-width:100%;height:auto}html.dark .logo-light{display:none}html.dark .logo-dark{display:block}html.dark .v2-callout{background:#1e3a5f!important;border-color:#3b82f6!important}html.dark .v2-callout p{color:#93c5fd!important}html.dark .v2-callout strong{color:#bfdbfe!important}html.dark .problem-card{background:#1f2937!important;border-color:#374151!important}html.dark .problem-card p{color:#9ca3af!important}html.dark .problem-card strong{color:#d1d5db!important}html.dark .v2-pipeline-step-neutral{background:#1f2937!important;border-color:#374151!important;color:#d1d5db!important}html.dark .v2-pipeline-step-purple{background:#2e1065!important;border-color:#4c1d95!important;color:#c4b5fd!important}html.dark .v2-pipeline-step-blue{background:#1e3a5f!important;border-color:#1e40af!important;color:#93c5fd!important}html.dark .v2-pipeline-step-yellow{background:#422006!important;border-color:#854d0e!important;color:#fde68a!important}html.dark .v2-pipeline-step-green{background:#052e16!important;border-color:#166534!important;color:#86efac!important}@keyframes fadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}.hero-fade-1{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).15s both}.hero-fade-2{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).3s both}.hero-fade-3{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).45s both}.hero-fade-4{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).6s both}.hero-fade-5{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).75s both}.list-logo-light{display:block}.list-logo-dark{display:none}html.dark .list-logo-light{display:none!important}html.dark .list-logo-dark{display:block!important}.pipeline-step{transition:transform .2s ease,box-shadow .2s ease}.pipeline-step:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}html.dark .hero-tagline{color:#9ca3af!important}html.dark .hero-arrow{color:#4b5563!important}html.dark .hero-stage-label{color:#6b7280!important}html.dark .hero-pill-neutral{background:#1f2937!important;border-color:#374151!important;color:#d1d5db!important}html.dark .hero-pill-purple{background:#2e1065!important;border-color:#4c1d95!important;color:#c4b5fd!important}html.dark .hero-pill-blue{background:#1e3a5f!important;border-color:#1e40af!important;color:#93c5fd!important}html.dark .hero-pill-green{background:#052e16!important;border-color:#166534!important;color:#86efac!important}html.dark .hero-btn-primary{background:#3b82f6!important}html.dark .hero-btn-outline{border-color:#374151!important;color:#d1d5db!important}html.dark .hero-secondary-link{color:#6b7280!important;border-bottom-color:#374151!important} \ No newline at end of file diff --git a/public/css/main.bundle.min.c60786616948592c97e88727599412c19aa8ab64c87e7c86bb0080b3af98e150.css b/public/css/main.bundle.min.c60786616948592c97e88727599412c19aa8ab64c87e7c86bb0080b3af98e150.css new file mode 100644 index 0000000..07f7c66 --- /dev/null +++ b/public/css/main.bundle.min.c60786616948592c97e88727599412c19aa8ab64c87e7c86bb0080b3af98e150.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}}.logo-light{display:block;max-width:100%;height:auto}.logo-dark{display:none;max-width:100%;height:auto}html.dark .logo-light{display:none}html.dark .logo-dark{display:block}@keyframes fadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}.hero-fade-1{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).15s both}.hero-fade-2{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).3s both}.hero-fade-3{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).45s both}.hero-fade-4{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).6s both}.hero-fade-5{animation:fadeUp .7s cubic-bezier(.22,1,.36,1).75s both}.pipeline-step{transition:transform .2s ease,box-shadow .2s ease}.pipeline-step:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}html.dark .hero-tagline{color:#9ca3af!important}html.dark .hero-arrow{color:#4b5563!important}html.dark .hero-stage-label{color:#6b7280!important}html.dark .hero-pill-neutral{background:#1f2937!important;border-color:#374151!important;color:#d1d5db!important}html.dark .hero-pill-purple{background:#2e1065!important;border-color:#4c1d95!important;color:#c4b5fd!important}html.dark .hero-pill-blue{background:#1e3a5f!important;border-color:#1e40af!important;color:#93c5fd!important}html.dark .hero-pill-green{background:#052e16!important;border-color:#166534!important;color:#86efac!important}html.dark .hero-btn-primary{background:#3b82f6!important}html.dark .hero-btn-outline{border-color:#374151!important;color:#d1d5db!important}html.dark .hero-secondary-link{color:#6b7280!important;border-bottom-color:#374151!important} \ No newline at end of file diff --git a/public/css/main.bundle.min.d0d897761b4b9f9aa9aec7e59d64da0c585a3895f7fad114e96fef6fc06cee6a.css b/public/css/main.bundle.min.d0d897761b4b9f9aa9aec7e59d64da0c585a3895f7fad114e96fef6fc06cee6a.css new file mode 100644 index 0000000..26cd459 --- /dev/null +++ b/public/css/main.bundle.min.d0d897761b4b9f9aa9aec7e59d64da0c585a3895f7fad114e96fef6fc06cee6a.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}}.logo-light{display:block;max-width:100%;height:auto}.logo-dark{display:none;max-width:100%;height:auto}html.dark .logo-light{display:none}html.dark .logo-dark{display:block} \ No newline at end of file diff --git a/public/css/main.bundle.min.d3e66634850c01cece26c1dcbbc6022a187c5af6a8a8a5697cee76ec44b8b17d.css b/public/css/main.bundle.min.d3e66634850c01cece26c1dcbbc6022a187c5af6a8a8a5697cee76ec44b8b17d.css new file mode 100644 index 0000000..533269b --- /dev/null +++ b/public/css/main.bundle.min.d3e66634850c01cece26c1dcbbc6022a187c5af6a8a8a5697cee76ec44b8b17d.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-neutral-950:2, 6, 23;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-primary-950:23, 37, 8;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99;--color-secondary-950:8, 51, 69}/*!Congo v2.13.0 | MIT License | https://github.com/jpanther/congo*/*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*!tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:rgba(var(--color-neutral),1);text-decoration:none;background-color:rgba(var(--color-primary-600),1);border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:600;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.9rem;border-radius:.25rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em;background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-700), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgb(17 24 39 / 10%);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-secondary-200),1);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){height:100vh;overflow:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}.prose blockquote:where([dir=rtl],[dir=rtl] *){border-left-width:0;border-right-width:4px;padding-right:1rem}.prose ul>li:where([dir=rtl],[dir=rtl] *),.prose ol>li:where([dir=rtl],[dir=rtl] *){margin-right:1.75rem;padding-left:0;padding-right:.5rem}.prose ol>li:where([dir=rtl],[dir=rtl] *):before,.prose ul>li:where([dir=rtl],[dir=rtl] *):before{left:auto;right:.25rem}.prose thead td:first-child:where([dir=rtl],[dir=rtl] *),.prose thead th:first-child:where([dir=rtl],[dir=rtl] *){padding-right:0}.prose thead td:last-child:where([dir=rtl],[dir=rtl] *),.prose thead th:last-child:where([dir=rtl],[dir=rtl] *){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc{max-height:100vh;overflow-y:auto;padding-bottom:50px}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}.toc ul ul{padding-inline-start:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.toc a:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.toc ul>li:where([dir=rtl],[dir=rtl] *){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1));opacity:.9}.copy-button:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.copy-button:hover:is(.dark *),.copy-button:focus:is(.dark *),.copy-button:active:is(.dark *),.copy-button:active:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.katex-display{overflow:auto hidden}table{display:block;overflow:auto}@media(min-width:768px){table{display:table}}code{word-wrap:break-word;overflow-wrap:break-word}.chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity,1));padding-top:.75rem;padding-bottom:.75rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.chroma:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity,1))}.chroma pre{margin:0;padding:0}.prose div.chroma{margin-bottom:1.5rem;margin-top:1.5rem}.chroma .lntable{margin:0;display:block;width:auto;overflow:auto;font-size:1rem;line-height:1.5rem}.chroma .lnt,.chroma .ln{margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity,1))}.chroma .lnt:is(.dark *),.chroma .ln:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.chroma .lntd{padding:0;vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{display:block;width:100%;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.chroma .hl:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .k:is(.dark *),.chroma .kd:is(.dark *),.chroma .kn:is(.dark *),.chroma .kp:is(.dark *),.chroma .kr:is(.dark *),.chroma .nc:is(.dark *),.chroma .fm:is(.dark *),.chroma .nn:is(.dark *),.chroma .vc:is(.dark *),.chroma .o:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kc:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .kt:is(.dark *),.chroma .nv:is(.dark *),.chroma .vi:is(.dark *),.chroma .vm:is(.dark *),.chroma .m:is(.dark *),.chroma .mb:is(.dark *),.chroma .mf:is(.dark *),.chroma .mh:is(.dark *),.chroma .mi:is(.dark *),.chroma .il:is(.dark *),.chroma .mo:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity,1))}.chroma .n:is(.dark *),.chroma .nd:is(.dark *),.chroma .ni:is(.dark *),.chroma .nl:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity,1))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity,1))}.chroma .na:is(.dark *),.chroma .nb:is(.dark *),.chroma .bp:is(.dark *),.chroma .nx:is(.dark *),.chroma .py:is(.dark *),.chroma .nt:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity,1))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .no:is(.dark *),.chroma .ne:is(.dark *),.chroma .vg:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity,1))}.chroma .nf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gd,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .l:is(.dark *),.chroma .ld:is(.dark *),.chroma .s:is(.dark *),.chroma .sa:is(.dark *),.chroma .sb:is(.dark *),.chroma .sc:is(.dark *),.chroma .dl:is(.dark *),.chroma .sd:is(.dark *),.chroma .s2:is(.dark *),.chroma .sh:is(.dark *),.chroma .si:is(.dark *),.chroma .sx:is(.dark *),.chroma .s1:is(.dark *),.chroma .gd:is(.dark *),.chroma .gi:is(.dark *),.chroma .go:is(.dark *),.chroma .gp:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity,1))}.chroma .se:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity,1))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity,1))}.chroma .sr:is(.dark *),.chroma .ss:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.chroma .ow:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .c:is(.dark *),.chroma .cm:is(.dark *),.chroma .c1:is(.dark *),.chroma .cs:is(.dark *),.chroma .cp:is(.dark *),.chroma .cpf:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .ch:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.chroma .gl{text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-start-6{inset-inline-start:-1.5rem}.bottom-0{bottom:0}.bottom-7{bottom:1.75rem}.end-0{inset-inline-end:0}.top-0{top:0}.top-20{top:5rem}.top-\[100vh\]{top:100vh}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-first{order:-9999}.m-1{margin:.25rem}.m-auto{margin:auto}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ms-5{margin-inline-start:-1.25rem}.-mt-3{margin-top:-.75rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[2px\]{margin-bottom:2px}.me-14{margin-inline-end:3.5rem}.me-2{margin-inline-end:.5rem}.me-4{margin-inline-end:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.1rem\]{margin-top:.1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[10rem\]{max-height:10rem}.max-h-\[4\.5rem\]{max-height:4.5rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-24{width:6rem}.w-36{width:9rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[6rem\]{max-width:6rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.flex-auto{flex:auto}.flex-none{flex:none}.flex-grow{flex-grow:1}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity,1))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity,1))}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity,1))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity,1))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity,1))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity,1))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity,1))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-4{padding-bottom:1rem}.pe-10{padding-inline-end:2.5rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-5{padding-inline-end:1.25rem}.ps-2{padding-inline-start:.5rem}.ps-5{padding-inline-start:1.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))!important}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity,1))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.\!no-underline{text-decoration-line:none!important}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:rgba(var(--color-secondary-400),1)}.first\:mt-8:first-child{margin-top:2rem}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity,1))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))!important}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity,1))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity,1))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity,1))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity,1))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-\[-2px\]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:-translate-x-\[2px\]{--tw-translate-x:-2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity,1))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group:hover .group-hover\:decoration-2{text-decoration-thickness:2px}.group:hover .group-hover\:underline-offset-2{text-underline-offset:2px}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:inline:is(.dark *){display:inline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:border-neutral-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity,1))}.dark\:border-neutral-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity,1))}.dark\:border-primary-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:bg-neutral-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity,1))}.dark\:bg-neutral-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity,1))}.dark\:bg-neutral-800\/50:is(.dark *){background-color:rgba(var(--color-neutral-800),.5)}.dark\:bg-neutral-900\/50:is(.dark *){background-color:rgba(var(--color-neutral-900),.5)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:bg-primary-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity,1))}.dark\:bg-primary-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:text-neutral:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity,1))}.dark\:text-neutral-100:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity,1))}.dark\:text-neutral-300:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity,1))}.dark\:text-neutral-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity,1))}.dark\:text-neutral-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity,1))}.dark\:text-neutral-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:hover\:border-primary-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity,1))}.dark\:hover\:\!bg-primary-700:hover:is(.dark *){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity,1))!important}.dark\:hover\:bg-primary-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity,1))}.dark\:hover\:bg-primary-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.dark\:hover\:text-neutral-800:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity,1))}.dark\:hover\:text-primary-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}.dark\:focus\:bg-primary-900:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity,1))}.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity,1))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:me-7{margin-inline-end:1.75rem}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:max-h-\[7\.5rem\]{max-height:7.5rem}.sm\:w-1\/2{width:50%}.sm\:w-40{width:10rem}.sm\:max-w-\[10rem\]{max-width:10rem}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:me-0:last-child{margin-inline-end:0}.sm\:last\:me-0\.5:last-child{margin-inline-end:.125rem}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:ps-8{padding-inline-start:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:block:where([dir=ltr],[dir=ltr] *){display:block}.ltr\:inline:where([dir=ltr],[dir=ltr] *){display:inline}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:block:where([dir=rtl],[dir=rtl] *){display:block}.rtl\:inline:where([dir=rtl],[dir=rtl] *){display:inline}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}@media print{.print\:hidden{display:none}}.logo-light{display:block;max-width:100%;height:auto}.logo-dark{display:none;max-width:100%;height:auto}html.dark .logo-light{display:none}html.dark .logo-dark{display:block}@keyframes fadeUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.hero-fade-1{animation:fadeUp .65s cubic-bezier(.22,1,.36,1)both}.hero-fade-2{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).12s both}.hero-fade-3{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).24s both}.hero-fade-4{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).36s both}.hero-fade-5{animation:fadeUp .65s cubic-bezier(.22,1,.36,1).48s both}.pipeline-step{transition:transform .2s ease,box-shadow .2s ease}.pipeline-step:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}html.dark .hero-tagline{color:#9ca3af}html.dark .hero-arrow{color:#4b5563}html.dark .hero-stage-label{color:#6b7280}html.dark .hero-pill-neutral{background:#1f2937;border-color:#374151;color:#d1d5db}html.dark .hero-pill-purple{background:#2e1065;border-color:#4c1d95;color:#c4b5fd}html.dark .hero-pill-blue{background:#1e3a5f;border-color:#1e40af;color:#93c5fd}html.dark .hero-pill-green{background:#052e16;border-color:#166534;color:#86efac}html.dark .hero-btn-primary{background:#3b82f6}html.dark .hero-btn-outline{border-color:#374151;color:#d1d5db}html.dark .hero-secondary-link{color:#6b7280;border-bottom-color:#374151} \ No newline at end of file diff --git a/docs/cytosnake/index.html b/public/cytosnake/index.html similarity index 65% rename from docs/cytosnake/index.html rename to public/cytosnake/index.html index 4e90364..3ce12db 100644 --- a/docs/cytosnake/index.html +++ b/public/cytosnake/index.html @@ -5,9 +5,9 @@ - Redirecting to https://cytosnake.readthedocs.io/ + Redirecting to CytoSnake docs - Redirecting to https://cytosnake.readthedocs.io/ + Redirecting to CytoSnake documentation. diff --git a/docs/cytotable/index.html b/public/cytotable/index.html similarity index 70% rename from docs/cytotable/index.html rename to public/cytotable/index.html index feb2c47..7c14d15 100644 --- a/docs/cytotable/index.html +++ b/public/cytotable/index.html @@ -2,12 +2,12 @@ - + - - Redirecting to https://cytomining.github.io/CytoTable + + Redirecting to CytoTable docs - Redirecting to https://cytomining.github.io/CytoTable + Redirecting to CytoTable documentation. diff --git a/public/experimental/buscar/index.html b/public/experimental/buscar/index.html new file mode 100644 index 0000000..2f1cdc1 --- /dev/null +++ b/public/experimental/buscar/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + + buscar · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ +
+
+ +

+ buscar +

+ + +
+
+ +
+ buscar logo +buscar logo +

buscar is a Python package for reproducible hit calling in high-content screening. +Rather than averaging cells into population-level summaries, it operates on individual cell distributions to preserve biological heterogeneity and identify perturbations with on-target morphological signatures.

+

Key capabilities:

+
    +
  • Define on-target and off-target morphology signatures from reference profiles
  • +
  • Score perturbation efficacy via Earth Mover’s Distance
  • +
  • Assess specificity with off-target scoring to reduce false positives
  • +
  • Preserve single-cell heterogeneity throughout hit calling
  • +
  • Integrates directly with pycytominer, coSMicQC, and CytoTable workflows
  • +
+

View on GitHub โ†’

+ +
+
+ +
+ +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/experimental/iceberg-bioimage/index.html b/public/experimental/iceberg-bioimage/index.html new file mode 100644 index 0000000..d25b488 --- /dev/null +++ b/public/experimental/iceberg-bioimage/index.html @@ -0,0 +1,532 @@ + + + + + + + + + + + + + iceberg-bioimage · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ +
+
+ +

+ iceberg-bioimage +

+ + +
+
+ +
+ iceberg-bioimage logo +

iceberg-bioimage is a Python package that catalogs bioimaging data using Apache Iceberg. +It scans image stores across formats, publishes structured metadata tables, and exports layouts compatible with the Cytomining profiling ecosystem โ€” bridging raw image archives and downstream analysis pipelines.

+

Key capabilities:

+
    +
  • Scan image stores into canonical ScanResult objects
  • +
  • Publish image metadata with PyIceberg for versioned, queryable catalogs
  • +
  • Export Cytomining-compatible Parquet warehouses for profiling workflows
  • +
  • Validate profile tables against microscopy join contracts
  • +
  • Supports Zarr, OME-TIFF, and Parquet source formats
  • +
+

View documentation โ†’

+ +
+
+ +
+ +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/experimental/index.html b/public/experimental/index.html new file mode 100644 index 0000000..d163df6 --- /dev/null +++ b/public/experimental/index.html @@ -0,0 +1,771 @@ + + + + + + + + + + + + + Experimental · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ +
+ + +

Experimental Tools

+

+ Next-generation tools under active development in the WayScience organization, + designed to become the foundation of Cytomining v2. +

+ + +
+

What does Cytomining v2 solve?

+

+ The current Cytomining stack was designed around 2D single-cell data from CellProfiler. + As the field moves toward 3D organoid imaging, larger-scale archives, and deep learning feature extraction, + several gaps have emerged: no standardized image catalog, images and features stored separately, no 3D support, and hit calling that collapses single-cell heterogeneity. + The tools below are purpose-built to close each of these gaps โ€” together forming a fully traceable, format-agnostic, 3D-capable profiling pipeline. +

+
+ +

Cytomining v2 pipeline

+
+
+ +
+
๐Ÿ”ฌ Raw Images
+
+ + โ†’ + +
+ iceberg-bioimage + catalog +
+ + โ†’ + +
+ OME-arrow + store +
+ + โ†’ + +
+
๐Ÿ“Š Feature Extraction
+
+ + โ†’ + +
+ zedprofiler 3D + 3D extract +
+ + โ†’ + +
+ CytoTable + harmonize +
+ + โ†’ + +
+ coSMicQC + QC +
+ + โ†’ + +
+ pycytominer + process +
+ + โ†’ + +
+ buscar + hit call +
+ +
+
+

+ Yellow = new 3D-capable step. Purple = new data infrastructure. Blue = existing Cytomining tools. +

+ + +

What each tool solves

+ +
+ +
+ ๐Ÿ—„๏ธ +
+

iceberg-bioimage

+

Problem: Raw bioimaging archives have no standard catalog โ€” finding, versioning, and joining images to downstream data requires bespoke scripts per lab. Solution: Scans any image store into a versioned Apache Iceberg catalog that directly exports Cytomining-compatible Parquet warehouses.

+
+
+ +
+ ๐Ÿน +
+

OME-arrow

+

Problem: Images and feature tables live in separate systems โ€” linking a numeric outlier back to its source cell requires error-prone manual joins across formats. Solution: Embeds images as first-class columns in Arrow tables so features, metadata, and pixel data travel together and can be queried or exported as tensors.

+
+
+ +
+ ๐Ÿ“ฆ +
+

zedprofiler

+

Problem: Classical profiling tools only extract 2D features โ€” organoid, cleared-tissue, and confocal z-stack experiments are left without a first-class CPU-efficient feature extractor. Solution: Extracts morphological features directly from 3D volumetric images with anisotropic spacing correction, no GPU required.

+
+
+ +
+ ๐Ÿ” +
+

buscar

+

Problem: Population-level hit calling averages away biologically meaningful cell-to-cell variation โ€” heterogeneous responses and rare subpopulations are invisible to copairs-style metrics. Solution: Scores perturbation efficacy and specificity directly on single-cell distributions using Earth Mover's Distance, preserving heterogeneity throughout hit calling.

+
+
+ +
+ + +

Tools

+ +
+
+ + + buscar icon + +

+ + buscar + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
+ Hit calling โ€” identifies biologically active perturbations from single-cell morphological profiles using distribution-level scoring. +
+ +
+
+ + +
+
+ + + iceberg-bioimage icon + +

+ + iceberg-bioimage + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
+ Data cataloging โ€” scans bioimaging stores and publishes image metadata to Cytomining-compatible Parquet warehouses via Apache Iceberg. +
+ +
+
+ + +
+
+ + + OME-arrow icon + +

+ + OME-arrow + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
+ Image storage โ€” stores microscopy images alongside metadata and derived data in a unified, queryable Apache Arrow format. +
+ +
+
+ + +
+
+ + +

+ + zedprofiler + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
+ 3D feature extraction โ€” extracts morphological features from volumetric microscopy images for CPU-efficient high-content profiling. +
+ +
+
+ + + +
+ +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/experimental/index.xml b/public/experimental/index.xml new file mode 100644 index 0000000..09205f4 --- /dev/null +++ b/public/experimental/index.xml @@ -0,0 +1,39 @@ + + + + Experimental on Cytomining + http://localhost:1314/experimental/ + Recent content in Experimental on Cytomining + Hugo + en + + + buscar + http://localhost:1314/experimental/buscar/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/experimental/buscar/ + <img class="logo-light" src="https://raw.githubusercontent.com/WayScience/buscar/main/logo/with-text-for-light-bg.png" alt="buscar logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/WayScience/buscar/main/logo/with-text-for-dark-bg.png" alt="buscar logo" width="400"> <p>buscar is a Python package for reproducible hit calling in high-content screening. Rather than averaging cells into population-level summaries, it operates on individual cell distributions to preserve biological heterogeneity and identify perturbations with on-target morphological signatures.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Define on-target and off-target morphology signatures from reference profiles</li> <li>Score perturbation efficacy via Earth Mover&rsquo;s Distance</li> <li>Assess specificity with off-target scoring to reduce false positives</li> <li>Preserve single-cell heterogeneity throughout hit calling</li> <li>Integrates directly with pycytominer, coSMicQC, and CytoTable workflows</li> </ul> <p><strong><a href="https://github.com/WayScience/buscar" target="_blank" rel="noreferrer">View on GitHub โ†’</a></strong></p> + + + iceberg-bioimage + http://localhost:1314/experimental/iceberg-bioimage/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/experimental/iceberg-bioimage/ + <img src="https://raw.githubusercontent.com/WayScience/iceberg-bioimage/main/docs/src/_static/iceberg-bioimage-logo.png" alt="iceberg-bioimage logo" width="400"> <p>iceberg-bioimage is a Python package that catalogs bioimaging data using Apache Iceberg. It scans image stores across formats, publishes structured metadata tables, and exports layouts compatible with the Cytomining profiling ecosystem โ€” bridging raw image archives and downstream analysis pipelines.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Scan image stores into canonical <code>ScanResult</code> objects</li> <li>Publish image metadata with PyIceberg for versioned, queryable catalogs</li> <li>Export Cytomining-compatible Parquet warehouses for profiling workflows</li> <li>Validate profile tables against microscopy join contracts</li> <li>Supports Zarr, OME-TIFF, and Parquet source formats</li> </ul> <p><strong><a href="https://wayscience.github.io/iceberg-bioimage/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + OME-arrow + http://localhost:1314/experimental/ome-arrow/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/experimental/ome-arrow/ + <img src="https://raw.githubusercontent.com/WayScience/OME-arrow/main/docs/src/_static/ome-arrow-logo.png" alt="OME-arrow logo" width="400"> <p>OME-arrow brings Open Microscopy Environment (OME) specifications to Apache Arrow, enabling microscopy images to be stored directly in data tables alongside their metadata and derived features as multilayer structs. This makes bioimaging data fast to query, easy to share, and compatible with modern tensor-based ML workflows.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Store images, metadata, and derived features together in a single table</li> <li>Support for TIFF, OME-Zarr, NumPy, and Parquet source formats</li> <li>Lazy reading and region-of-interest (ROI) access for large datasets</li> <li>Tensor-focused output compatible with PyTorch, JAX, and DLPack</li> <li>Visualization integrations for matplotlib, PyVista, and Napari</li> </ul> <p><strong><a href="https://wayscience.github.io/ome-arrow/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + zedprofiler + http://localhost:1314/experimental/zedprofiler/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/experimental/zedprofiler/ + <p>zedprofiler is a CPU-first toolkit for extracting morphological features from 3D volumetric microscopy images. It is designed for high-content and high-throughput workflows where classical segmentation-and-measurement pipelines need to scale to single-cell features in z-stacks.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Extract features from 3D volumetric (z-stack) single-cell images</li> <li>Multi-channel fluorescence microscopy support</li> <li>Anisotropic voxel spacing correction for accurate 3D measurements</li> <li>Modular, extensible architecture for custom feature sets</li> <li>CPU-optimized for high-throughput processing without GPU dependency</li> </ul> <p><strong><a href="https://github.com/WayScience/zedprofiler" target="_blank" rel="noreferrer">View on GitHub โ†’</a></strong></p> + + + diff --git a/public/experimental/ome-arrow/index.html b/public/experimental/ome-arrow/index.html new file mode 100644 index 0000000..ee92ee7 --- /dev/null +++ b/public/experimental/ome-arrow/index.html @@ -0,0 +1,532 @@ + + + + + + + + + + + + + OME-arrow · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ +
+
+ +

+ OME-arrow +

+ + +
+
+ +
+ OME-arrow logo +

OME-arrow brings Open Microscopy Environment (OME) specifications to Apache Arrow, enabling microscopy images to be stored directly in data tables alongside their metadata and derived features as multilayer structs. +This makes bioimaging data fast to query, easy to share, and compatible with modern tensor-based ML workflows.

+

Key capabilities:

+
    +
  • Store images, metadata, and derived features together in a single table
  • +
  • Support for TIFF, OME-Zarr, NumPy, and Parquet source formats
  • +
  • Lazy reading and region-of-interest (ROI) access for large datasets
  • +
  • Tensor-focused output compatible with PyTorch, JAX, and DLPack
  • +
  • Visualization integrations for matplotlib, PyVista, and Napari
  • +
+

View documentation โ†’

+ +
+
+ +
+ +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/experimental/page/1/index.html b/public/experimental/page/1/index.html new file mode 100644 index 0000000..24723a6 --- /dev/null +++ b/public/experimental/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1314/experimental/ + + + + + diff --git a/public/experimental/zedprofiler/index.html b/public/experimental/zedprofiler/index.html new file mode 100644 index 0000000..3c4bc9a --- /dev/null +++ b/public/experimental/zedprofiler/index.html @@ -0,0 +1,514 @@ + + + + + + + + + + + + + zedprofiler · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ +
+
+ +

+ zedprofiler +

+ + +
+
+ +
+

zedprofiler is a CPU-first toolkit for extracting morphological features from 3D volumetric microscopy images. +It is designed for high-content and high-throughput workflows where classical segmentation-and-measurement pipelines need to scale to single-cell features in z-stacks.

+

Key capabilities:

+
    +
  • Extract features from 3D volumetric (z-stack) single-cell images
  • +
  • Multi-channel fluorescence microscopy support
  • +
  • Anisotropic voxel spacing correction for accurate 3D measurements
  • +
  • Modular, extensible architecture for custom feature sets
  • +
  • CPU-optimized for high-throughput processing without GPU dependency
  • +
+

View on GitHub โ†’

+ +
+
+ +
+ +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..c6a1a62 Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..d5a8b0a Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..2302fed Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/history/index.html b/public/history/index.html new file mode 100644 index 0000000..5163e51 --- /dev/null +++ b/public/history/index.html @@ -0,0 +1,413 @@ + + + + + + + + + + + + + History · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ + +
+ +

History

+
+
+ +
+

The Cytomining ecosystem has grown from early image-based profiling research into a comprehensive open-source software suite.

+ +
+
+ +
+

+ There's no articles to list here yet. +

+
+ + +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/history/index.xml b/public/history/index.xml new file mode 100644 index 0000000..f4e317d --- /dev/null +++ b/public/history/index.xml @@ -0,0 +1,11 @@ + + + + History on Cytomining + http://localhost:1314/history/ + Recent content in History on Cytomining + Hugo + en + + + diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..2b52ce0 --- /dev/null +++ b/public/index.html @@ -0,0 +1,473 @@ + + + + + + + + + + + + + + Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to main content +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ Cytomining +

Cytomining

+
+ + +
+

+ Open-source tools for every stage of the single-cell image-based profiling workflow. +

+
+ + +
+
+
+ ๐Ÿ”ฌ Raw Images +
+ โ†’ +
+ ๐Ÿ“Š Feature Extraction +
+ โ†’ + CytoTable + โ†’ + coSMicQC + โ†’ + pycytominer + โ†’ + copairs +
+

+ ingest  ยท  QC  ยท  process  ยท  evaluate +

+
+ + + + + + + +
+
+ +
+ + +
+ + +
+
+ + +

+ © + 2026 + Cytomining +

+ + + +
+
+ + + + +
+ +
+ +
+
+ + +
+ + +
+ + diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 0000000..21db00b --- /dev/null +++ b/public/index.xml @@ -0,0 +1,81 @@ + + + + Cytomining + http://localhost:1314/ + Recent content on Cytomining + Hugo + en + + + buscar + http://localhost:1314/experimental/buscar/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/experimental/buscar/ + <img class="logo-light" src="https://raw.githubusercontent.com/WayScience/buscar/main/logo/with-text-for-light-bg.png" alt="buscar logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/WayScience/buscar/main/logo/with-text-for-dark-bg.png" alt="buscar logo" width="400"> <p>buscar is a Python package for reproducible hit calling in high-content screening. Rather than averaging cells into population-level summaries, it operates on individual cell distributions to preserve biological heterogeneity and identify perturbations with on-target morphological signatures.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Define on-target and off-target morphology signatures from reference profiles</li> <li>Score perturbation efficacy via Earth Mover&rsquo;s Distance</li> <li>Assess specificity with off-target scoring to reduce false positives</li> <li>Preserve single-cell heterogeneity throughout hit calling</li> <li>Integrates directly with pycytominer, coSMicQC, and CytoTable workflows</li> </ul> <p><strong><a href="https://github.com/WayScience/buscar" target="_blank" rel="noreferrer">View on GitHub โ†’</a></strong></p> + + + copairs + http://localhost:1314/tools/copairs/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/copairs/ + <p>copairs is a Python package for evaluating the quality of morphological profiles by measuring how well a perturbation&rsquo;s profile can be retrieved relative to controls. It implements mean Average Precision (mAP) and related metrics widely used in the image-based profiling community.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Define matched pairs based on experimental metadata</li> <li>Compute mean Average Precision (mAP) for retrieval assessment</li> <li>Evaluate intra- vs. inter-group morphological similarity</li> <li>Scale efficiently to large screening datasets</li> </ul> <p><strong><a href="https://cytomining.github.io/copairs/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + coSMicQC + http://localhost:1314/tools/cosmicqc/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/cosmicqc/ + <img class="logo-light" src="https://raw.githubusercontent.com/cytomining/coSMicQC/main/media/logo/with-text-for-light-bg.png" alt="coSMicQC logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/cytomining/coSMicQC/main/media/logo/with-text-for-dark-bg.png" alt="coSMicQC logo" width="400"> <p>coSMicQC (Single-cell Morphology Quality Control) identifies and removes low-quality cells from image-based profiling datasets before downstream analysis. It catches common problems such as over-segmented nuclei, poorly segmented cells, and imaging artifacts.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Flag over-segmented, under-segmented, and poorly focused cells</li> <li>Apply threshold-based or z-score-based QC criteria</li> <li>Generate summary reports of QC outcomes</li> <li>Integrate seamlessly with CytoTable and pycytominer workflows</li> </ul> <p><strong><a href="https://cytomining.github.io/coSMicQC/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> <h2 id="publication" class="relative group">Publication <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#publication" aria-label="Anchor">#</a></span></h2><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 1.25rem; margin: 1.5rem 0;"> <div style="margin-bottom: 0.5rem;"> <span style="background: #6b7280; color: white; padding: 0.2rem 0.7rem; border-radius: 9999px; font-size: 0.78rem; font-weight: 600;">bioRxiv Preprint ยท 2025</span> </div> <p style="font-weight: 600; margin: 0.5rem 0 0.25rem;"> <a href="https://doi.org/10.1101/2025.10.14.682427">Stellar quality control for single-cell image-based profiling with coSMicQC</a> </p> + + + CytoDataFrame + http://localhost:1314/tools/cytodataframe/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/cytodataframe/ + <img class="logo-light" src="https://raw.githubusercontent.com/cytomining/CytoDataFrame/main/logo/with-text-for-light-bg.png" alt="CytoDataFrame logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/cytomining/CytoDataFrame/main/logo/with-text-for-dark-bg.png" alt="CytoDataFrame logo" width="400"> <p>CytoDataFrame extends the familiar pandas DataFrame interface to let researchers view and analyze single-cell morphological profiles alongside their corresponding microscopy images and segmentation masks โ€” all within a Jupyter notebook.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Display cell images inline with profile data in Jupyter</li> <li>Link numerical features directly to visual representations</li> <li>Overlay segmentation masks for quality inspection</li> <li>Built on top of pandas for full compatibility with existing workflows</li> </ul> <p><strong><a href="https://cytomining.github.io/CytoDataFrame/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + CytoTable + http://localhost:1314/tools/cytotable/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/cytotable/ + <img class="logo-light" src="https://raw.githubusercontent.com/cytomining/CytoTable/main/logo/with-text-for-light-bg.png" alt="CytoTable logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/cytomining/CytoTable/main/logo/with-text-for-dark-bg.png" alt="CytoTable logo" width="400"> <p>CytoTable harmonizes output from different high-content image analysis tools โ€” including CellProfiler, DeepProfiler, and IN Carta โ€” into a single, analysis-ready format. It scales to large datasets using Apache Parquet and DuckDB under the hood.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Convert CellProfiler SQLite, CSV, and other formats into Parquet</li> <li>Harmonize schema differences across analysis tools</li> <li>Scale to datasets with millions of single cells</li> <li>Produce outputs compatible with pycytominer and AnnData workflows</li> </ul> <p><strong><a href="https://cytomining.github.io/CytoTable/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + DeepProfiler + http://localhost:1314/tools/deepprofiler/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/deepprofiler/ + <img src="https://raw.githubusercontent.com/cytomining/DeepProfiler/main/figures/logo/banner.png" alt="DeepProfiler logo" width="400"> <p>DeepProfiler uses deep neural networks to extract morphological features directly from raw microscopy images, bypassing traditional segmentation-and-measurement pipelines. It is designed for high-throughput screens where deep learning representations outperform classical feature sets.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Train and apply convolutional neural networks for feature extraction</li> <li>Support for EfficientNet, ResNet, and custom architectures</li> <li>Crop and embed single cells from large microscopy images</li> <li>Produce embeddings compatible with pycytominer and downstream profiling workflows</li> </ul> <p><strong><a href="https://github.com/cytomining/DeepProfiler" target="_blank" rel="noreferrer">View on GitHub โ†’</a></strong></p> + + + iceberg-bioimage + http://localhost:1314/experimental/iceberg-bioimage/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/experimental/iceberg-bioimage/ + <img src="https://raw.githubusercontent.com/WayScience/iceberg-bioimage/main/docs/src/_static/iceberg-bioimage-logo.png" alt="iceberg-bioimage logo" width="400"> <p>iceberg-bioimage is a Python package that catalogs bioimaging data using Apache Iceberg. It scans image stores across formats, publishes structured metadata tables, and exports layouts compatible with the Cytomining profiling ecosystem โ€” bridging raw image archives and downstream analysis pipelines.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Scan image stores into canonical <code>ScanResult</code> objects</li> <li>Publish image metadata with PyIceberg for versioned, queryable catalogs</li> <li>Export Cytomining-compatible Parquet warehouses for profiling workflows</li> <li>Validate profile tables against microscopy join contracts</li> <li>Supports Zarr, OME-TIFF, and Parquet source formats</li> </ul> <p><strong><a href="https://wayscience.github.io/iceberg-bioimage/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + OME-arrow + http://localhost:1314/experimental/ome-arrow/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/experimental/ome-arrow/ + <img src="https://raw.githubusercontent.com/WayScience/OME-arrow/main/docs/src/_static/ome-arrow-logo.png" alt="OME-arrow logo" width="400"> <p>OME-arrow brings Open Microscopy Environment (OME) specifications to Apache Arrow, enabling microscopy images to be stored directly in data tables alongside their metadata and derived features as multilayer structs. This makes bioimaging data fast to query, easy to share, and compatible with modern tensor-based ML workflows.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Store images, metadata, and derived features together in a single table</li> <li>Support for TIFF, OME-Zarr, NumPy, and Parquet source formats</li> <li>Lazy reading and region-of-interest (ROI) access for large datasets</li> <li>Tensor-focused output compatible with PyTorch, JAX, and DLPack</li> <li>Visualization integrations for matplotlib, PyVista, and Napari</li> </ul> <p><strong><a href="https://wayscience.github.io/ome-arrow/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + pycytominer + http://localhost:1314/tools/pycytominer/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/pycytominer/ + <img class="logo-light" src="https://raw.githubusercontent.com/cytomining/pycytominer/main/logo/with-text-for-light-bg.png" alt="pycytominer logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/cytomining/pycytominer/main/logo/with-text-for-dark-bg.png" alt="pycytominer logo" width="400"> <p>pycytominer is the core Python package in the Cytomining ecosystem. It provides a clean, composable API for processing single-cell morphological profiles produced by tools like CellProfiler.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Aggregate single-cell data to well- or treatment-level profiles</li> <li>Annotate profiles with experimental metadata</li> <li>Normalize features using population-level statistics</li> <li>Select high-quality features and remove noise</li> <li>Output analysis-ready profiles in standard formats</li> </ul> <p><strong><a href="https://pycytominer.readthedocs.io/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> <h2 id="publication" class="relative group">Publication <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#publication" aria-label="Anchor">#</a></span></h2><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 1.25rem; margin: 1.5rem 0;"> <div style="margin-bottom: 0.5rem;"> <span style="background: #2563eb; color: white; padding: 0.2rem 0.7rem; border-radius: 9999px; font-size: 0.78rem; font-weight: 600;">Nature Methods ยท 2025</span> </div> <p style="font-weight: 600; margin: 0.5rem 0 0.25rem;"> <a href="https://doi.org/10.1038/s41592-025-02611-8">Reproducible image-based profiling with Pycytominer</a> </p> + + + zedprofiler + http://localhost:1314/experimental/zedprofiler/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/experimental/zedprofiler/ + <p>zedprofiler is a CPU-first toolkit for extracting morphological features from 3D volumetric microscopy images. It is designed for high-content and high-throughput workflows where classical segmentation-and-measurement pipelines need to scale to single-cell features in z-stacks.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Extract features from 3D volumetric (z-stack) single-cell images</li> <li>Multi-channel fluorescence microscopy support</li> <li>Anisotropic voxel spacing correction for accurate 3D measurements</li> <li>Modular, extensible architecture for custom feature sets</li> <li>CPU-optimized for high-throughput processing without GPU dependency</li> </ul> <p><strong><a href="https://github.com/WayScience/zedprofiler" target="_blank" rel="noreferrer">View on GitHub โ†’</a></strong></p> + + + diff --git a/public/js/appearance.min.8a082f81b27f3cb2ee528df0b0bdc39787034cf2cc34d4669fbc9977c929023c.js b/public/js/appearance.min.8a082f81b27f3cb2ee528df0b0bdc39787034cf2cc34d4669fbc9977c929023c.js new file mode 100644 index 0000000..adf580b --- /dev/null +++ b/public/js/appearance.min.8a082f81b27f3cb2ee528df0b0bdc39787034cf2cc34d4669fbc9977c929023c.js @@ -0,0 +1 @@ +const sitePreference=document.documentElement.getAttribute("data-default-appearance"),userPreference=localStorage.getItem("appearance");function getCSSValue(e){var t=window.getComputedStyle(document.documentElement).getPropertyValue(e);return"rgb("+t.replace(/\s+/g,"")+")"}function setThemeColor(){var e=document.querySelector("meta[name=theme-color]");return document.documentElement.classList.contains("dark")?e.setAttribute("content",getCSSValue("--color-neutral-800")):e.setAttribute("content",getCSSValue("--color-neutral")),!0}(sitePreference==="dark"&&userPreference===null||userPreference==="dark")&&(document.documentElement.classList.add("dark"),setThemeColor()),document.documentElement.getAttribute("data-auto-appearance")==="true"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches&&userPreference!=="light"&&(document.documentElement.classList.add("dark"),setThemeColor()),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{e.matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark"),setThemeColor()}));function add_to_top_elem(){var n=document.body,e=document.documentElement;const s=Math.max(n.scrollHeight,n.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight)-150,t=document.getElementById("to-top");if(t==null)return;t.hidden=s{add_to_top_elem(),setThemeColor();var t=document.querySelectorAll("[id^='appearance-switcher']");t.forEach(e=>{e.addEventListener("click",()=>{document.documentElement.classList.toggle("dark"),setThemeColor(),localStorage.setItem("appearance",document.documentElement.classList.contains("dark")?"dark":"light")}),e.addEventListener("contextmenu",e=>{e.preventDefault(),localStorage.removeItem("appearance")})})}) \ No newline at end of file diff --git a/public/js/main.bundle.min.0221623774b4ffae62d33aaf8aa954618227c122f904ee05c0e6ded32c9ea373.js b/public/js/main.bundle.min.0221623774b4ffae62d33aaf8aa954618227c122f904ee05c0e6ded32c9ea373.js new file mode 100644 index 0000000..73cdc93 --- /dev/null +++ b/public/js/main.bundle.min.0221623774b4ffae62d33aaf8aa954618227c122f904ee05c0e6ded32c9ea373.js @@ -0,0 +1,56 @@ +e=this,t=function(){"use strict";function R(e,t){var n,s=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),s.push.apply(s,n)),s}function h(e){for(var t,n=1;ne.length)&&(t=e.length);for(var n=0,s=new Array(t);n0&&0[0]!==arguments[0]?arguments[0]:{},s=n.getFn,i=0[0]===s?e.getFn:s,o=n.fieldNormWeight,r=0[0]===o?e.fieldNormWeight:o;t(this,a),this.norm=function(){var n=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:1,s=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:3,e=new Map,t=10**s;return{get:function(s){if(o=s.match(ce).length,e.has(o))return e.get(o);var o,a=1/o**(.5*n),i=parseFloat(Math.round(a*t)/t);return e.set(o,i),i},clear:function(){e.clear()}}}(r,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return n(a,[{key:"setSources",value:function(){var e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var t=this,e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.keys=e,this._keysMap={},e.forEach(function(e,n){t._keysMap[e.id]=n})}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,o(this.docs[0])?this.docs.forEach(function(t,n){e._addString(t,n)}):this.docs.forEach(function(t,n){e._addObject(t,n)}),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();o(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&0[0]!==arguments[2]?arguments[2]:{},i=o.getFn,r=0[0]===i?e.getFn:i,a=o.fieldNormWeight,c=0[0]===a?e.fieldNormWeight:a,s=new E({getFn:r,fieldNormWeight:c});return s.setKeys(t.map(H)),s.setSources(n),s.create(),s}function p(t){var s,n=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},d=n.errors,f=0[0]===d?0:d,l=n.currentLocation,u=0[0]===l?0:l,a=n.expectedLocation,h=0[0]===a?0:a,r=n.distance,c=0[0]===r?e.distance:r,i=n.ignoreLocation,m=0[0]===i?e.ignoreLocation:i,o=f/t.length;return m?o:(s=Math.abs(h-u),c?o+s/c:s?1:o)}a=32;function K(t,n,s){var o,r,f,v,b,w,k,A,H,c=arguments.length>3&&0[0]!==arguments[3]?arguments[3]:{},F=c.location,$=0[0]===F?e.location:F,R=c.distance,C=0[0]===R?e.distance:R,N=c.threshold,V=0[0]===N?e.threshold:N,I=c.findAllMatches,W=0[0]===I?e.findAllMatches:I,P=c.minMatchCharLength,z=0[0]===P?e.minMatchCharLength:P,B=c.includeMatches,D=0[0]===B?e.includeMatches:B,L=c.ignoreLocation,y=0[0]===L?e.ignoreLocation:L;if(n.length>a)throw new Error("Pattern length exceeds max of ".concat(a,"."));for(var _,d=n.length,g=t.length,i=Math.max(0,Math.min($,g)),m=V,h=i,x=z>1||D,S=x?Array(g):[];(_=t.indexOf(n,h))>-1;)if(H=p(n,{currentLocation:_,expectedLocation:i,distance:C,ignoreLocation:y}),m=Math.min(H,m),h=_+d,x)for(b=0;b=T;o-=1)if(v=o-1,A=s[t.charAt(v)],x&&(S[v]=+!!A),u[o]=(u[o+1]<<1|1)&A,l&&(u[o]|=(O[o+1]|O[o])<<1|1|O[o+1]),u[o]&U&&(E=p(n,{errors:l,currentLocation:v,expectedLocation:i,distance:C,ignoreLocation:y}))<=m){if(m=E,(h=v)<=i)break;T=Math.max(1,2*i-h)}if(p(n,{errors:l+1,currentLocation:i,expectedLocation:i,distance:C,ignoreLocation:y})>m)break;O=u}return w={isMatch:h>=0,score:Math.max(.001,E)},x&&(k=function(){for(var i,s=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[],a=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:e.minMatchCharLength,o=[],t=-1,r=-1,n=0,c=s.length;n=a&&o.push([t,r]),t=-1);return s[n-1]&&n-t>=a&&o.push([t,n-1]),o}(S,z),k.length?D&&(w.indices=k):w.isMatch=!1),w}function ee(e){for(var s,n={},t=0,o=e.length;t1&&0[0]!==arguments[1]?arguments[1]:{},h=o.location,A=0[0]===h?e.location:h,u=o.threshold,E=0[0]===u?e.threshold:u,v=o.distance,F=0[0]===v?e.distance:v,f=o.includeMatches,S=0[0]===f?e.includeMatches:f,g=o.findAllMatches,k=0[0]===g?e.findAllMatches:g,d=o.minMatchCharLength,O=0[0]===d?e.minMatchCharLength:d,y=o.isCaseSensitive,_=0[0]===y?e.isCaseSensitive:y,w=o.ignoreDiacritics,j=0[0]===w?e.ignoreDiacritics:w,b=o.ignoreLocation,C=0[0]===b?e.ignoreLocation:b;if(t(this,s),this.options={location:A,threshold:E,distance:F,includeMatches:S,findAllMatches:k,minMatchCharLength:O,isCaseSensitive:_,ignoreDiacritics:j,ignoreLocation:C},n=_?n:n.toLowerCase(),n=j?m(n):n,this.pattern=n,this.chunks=[],this.pattern.length)if(r=function(e,t){x.chunks.push({pattern:e,alphabet:ee(e),startIndex:t})},i=this.pattern.length,i>a){for(var c=0,p=i%a,M=i-p;c1&&0[0]!==arguments[1]?arguments[1]:{},r=s.location,O=0[0]===r?e.location:r,l=s.threshold,g=0[0]===l?e.threshold:l,u=s.distance,_=0[0]===u?e.distance:u,m=s.includeMatches,j=0[0]===m?e.includeMatches:m,p=s.findAllMatches,v=0[0]===p?e.findAllMatches:p,a=s.minMatchCharLength,b=0[0]===a?e.minMatchCharLength:a,f=s.isCaseSensitive,y=0[0]===f?e.isCaseSensitive:f,h=s.ignoreDiacritics,w=0[0]===h?e.ignoreDiacritics:h,c=s.ignoreLocation,x=0[0]===c?e.ignoreLocation:c;return t(this,o),(d=i.call(this,n))._bitapSearch=new V(n,{location:O,threshold:g,distance:_,includeMatches:j,findAllMatches:v,minMatchCharLength:b,isCaseSensitive:y,ignoreDiacritics:w,ignoreLocation:x}),d}return n(o,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),o}(c),U=function(e){r(s,e);var o=l(s);function s(e){return t(this,s),o.call(this,e)}return n(s,[{key:"search",value:function(e){for(var t,o,n=0,s=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,s.push([t,n-1]);return o=!!s.length,{isMatch:o,score:o?0:1,indices:s}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),s}(c),j=[Z,U,se,Y,X,G,Q,S],I=j.length,te=/ +(?=(?:[^"]*"[^"]*")*[^"]*$)/,ne=new Set([S.type,U.type]),q=function(){function s(n){var o=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},a=o.isCaseSensitive,r=0[0]===a?e.isCaseSensitive:a,c=o.ignoreDiacritics,l=0[0]===c?e.ignoreDiacritics:c,d=o.includeMatches,O=0[0]===d?e.includeMatches:d,h=o.minMatchCharLength,v=0[0]===h?e.minMatchCharLength:h,f=o.ignoreLocation,_=0[0]===f?e.ignoreLocation:f,g=o.findAllMatches,b=0[0]===g?e.findAllMatches:g,i=o.location,y=0[0]===i?e.location:i,p=o.threshold,w=0[0]===p?e.threshold:p,u=o.distance,x=0[0]===u?e.distance:u;t(this,s),this.query=null,this.options={isCaseSensitive:r,ignoreDiacritics:l,includeMatches:O,minMatchCharLength:v,findAllMatches:b,ignoreLocation:_,location:y,threshold:w,distance:x},n=r?n:n.toLowerCase(),n=l?m(n):n,this.pattern=n,this.query=function(e){var t=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{};return e.split("|").map(function(e){for(var a,r,c,l,d=e.trim().split(te).filter(function(e){return e&&!!e.trim()}),s=[],o=0,h=d.length;o2&&0[0]!==arguments[2]?arguments[2]:{}).auto,s=0[0]===n||n;return b(e)||(e=T(e)),function e(n){var r,c,d,u,a=Object.keys(n),l=function(e){return!!e[D]}(n);if(!l&&a.length>1&&!b(n))return e(T(n));if(function(e){return!i(e)&&B(e)&&!b(e)}(n)){if(r=l?n[D]:a[0],c=l?n[le]:n[r],!o(c))throw new Error(function(e){return"Invalid value for key ".concat(e)}(r));return d={keyId:_(r),pattern:c},s&&(d.searcher=w(c,t)),d}return u={children:[],operator:a[0]},a.forEach(function(t){var s=n[t];i(s)&&s.forEach(function(t){u.children.push(e(t))})}),u}(e)}function me(e,t){var n=e.matches;t.matches=[],s(n)&&n.forEach(function(e){if(s(e.indices)&&e.indices.length){var n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.src),e.idx>-1&&(n.refIndex=e.idx),t.matches.push(n)}})}function fe(e,t){t.score=e.score}return u=function(){function a(n){var s=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:0[0];t(this,a),this.options=h(h({},e),s),this.options.useExtendedSearch,this._keyStore=new pe(this.options.keys),this.setCollection(n,o)}return n(a,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof E))throw new Error("Incorrect 'index' type");this._myIndex=t||L(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){s(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var t,o=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:function(){return!1},n=[],e=0,s=this._docs.length;e1&&0[0]!==arguments[1]?arguments[1]:{}).limit,i=0[0]===a?-1:a,n=this.options,r=n.includeMatches,c=n.includeScore,l=n.shouldSort,d=n.sortFn,u=n.ignoreFieldNorm,s=o(t)?o(this._docs[0])?this._searchStringList(t):this._searchObjectList(t):this._searchLogical(t);return function(t,n){var s=n.ignoreFieldNorm,o=0[0]===s?e.ignoreFieldNorm:s;t.forEach(function(e){var t=1;e.matches.forEach(function(e){var n=e.key,a=e.norm,s=e.score,i=n?n.weight:null;t*=(0===s&&i?Number.EPSILON:s)**((i||1)*(o?1:a))}),e.score=t})}(s,{ignoreFieldNorm:u}),l&&s.sort(d),$(i)&&i>-1&&(s=s.slice(0,i)),function(t,n){var o=arguments.length>2&&0[0]!==arguments[2]?arguments[2]:{},i=o.includeMatches,r=0[0]===i?e.includeMatches:i,a=o.includeScore,c=0[0]===a?e.includeScore:a,s=[];return r&&s.push(me),c&&s.push(fe),t.map(function(e){var t=e.idx,o={item:n[t],refIndex:t};return s.length&&s.forEach(function(t){t(e,o)}),o})}(s,this._docs,{includeMatches:r,includeScore:c})}},{key:"_searchStringList",value:function(e){var n=w(e,this.options),o=this._myIndex.records,t=[];return o.forEach(function(e){var o=e.v,a=e.i,r=e.n;if(s(o)){var i=n.searchIn(o),c=i.isMatch,l=i.score,d=i.indices;c&&t.push({item:o,idx:a,matches:[{score:l,value:o,norm:r,indices:d}]})}}),t}},{key:"_searchLogical",value:function(e){var n=this,i=he(e,this.options),a=function e(t,s,o){if(!t.children){var c,l=t.keyId,u=t.searcher,i=n._findMatches({key:n._keyStore.get(l),value:n._myIndex.getValueForItemAtKeyId(s,l),searcher:u});return i&&i.length?[{idx:o,item:s,matches:i}]:[]}for(var a=[],r=0,h=t.children.length;r1&&0[0]!==arguments[1]?arguments[1]:{},o=s.getFn,a=0[0]===o?e.getFn:o,i=s.fieldNormWeight,r=0[0]===i?e.fieldNormWeight:i,c=t.keys,l=t.records,n=new E({getFn:a,fieldNormWeight:r});return n.setKeys(c),n.setIndexRecords(l),n},u.config=e,function(){f.push.apply(f,arguments)}(q),u},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t();var e,t,fuse,showButtons=document.querySelectorAll("[id^='search-button']"),hideButton=document.getElementById("close-search-button"),wrapper=document.getElementById("search-wrapper"),modal=document.getElementById("search-modal"),input=document.getElementById("search-query"),output=document.getElementById("search-results"),first=output.firstChild,last=output.lastChild,searchVisible=!1,indexed=!1,hasResults=!1;showButtons.forEach(e=>{e.addEventListener("click",displaySearch)}),hideButton.addEventListener("click",hideSearch),wrapper.addEventListener("click",hideSearch),modal.addEventListener("click",function(e){return e.stopPropagation(),e.stopImmediatePropagation(),!1}),document.addEventListener("keydown",function(e){e.key=="/"&&(searchVisible||(e.preventDefault(),displaySearch())),e.key=="Escape"&&hideSearch(),e.key=="ArrowDown"&&searchVisible&&hasResults&&(e.preventDefault(),document.activeElement==input?first.focus():document.activeElement==last?last.focus():document.activeElement.parentElement.nextSibling.firstElementChild.focus()),e.key=="ArrowUp"&&searchVisible&&hasResults&&(e.preventDefault(),document.activeElement==input?input.focus():document.activeElement==first?input.focus():document.activeElement.parentElement.previousSibling.firstElementChild.focus())}),input.onkeyup=function(){let t=throttle(()=>executeQuery(this.value));t&&(output.innerHTML=`
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • `)};function throttle(e,t=750){let n=throttle.timeout===0[0];return n||clearTimeout(throttle.timeout),throttle.timeout=setTimeout(()=>{e(),throttle.timeout=0[0]},t),n}function displaySearch(){indexed||buildIndex(),searchVisible||(document.body.style.overflow="hidden",wrapper.style.visibility="visible",input.focus(),searchVisible=!0)}function hideSearch(){searchVisible&&(document.body.style.overflow="visible",wrapper.style.visibility="hidden",input.value="",output.innerHTML="",document.activeElement.blur(),searchVisible=!1)}function fetchJSON(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4&&n.status===200){var e=JSON.parse(n.responseText);t&&t(e)}},n.open("GET",e),n.send()}function buildIndex(){var e=wrapper.getAttribute("data-url"),e=e.replace(/\/?$/,"/");fetchJSON(e+"index.json",function(e){var t={shouldSort:!0,ignoreLocation:!0,threshold:0,includeMatches:!0,keys:[{name:"title",weight:.8},{name:"section",weight:.2},{name:"summary",weight:.6},{name:"content",weight:.4}]};fuse=new Fuse(e,t),indexed=!0})}function executeQuery(e){let t=fuse.search(e);hasResults=t.length>0,t.length>0?(output.innerHTML=t.map(function(e){return`
  • + +
    +
    ${e.item.title}
    +
    ${e.item.section}${e.item.date==null?"":`·${e.item.date}`}
    +
    ${e.item.summary}
    +
    +
    +
    +
    +
  • `}).join(""),first=output.firstChild.firstElementChild,last=output.lastChild.firstElementChild):output.innerHTML=""} \ No newline at end of file diff --git a/public/media/index.html b/public/media/index.html new file mode 100644 index 0000000..230a434 --- /dev/null +++ b/public/media/index.html @@ -0,0 +1,413 @@ + + + + + + + + + + + + + Media · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + + +
    + +

    Media

    +
    +
    + +
    +

    Find videos, conference posters, event recordings, and other media from the Cytomining and CytoData communities here.

    + +
    +
    + +
    +

    + There's no articles to list here yet. +

    +
    + + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/public/media/index.xml b/public/media/index.xml new file mode 100644 index 0000000..cfae088 --- /dev/null +++ b/public/media/index.xml @@ -0,0 +1,11 @@ + + + + Media on Cytomining + http://localhost:1314/media/ + Recent content in Media on Cytomining + Hugo + en + + + diff --git a/docs/pycytominer/index.html b/public/pycytominer/index.html similarity index 77% rename from docs/pycytominer/index.html rename to public/pycytominer/index.html index 0a8e2fb..eb855fa 100644 --- a/docs/pycytominer/index.html +++ b/public/pycytominer/index.html @@ -5,9 +5,9 @@ - Redirecting to https://pycytominer.readthedocs.io/ + Redirecting to pycytominer docs - Redirecting to https://pycytominer.readthedocs.io/ + Redirecting to pycytominer documentation. diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..2728388 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +Allow: / +Sitemap: https://cytomining.github.io/sitemap.xml diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..4fc6502 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "Congo", + "short_name": "Congo", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#7c3aed", + "display": "standalone" +} diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..a0b8020 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,111 @@ + + + + + + http://localhost:1314/about/ + + + + + + http://localhost:1314/experimental/buscar/ + + + + + + + + http://localhost:1314/contact/ + + + + + + http://localhost:1314/tools/copairs/ + + + + + + http://localhost:1314/tools/cosmicqc/ + + + + + + http://localhost:1314/tools/cytodataframe/ + + + + + + http://localhost:1314/ + + + + + + http://localhost:1314/tools/cytotable/ + + + + + + http://localhost:1314/tools/deepprofiler/ + + + + + + http://localhost:1314/experimental/ + + + + + + http://localhost:1314/history/ + + + + + + http://localhost:1314/experimental/iceberg-bioimage/ + + + + + + http://localhost:1314/media/ + + + + + + http://localhost:1314/experimental/ome-arrow/ + + + + + + http://localhost:1314/tools/pycytominer/ + + + + + + + + http://localhost:1314/tools/ + + + + + + http://localhost:1314/experimental/zedprofiler/ + + + + diff --git a/public/tags/index.html b/public/tags/index.html new file mode 100644 index 0000000..047e9af --- /dev/null +++ b/public/tags/index.html @@ -0,0 +1,402 @@ + + + + + + + + + + + + + Tags · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    + +

    Tags

    +
    + +
    + +
    + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/public/tags/index.xml b/public/tags/index.xml new file mode 100644 index 0000000..488438b --- /dev/null +++ b/public/tags/index.xml @@ -0,0 +1,11 @@ + + + + Tags on Cytomining + http://localhost:1314/tags/ + Recent content in Tags on Cytomining + Hugo + en + + + diff --git a/public/tools/copairs/index.html b/public/tools/copairs/index.html new file mode 100644 index 0000000..0bee03f --- /dev/null +++ b/public/tools/copairs/index.html @@ -0,0 +1,547 @@ + + + + + + + + + + + + + copairs · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +

    + copairs +

    + + +
    +
    + +
    +
    +
    + + Table of Contents + +
    + +
    +
    + +
    +
    + +
    +

    copairs is a Python package for evaluating the quality of morphological profiles by measuring how well a perturbation’s profile can be retrieved relative to controls. +It implements mean Average Precision (mAP) and related metrics widely used in the image-based profiling community.

    +

    Key capabilities:

    +
      +
    • Define matched pairs based on experimental metadata
    • +
    • Compute mean Average Precision (mAP) for retrieval assessment
    • +
    • Evaluate intra- vs. inter-group morphological similarity
    • +
    • Scale efficiently to large screening datasets
    • +
    +

    View documentation โ†’

    +

    Publication #

    +
    + Nature Communications ยท 2025 +
    +

    + A versatile information retrieval framework for evaluating profile strength and similarity +

    +

    + Kalinin AA, Arevalo J, Serrano E, Vulliard L, Tsang H, et al. +

    +

    + doi: 10.1038/s41467-025-60306-2 +

    +
    + +
    +
    + +
    + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/public/tools/cosmicqc/index.html b/public/tools/cosmicqc/index.html new file mode 100644 index 0000000..5a2e184 --- /dev/null +++ b/public/tools/cosmicqc/index.html @@ -0,0 +1,566 @@ + + + + + + + + + + + + + coSMicQC · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +

    + coSMicQC +

    + + +
    +
    + +
    +
    +
    + + Table of Contents + +
    + +
    +
    + +
    +
    + +
    + coSMicQC logo +coSMicQC logo +

    coSMicQC (Single-cell Morphology Quality Control) identifies and removes low-quality cells from image-based profiling datasets before downstream analysis. +It catches common problems such as over-segmented nuclei, poorly segmented cells, and imaging artifacts.

    +

    Key capabilities:

    +
      +
    • Flag over-segmented, under-segmented, and poorly focused cells
    • +
    • Apply threshold-based or z-score-based QC criteria
    • +
    • Generate summary reports of QC outcomes
    • +
    • Integrate seamlessly with CytoTable and pycytominer workflows
    • +
    +

    View documentation โ†’

    +

    Publication #

    +
    + bioRxiv Preprint ยท 2025 +
    +

    + Stellar quality control for single-cell image-based profiling with coSMicQC +

    +

    + Tomkinson J, Bunten D, Way GP +

    +

    + doi: 10.1101/2025.10.14.682427 +

    +
    + +
    +
    + +
    + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/public/tools/cytodataframe/index.html b/public/tools/cytodataframe/index.html new file mode 100644 index 0000000..6187975 --- /dev/null +++ b/public/tools/cytodataframe/index.html @@ -0,0 +1,531 @@ + + + + + + + + + + + + + CytoDataFrame · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +

    + CytoDataFrame +

    + + +
    +
    + +
    + CytoDataFrame logo +CytoDataFrame logo +

    CytoDataFrame extends the familiar pandas DataFrame interface to let researchers view and analyze single-cell morphological profiles alongside their corresponding microscopy images and segmentation masks โ€” all within a Jupyter notebook.

    +

    Key capabilities:

    +
      +
    • Display cell images inline with profile data in Jupyter
    • +
    • Link numerical features directly to visual representations
    • +
    • Overlay segmentation masks for quality inspection
    • +
    • Built on top of pandas for full compatibility with existing workflows
    • +
    +

    View documentation โ†’

    + +
    +
    + +
    + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/public/tools/cytotable/index.html b/public/tools/cytotable/index.html new file mode 100644 index 0000000..31d6384 --- /dev/null +++ b/public/tools/cytotable/index.html @@ -0,0 +1,566 @@ + + + + + + + + + + + + + CytoTable · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +

    + CytoTable +

    + + +
    +
    + +
    +
    +
    + + Table of Contents + +
    + +
    +
    + +
    +
    + +
    + CytoTable logo +CytoTable logo +

    CytoTable harmonizes output from different high-content image analysis tools โ€” including CellProfiler, DeepProfiler, and IN Carta โ€” into a single, analysis-ready format. +It scales to large datasets using Apache Parquet and DuckDB under the hood.

    +

    Key capabilities:

    +
      +
    • Convert CellProfiler SQLite, CSV, and other formats into Parquet
    • +
    • Harmonize schema differences across analysis tools
    • +
    • Scale to datasets with millions of single cells
    • +
    • Produce outputs compatible with pycytominer and AnnData workflows
    • +
    +

    View documentation โ†’

    +

    Publication #

    +
    + Patterns (Cell Press) ยท 2026 +
    +

    + Scalable data harmonization for single-cell image-based profiling with CytoTable +

    +

    + Bunten D, Tomkinson J, Serrano E, Lippincott MJ, Brewer KI, et al. +

    +

    + doi: 10.1016/j.patter.2026.101514 +

    +
    + +
    +
    + +
    + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/public/tools/deepprofiler/index.html b/public/tools/deepprofiler/index.html new file mode 100644 index 0000000..18d539a --- /dev/null +++ b/public/tools/deepprofiler/index.html @@ -0,0 +1,565 @@ + + + + + + + + + + + + + DeepProfiler · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +

    + DeepProfiler +

    + + +
    +
    + +
    +
    +
    + + Table of Contents + +
    + +
    +
    + +
    +
    + +
    + DeepProfiler logo +

    DeepProfiler uses deep neural networks to extract morphological features directly from raw microscopy images, bypassing traditional segmentation-and-measurement pipelines. +It is designed for high-throughput screens where deep learning representations outperform classical feature sets.

    +

    Key capabilities:

    +
      +
    • Train and apply convolutional neural networks for feature extraction
    • +
    • Support for EfficientNet, ResNet, and custom architectures
    • +
    • Crop and embed single cells from large microscopy images
    • +
    • Produce embeddings compatible with pycytominer and downstream profiling workflows
    • +
    +

    View on GitHub โ†’

    +

    Publication #

    +
    + Nature Communications ยท 2024 +
    +

    + Learning representations for image-based profiling of perturbations +

    +

    + Moshkov N, Bornholdt M, Benoit G, Smith K, et al. +

    +

    + doi: 10.1038/s41467-024-45999-1 +

    +
    + +
    +
    + +
    + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/public/tools/index.html b/public/tools/index.html new file mode 100644 index 0000000..b10f88f --- /dev/null +++ b/public/tools/index.html @@ -0,0 +1,783 @@ + + + + + + + + + + + + + Tools · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + + +
    + +

    Tools

    +
    +
    + +
    +

    The Cytomining ecosystem provides a suite of production-ready tools for every stage of the image-based profiling workflow.

    + +
    +
    + +
    + + +
    +
    + + +

    + + copairs + + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    + Downstream evaluation โ€” measures how reproducibly perturbation profiles retrieve their matched replicates, quantifying profile quality and similarity. +
    + +
    +
    + + +
    +
    + + + coSMicQC icon + +

    + + coSMicQC + + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    + Quality control step โ€” flags and removes low-quality cells before profile processing to prevent artifacts from propagating downstream. +
    + +
    +
    + + +
    +
    + + + CytoDataFrame icon + +

    + + CytoDataFrame + + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    + Interactive exploration โ€” view and inspect morphological profiles alongside their source cell images directly in Jupyter notebooks. +
    + +
    +
    + + +
    +
    + + + CytoTable icon + +

    + + CytoTable + + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    + Upstream ingestion โ€” converts raw CellProfiler, DeepProfiler, and IN Carta outputs into scalable, analysis-ready Parquet tables. +
    + +
    +
    + + +
    +
    + + +

    + + DeepProfiler + + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    + Alternative feature extraction โ€” deep learning embeddings from raw microscopy images, bypassing classical segmentation-and-measurement pipelines. +
    + +
    +
    + + +
    +
    + + + pycytominer icon + +

    + + pycytominer + + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    + Core processing pipeline โ€” aggregates, normalizes, and feature-selects morphological profiles for downstream analysis. +
    + +
    +
    + + + +
    + + + + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/public/tools/index.xml b/public/tools/index.xml new file mode 100644 index 0000000..cd87221 --- /dev/null +++ b/public/tools/index.xml @@ -0,0 +1,53 @@ + + + + Tools on Cytomining + http://localhost:1314/tools/ + Recent content in Tools on Cytomining + Hugo + en + + + copairs + http://localhost:1314/tools/copairs/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/copairs/ + <p>copairs is a Python package for evaluating the quality of morphological profiles by measuring how well a perturbation&rsquo;s profile can be retrieved relative to controls. It implements mean Average Precision (mAP) and related metrics widely used in the image-based profiling community.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Define matched pairs based on experimental metadata</li> <li>Compute mean Average Precision (mAP) for retrieval assessment</li> <li>Evaluate intra- vs. inter-group morphological similarity</li> <li>Scale efficiently to large screening datasets</li> </ul> <p><strong><a href="https://cytomining.github.io/copairs/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + coSMicQC + http://localhost:1314/tools/cosmicqc/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/cosmicqc/ + <img class="logo-light" src="https://raw.githubusercontent.com/cytomining/coSMicQC/main/media/logo/with-text-for-light-bg.png" alt="coSMicQC logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/cytomining/coSMicQC/main/media/logo/with-text-for-dark-bg.png" alt="coSMicQC logo" width="400"> <p>coSMicQC (Single-cell Morphology Quality Control) identifies and removes low-quality cells from image-based profiling datasets before downstream analysis. It catches common problems such as over-segmented nuclei, poorly segmented cells, and imaging artifacts.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Flag over-segmented, under-segmented, and poorly focused cells</li> <li>Apply threshold-based or z-score-based QC criteria</li> <li>Generate summary reports of QC outcomes</li> <li>Integrate seamlessly with CytoTable and pycytominer workflows</li> </ul> <p><strong><a href="https://cytomining.github.io/coSMicQC/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> <h2 id="publication" class="relative group">Publication <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#publication" aria-label="Anchor">#</a></span></h2><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 1.25rem; margin: 1.5rem 0;"> <div style="margin-bottom: 0.5rem;"> <span style="background: #6b7280; color: white; padding: 0.2rem 0.7rem; border-radius: 9999px; font-size: 0.78rem; font-weight: 600;">bioRxiv Preprint ยท 2025</span> </div> <p style="font-weight: 600; margin: 0.5rem 0 0.25rem;"> <a href="https://doi.org/10.1101/2025.10.14.682427">Stellar quality control for single-cell image-based profiling with coSMicQC</a> </p> + + + CytoDataFrame + http://localhost:1314/tools/cytodataframe/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/cytodataframe/ + <img class="logo-light" src="https://raw.githubusercontent.com/cytomining/CytoDataFrame/main/logo/with-text-for-light-bg.png" alt="CytoDataFrame logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/cytomining/CytoDataFrame/main/logo/with-text-for-dark-bg.png" alt="CytoDataFrame logo" width="400"> <p>CytoDataFrame extends the familiar pandas DataFrame interface to let researchers view and analyze single-cell morphological profiles alongside their corresponding microscopy images and segmentation masks โ€” all within a Jupyter notebook.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Display cell images inline with profile data in Jupyter</li> <li>Link numerical features directly to visual representations</li> <li>Overlay segmentation masks for quality inspection</li> <li>Built on top of pandas for full compatibility with existing workflows</li> </ul> <p><strong><a href="https://cytomining.github.io/CytoDataFrame/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + CytoTable + http://localhost:1314/tools/cytotable/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/cytotable/ + <img class="logo-light" src="https://raw.githubusercontent.com/cytomining/CytoTable/main/logo/with-text-for-light-bg.png" alt="CytoTable logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/cytomining/CytoTable/main/logo/with-text-for-dark-bg.png" alt="CytoTable logo" width="400"> <p>CytoTable harmonizes output from different high-content image analysis tools โ€” including CellProfiler, DeepProfiler, and IN Carta โ€” into a single, analysis-ready format. It scales to large datasets using Apache Parquet and DuckDB under the hood.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Convert CellProfiler SQLite, CSV, and other formats into Parquet</li> <li>Harmonize schema differences across analysis tools</li> <li>Scale to datasets with millions of single cells</li> <li>Produce outputs compatible with pycytominer and AnnData workflows</li> </ul> <p><strong><a href="https://cytomining.github.io/CytoTable/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> + + + DeepProfiler + http://localhost:1314/tools/deepprofiler/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/deepprofiler/ + <img src="https://raw.githubusercontent.com/cytomining/DeepProfiler/main/figures/logo/banner.png" alt="DeepProfiler logo" width="400"> <p>DeepProfiler uses deep neural networks to extract morphological features directly from raw microscopy images, bypassing traditional segmentation-and-measurement pipelines. It is designed for high-throughput screens where deep learning representations outperform classical feature sets.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Train and apply convolutional neural networks for feature extraction</li> <li>Support for EfficientNet, ResNet, and custom architectures</li> <li>Crop and embed single cells from large microscopy images</li> <li>Produce embeddings compatible with pycytominer and downstream profiling workflows</li> </ul> <p><strong><a href="https://github.com/cytomining/DeepProfiler" target="_blank" rel="noreferrer">View on GitHub โ†’</a></strong></p> + + + pycytominer + http://localhost:1314/tools/pycytominer/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1314/tools/pycytominer/ + <img class="logo-light" src="https://raw.githubusercontent.com/cytomining/pycytominer/main/logo/with-text-for-light-bg.png" alt="pycytominer logo" width="400"> <img class="logo-dark" src="https://raw.githubusercontent.com/cytomining/pycytominer/main/logo/with-text-for-dark-bg.png" alt="pycytominer logo" width="400"> <p>pycytominer is the core Python package in the Cytomining ecosystem. It provides a clean, composable API for processing single-cell morphological profiles produced by tools like CellProfiler.</p> <p><strong>Key capabilities:</strong></p> <ul> <li>Aggregate single-cell data to well- or treatment-level profiles</li> <li>Annotate profiles with experimental metadata</li> <li>Normalize features using population-level statistics</li> <li>Select high-quality features and remove noise</li> <li>Output analysis-ready profiles in standard formats</li> </ul> <p><strong><a href="https://pycytominer.readthedocs.io/" target="_blank" rel="noreferrer">View documentation โ†’</a></strong></p> <h2 id="publication" class="relative group">Publication <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#publication" aria-label="Anchor">#</a></span></h2><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 1.25rem; margin: 1.5rem 0;"> <div style="margin-bottom: 0.5rem;"> <span style="background: #2563eb; color: white; padding: 0.2rem 0.7rem; border-radius: 9999px; font-size: 0.78rem; font-weight: 600;">Nature Methods ยท 2025</span> </div> <p style="font-weight: 600; margin: 0.5rem 0 0.25rem;"> <a href="https://doi.org/10.1038/s41592-025-02611-8">Reproducible image-based profiling with Pycytominer</a> </p> + + + diff --git a/public/tools/page/1/index.html b/public/tools/page/1/index.html new file mode 100644 index 0000000..c3e4809 --- /dev/null +++ b/public/tools/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1314/tools/ + + + + + diff --git a/public/tools/pycytominer/index.html b/public/tools/pycytominer/index.html new file mode 100644 index 0000000..f5968dd --- /dev/null +++ b/public/tools/pycytominer/index.html @@ -0,0 +1,550 @@ + + + + + + + + + + + + + pycytominer · Cytomining + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +

    + pycytominer +

    + + +
    +
    + +
    +
    +
    + + Table of Contents + +
    + +
    +
    + +
    +
    + +
    + pycytominer logo +pycytominer logo +

    pycytominer is the core Python package in the Cytomining ecosystem. +It provides a clean, composable API for processing single-cell morphological profiles produced by tools like CellProfiler.

    +

    Key capabilities:

    +
      +
    • Aggregate single-cell data to well- or treatment-level profiles
    • +
    • Annotate profiles with experimental metadata
    • +
    • Normalize features using population-level statistics
    • +
    • Select high-quality features and remove noise
    • +
    • Output analysis-ready profiles in standard formats
    • +
    +

    View documentation โ†’

    +

    Publication #

    +
    + Nature Methods ยท 2025 +
    +

    + Reproducible image-based profiling with Pycytominer +

    +

    + Serrano E, Chandrasekaran SN, Bunten D, Brewer KI, Tomkinson J, et al. +

    +

    + doi: 10.1038/s41592-025-02611-8 +

    +
    + +
    +
    + +
    + +
    + + +
    + + +
    +
    + + +

    + © + 2026 + Cytomining +

    + + + +
    +
    + + + + +
    + +
    + +
    +
    + + +
    + + +
    + + diff --git a/static/cytosnake/index.html b/static/cytosnake/index.html new file mode 100644 index 0000000..3ce12db --- /dev/null +++ b/static/cytosnake/index.html @@ -0,0 +1,13 @@ + + + + + + + + Redirecting to CytoSnake docs + + + Redirecting to CytoSnake documentation. + + diff --git a/static/cytotable/index.html b/static/cytotable/index.html new file mode 100644 index 0000000..7c14d15 --- /dev/null +++ b/static/cytotable/index.html @@ -0,0 +1,13 @@ + + + + + + + + Redirecting to CytoTable docs + + + Redirecting to CytoTable documentation. + + diff --git a/static/pycytominer/index.html b/static/pycytominer/index.html new file mode 100644 index 0000000..eb855fa --- /dev/null +++ b/static/pycytominer/index.html @@ -0,0 +1,13 @@ + + + + + + + + Redirecting to pycytominer docs + + + Redirecting to pycytominer documentation. + + diff --git a/themes/congo/.github/FUNDING.yml b/themes/congo/.github/FUNDING.yml new file mode 100644 index 0000000..819db0c --- /dev/null +++ b/themes/congo/.github/FUNDING.yml @@ -0,0 +1 @@ +github: jpanther diff --git a/themes/congo/.github/ISSUE_TEMPLATE/bug-report.yml b/themes/congo/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000..0cd76ef --- /dev/null +++ b/themes/congo/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,62 @@ +name: ๐Ÿ› Bug Report +description: Report a new problem encountered using the theme +labels: [bug] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + + Before proceeding, please ensure the issue you're reporting is: + - not caused by local customisations in your project + - reproducible using the latest stable release of the theme + - not due to the local Hugo cache being out of date (run `hugo mod clean` to clear the cache) + - not already covered by an open issue ([check open issues](https://github.com/jpanther/congo/issues)) + - not a general question or feature request (use [GitHub Discussions](https://github.com/jpanther/congo/discussions) instead) + + - type: textarea + id: issue-description + attributes: + label: Issue description + description: Describe the issue and how to reproduce it, including what you expected to happen. Be as detailed as possible, particularly if the issue only appears under a specific configuration. + validations: + required: true + - type: input + id: theme-version + attributes: + label: Theme version + description: What version of Congo are you using? An easy way to check the version of the code running in your environment is by verifying the theme version comment at the top of the `main.css` file in the built output of your site. + placeholder: eg. v2.7.1 + validations: + required: true + - type: input + id: hugo-version + attributes: + label: Hugo version + description: What version of Hugo are you using? Please provide the output of the `hugo version` command. + placeholder: eg. hugo v0.119.0+extended darwin/arm64 + validations: + required: true + - type: dropdown + id: browsers + attributes: + label: Which browser rendering engines are you seeing the problem on? + description: Select any that you have tested. This is particularly important for CSS issue reports. + multiple: true + options: + - Chromium (Google Chrome, Microsoft Edge, Brave, Vivaldi, Opera, etc.) + - Firefox (Mozilla Firefox) + - WebKit (Safari) + - Other (Please include details in the issue description) + - type: input + id: sample-url + attributes: + label: URL to sample repository or website + description: If you have a repository or deployed Hugo website that demonstrates this issue, please provide the URL. + placeholder: https://github.com/jpanther/congo + - type: textarea + id: logs + attributes: + label: Hugo output or build error messages + description: Please copy and paste any relevant log output from Hugo or your build system. This will be automatically formatted into code, so no need for backticks. + render: bash diff --git a/themes/congo/.github/ISSUE_TEMPLATE/config.yml b/themes/congo/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..2c5ac2b --- /dev/null +++ b/themes/congo/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: true +contact_links: + - name: ๐Ÿ’ก Feature Request + url: https://github.com/jpanther/congo/discussions + about: Request and discuss enhancements using GitHub Discussions + - name: ๐Ÿ™‹โ€โ™€๏ธ Question + url: https://github.com/jpanther/congo/discussions + about: Please ask and answer general questions using GitHub Discussions diff --git a/themes/congo/.github/ISSUE_TEMPLATE/i18n-issue.yml b/themes/congo/.github/ISSUE_TEMPLATE/i18n-issue.yml new file mode 100644 index 0000000..1a4dd5e --- /dev/null +++ b/themes/congo/.github/ISSUE_TEMPLATE/i18n-issue.yml @@ -0,0 +1,45 @@ +name: ๐Ÿ’ฌ i18n Issue +description: Report an issue with i18n or translations +labels: [i18n] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this issue report! + - type: input + id: language + attributes: + label: Language + description: Which language are you using? + placeholder: eg. English + validations: + required: true + - type: textarea + id: issue + attributes: + label: What's the issue? + description: Describe the translation issue and how to reproduce it. + validations: + required: true + - type: input + id: theme-version + attributes: + label: Theme version + description: What version of the theme are you using? + placeholder: eg. v1.1.0 + validations: + required: true + - type: input + id: hugo-version + attributes: + label: Hugo version + description: What version of Hugo are you using? + placeholder: eg. v0.86.1 + validations: + required: true + - type: textarea + id: logs + attributes: + label: Relevant Hugo log output + description: Please copy and paste any relevant Hugo log output. This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/themes/congo/.github/dependabot.yml b/themes/congo/.github/dependabot.yml new file mode 100644 index 0000000..3d12432 --- /dev/null +++ b/themes/congo/.github/dependabot.yml @@ -0,0 +1,26 @@ +# GitHub Dependabot +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + time: "09:00" + timezone: "Australia/Melbourne" + commit-message: + prefix: "๐Ÿ“Œ" + labels: + - "dependencies" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: "sunday" + time: "09:00" + timezone: "Australia/Melbourne" + commit-message: + prefix: "๐Ÿ‘ท" + labels: + - "dependencies" diff --git a/themes/congo/.github/labeller.yml b/themes/congo/.github/labeller.yml new file mode 100644 index 0000000..9e9e6ea --- /dev/null +++ b/themes/congo/.github/labeller.yml @@ -0,0 +1,7 @@ +i18n: + - changed-files: + - any-glob-to-any-file: i18n/* + +documentation: + - changed-files: + - any-glob-to-any-file: "**/*.md" diff --git a/themes/congo/.github/pull_request_template.md b/themes/congo/.github/pull_request_template.md new file mode 100644 index 0000000..95dc0ad --- /dev/null +++ b/themes/congo/.github/pull_request_template.md @@ -0,0 +1,2 @@ + + diff --git a/themes/congo/.github/workflows/build-theme.yml b/themes/congo/.github/workflows/build-theme.yml new file mode 100644 index 0000000..dc57626 --- /dev/null +++ b/themes/congo/.github/workflows/build-theme.yml @@ -0,0 +1,54 @@ +name: Build Theme + +on: [pull_request_target] + +jobs: + build: + runs-on: ubuntu-latest + if: ${{ github.actor == 'dependabot[bot]' }} + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + ref: "${{ github.head_ref }}" + - name: Install dependencies and Build Theme + uses: actions/setup-node@v6 + - run: npm install + - run: npm run assets + - name: Commit and push Chart.js changes + uses: stefanzweifel/git-auto-commit-action@v6 + with: + branch: "${{ github.head_ref }}" + push_options: "--dry-run" + file_pattern: "assets/lib/chart/*" + commit_message: "๐Ÿ“ฆ Update packaged ChartJS" + - name: Commit Fuse changes + uses: stefanzweifel/git-auto-commit-action@v6 + with: + branch: "${{ github.head_ref }}" + push_options: "--dry-run" + file_pattern: "assets/lib/fuse/*" + commit_message: "๐Ÿ“ฆ Update packaged FuseJS" + - name: Commit KaTeX changes + uses: stefanzweifel/git-auto-commit-action@v6 + with: + branch: "${{ github.head_ref }}" + push_options: "--dry-run" + file_pattern: "assets/lib/katex/*" + commit_message: "๐Ÿ“ฆ Update packaged KaTeX" + - name: Commit Mermaid changes + uses: stefanzweifel/git-auto-commit-action@v6 + with: + branch: "${{ github.head_ref }}" + push_options: "--dry-run" + file_pattern: "assets/lib/mermaid/*" + commit_message: "๐Ÿ“ฆ Update packaged Mermaid" + - run: npm run build + - name: Commit CSS changes + uses: stefanzweifel/git-auto-commit-action@v6 + with: + branch: "${{ github.head_ref }}" + push_options: "--dry-run" + file_pattern: "assets/css/compiled/main.css" + commit_message: "๐Ÿ’„ Rebuild CSS" + - run: git push diff --git a/themes/congo/.github/workflows/gh-pages.yml b/themes/congo/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..2e68163 --- /dev/null +++ b/themes/congo/.github/workflows/gh-pages.yml @@ -0,0 +1,37 @@ +name: GitHub Pages + +on: + push: + branches: + - stable + +jobs: + build-deploy: + name: Build and Deploy + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + submodules: true + fetch-depth: 0 + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v3 + with: + hugo-version: "latest" + extended: true + + - name: Build + working-directory: ./exampleSite + run: hugo --minify --themesDir ../.. --buildDrafts --baseURL https://jpanther.github.io/congo/ + + - name: Deploy + uses: peaceiris/actions-gh-pages@v4 + if: ${{ github.ref == 'refs/heads/stable' }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: gh-pages + publish_dir: ./exampleSite/public diff --git a/themes/congo/.github/workflows/label.yml b/themes/congo/.github/workflows/label.yml new file mode 100644 index 0000000..e83863b --- /dev/null +++ b/themes/congo/.github/workflows/label.yml @@ -0,0 +1,18 @@ +name: Labeller + +on: [pull_request_target] + +jobs: + label: + name: Label + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + steps: + - name: Label + uses: actions/labeler@v6 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + configuration-path: .github/labeller.yml diff --git a/themes/congo/.github/workflows/stale.yml b/themes/congo/.github/workflows/stale.yml new file mode 100644 index 0000000..f9c569c --- /dev/null +++ b/themes/congo/.github/workflows/stale.yml @@ -0,0 +1,32 @@ +name: "Close stale issues and PRs" +on: + schedule: + - cron: "30 1 * * *" + +jobs: + stale: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v10 + with: + days-before-stale: 120 + days-before-close: 30 + stale-issue-label: "stale" + exempt-issue-labels: "wip,help wanted,dependencies" + stale-pr-label: "stale" + exempt-pr-labels: "wip,help wanted,dependencies" + stale-issue-message: > + This issue has been automatically marked as stale because it has not had any recent activity. + + If you are still experiencing this issue, please review the issue history and add a reply with any requested and/or additional information in order to keep the issue open. + + This issue will automatically close in 30 days if no further activity occurs. + stale-pr-message: > + This pull request has been automatically marked as stale because it has not had any recent activity. + + Please review the PR history and add a reply with any requested information. If no information has been requested, it may be that this contribution does not fit with the project objectives, or does not adhere to the [contributing guidelines](https://github.com/jpanther/congo/blob/dev/CONTRIBUTING.md). If this is in error, please add a reply with further details. + + This PR will automatically close in 30 days if no further activity occurs. diff --git a/themes/congo/.github/workflows/test-build.yml b/themes/congo/.github/workflows/test-build.yml new file mode 100644 index 0000000..11c25f2 --- /dev/null +++ b/themes/congo/.github/workflows/test-build.yml @@ -0,0 +1,26 @@ +name: Test Build + +on: [push] + +jobs: + build: + name: Build Example Site + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + submodules: true + fetch-depth: 0 + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v3 + with: + hugo-version: "latest" + extended: true + + - name: Build + working-directory: ./exampleSite + run: hugo --minify --themesDir ../.. --baseURL https://jpanther.github.io/congo/ diff --git a/themes/congo/.github/workflows/unlabel.yml b/themes/congo/.github/workflows/unlabel.yml new file mode 100644 index 0000000..94a64e5 --- /dev/null +++ b/themes/congo/.github/workflows/unlabel.yml @@ -0,0 +1,16 @@ +name: Unlabeller + +on: + issues: + types: [closed] + pull_request: + types: [closed] + +jobs: + unlabel: + runs-on: ubuntu-latest + steps: + - name: Remove labels + uses: andymckay/labeler@master + with: + remove-labels: "wip" diff --git a/themes/congo/.gitignore b/themes/congo/.gitignore new file mode 100644 index 0000000..58ad807 --- /dev/null +++ b/themes/congo/.gitignore @@ -0,0 +1,26 @@ +### Node ### +# Dependency directories +node_modules/ + +### Hugo ### +# Generated files by hugo +**/public/ +**/resources/_gen/ + +# Executable may be added to repository +hugo.exe +hugo.darwin +hugo.linux + +# Temporary lock file while building +.hugo_build.lock + +### Congo ### +# Lighthouse generated output +.lighthouseci + +# Project specific files +TODO + +# MacOS +.DS_Store diff --git a/themes/congo/.prettierignore b/themes/congo/.prettierignore new file mode 100644 index 0000000..40dc37e --- /dev/null +++ b/themes/congo/.prettierignore @@ -0,0 +1,9 @@ +/assets/css/compiled/ +/assets/lib/ + +/layouts/_default/_markup/*.html +/layouts/partials/picture.html +/layouts/shortcodes/figure.html +/layouts/shortcodes/screenshot.html + +/exampleSite/content/docs/version-2/lighthouse.html diff --git a/themes/congo/.prettierrc b/themes/congo/.prettierrc new file mode 100644 index 0000000..7b975db --- /dev/null +++ b/themes/congo/.prettierrc @@ -0,0 +1,18 @@ +{ + "plugins": ["prettier-plugin-go-template", "prettier-plugin-tailwindcss"], + "goTemplateBracketSpacing": true, + "htmlWhitespaceSensitivity": "css", + "printWidth": 100, + "singleQuote": false, + "tabWidth": 2, + "useTabs": false, + "trailingComma": "es5", + "overrides": [ + { + "files": ["*.html", "layouts/_default/*.json"], + "options": { + "parser": "go-template" + } + } + ] +} diff --git a/themes/congo/CHANGELOG.md b/themes/congo/CHANGELOG.md new file mode 100644 index 0000000..6be9d43 --- /dev/null +++ b/themes/congo/CHANGELOG.md @@ -0,0 +1,1081 @@ +# Changelog + +All notable changes to Congo will be documented in this file. Things that need particular attention when upgrading from a prior version are marked โš ๏ธ. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [2.13.0] - 2026-01-20 + +### Added + +- New `script` parameter for Umami Analytics to allow self-hosted deployments ([#1103](https://github.com/jpanther/congo/pull/1103)) + +### Changed + +- Upgrade to Mermaid v11.12.2 ([#1087](https://github.com/jpanther/congo/pull/1087), [#1123](https://github.com/jpanther/congo/pull/1123)) +- Upgrade to ChartJS v4.5.1 ([#1131](https://github.com/jpanther/congo/pull/1131)) +- Upgrade to Tailwind v3.4.19 ([#1132](https://github.com/jpanther/congo/pull/1132)) +- Upgrade to Typography v0.5.19 ([#1133](https://github.com/jpanther/congo/pull/1133)) +- Upgrade to KaTeX v0.16.27 ([#1136](https://github.com/jpanther/congo/pull/1136)) + +### Fixed + +- Code copy button not working when `noClasses` is set to `true` ([#1091](https://github.com/jpanther/congo/pull/1091)) +- `rel` parameter not added to links when specified in menu configuration ([#1116](https://github.com/jpanther/congo/pull/1116)) +- Certain KaTeX mathematical expressions not being parsed correctly in Markdown ([#1121](https://github.com/jpanther/congo/issues/1121)) +- References to `_internal` templates that no longer apply in the new Hugo templating system ([#1124](https://github.com/jpanther/congo/issues/1124)) +- Deprecated references to `_build` front matter key in Hugo v0.145.0 or later + +## [2.12.2] - 2025-07-13 + +### Added + +- New icon for `strava` ([#1081](https://github.com/jpanther/congo/pull/1081)) + +### Changed + +- Upgrade to Mermaid v11.8.1 ([#1084](https://github.com/jpanther/congo/pull/1084)) +- Updated Korean translation ([#1078](https://github.com/jpanther/congo/pull/1078)) + +## [2.12.1] - 2025-06-23 + +### Fixed + +- `figure` shortcode would load recursively when using the `default` paramater ([#1074](https://github.com/jpanther/congo/issues/1074)) +- Some partials not loading due to incorrect file paths ([#1075](https://github.com/jpanther/congo/pull/1075)) + +## [2.12.0] - 2025-06-22 + +### Added + +- Loading spinner while populating search results ([#1025](https://github.com/jpanther/congo/pull/1025)) +- New `canonicalUrl` parameter support in article front matter ([#1046](https://github.com/jpanther/congo/pull/1046)) +- New icons for `goodreads`, `podcast` and `rss` ([#1057](https://github.com/jpanther/congo/pull/1057), [#1072](https://github.com/jpanther/congo/pull/1072)) + +### Changed + +- โš ๏ธ Required Hugo version is now 0.146.0 or later +- Layouts directory restructured to align with [new Hugo templating data structure](https://gohugo.io/templates/new-templatesystem-overview/) +- Absolute URLs are now preferred over relative URLs +- Upgrade to Mermaid v11.7.0 ([#1035](https://github.com/jpanther/congo/pull/1035), [#1040](https://github.com/jpanther/congo/pull/1040)) +- Upgrade to KaTeX v0.16.22 ([#1048](https://github.com/jpanther/congo/pull/1048)) +- Upgrade to ChartJS v4.5.0 ([#1052](https://github.com/jpanther/congo/pull/1052), [#1067](https://github.com/jpanther/congo/pull/1067)) +- Updated Czech translation ([#1055](https://github.com/jpanther/congo/pull/1055)) + +### Fixed + +- Logo and dark logo display is reversed when switching appearance ([#939](https://github.com/jpanther/congo/issues/939)) +- Shortcodes placed after code blocks with line numbers are rendered with incorrect spacing ([#987](https://github.com/jpanther/congo/issues/987)) +- Some localised date formats would be incorrectly formatted as Markdown ([#1028](https://github.com/jpanther/congo/pull/1028)) +- Anchor links in articles displayed incorrectly in dark mode ([#1041](https://github.com/jpanther/congo/pull/1041)) +- Error building site due to template system changes in Hugo v0.146.0 or later ([#1049](https://github.com/jpanther/congo/issues/1049), [#1073](https://github.com/jpanther/congo/pull/1073)) +- Style is not rendered for Chroma GenericDeleted items ([#1059](https://github.com/jpanther/congo/issues/1059)) +- Tag listing pages not generating links to articles ([#1061](https://github.com/jpanther/congo/issues/1061)) +- Article sharing links for LINE contained invalid URLs ([#1065](https://github.com/jpanther/congo/pull/1065)) + +## [2.11.0] - 2025-02-24 + +### Added + +- New `gist` shortcode as the built-in Hugo version has been deprecated +- Support for article sharing to Bluesky ([#1022](https://github.com/jpanther/congo/pull/1022)) +- New icon for `kofi` ([#976](https://github.com/jpanther/congo/pull/976)) +- Privacy and Services params in bundled `hugo.toml` to provide sensible defaults for built-in Hugo shortcodes + +### Changed + +- Renamed `config.toml` to `hugo.toml` to align with the default Hugo naming convention +- Reduced file sizes of default favicons ([#983](https://github.com/jpanther/congo/pull/983)) +- Upgrade to KaTeX v0.16.21 ([#977](https://github.com/jpanther/congo/pull/977), [#1016](https://github.com/jpanther/congo/pull/1016)) +- Upgrade to Tailwind v3.4.17 ([#979](https://github.com/jpanther/congo/pull/979)) +- Upgrade to Typography v0.5.16 ([#991](https://github.com/jpanther/congo/pull/991)) +- Upgrade to ChartJS v4.4.8 ([#1019](https://github.com/jpanther/congo/pull/1019)) +- Upgrade to FuseJS v7.1.0 ([#1020](https://github.com/jpanther/congo/pull/1020)) + +### Fixed + +- Incorrect links generated for translated content when site is in multi-host mode ([#990](https://github.com/jpanther/congo/pull/990)) +- Profile partial does not generate WebP versions of the author image ([#993](https://github.com/jpanther/congo/issues/993)) +- Vendor script includes do not use the `fingerprintAlgorithm` site parameter ([#1015](https://github.com/jpanther/congo/issues/1015)) +- Minor documentation errors and omissions ([#985](https://github.com/jpanther/congo/pull/985), [#1005](https://github.com/jpanther/congo/pull/1005), [#1007](https://github.com/jpanther/congo/pull/1007), [#1012](https://github.com/jpanther/congo/pull/1012)) +- References to deprecated `twitter` shortcodes and replaced them with `x` + +## [2.10.0] - 2024-12-06 + +### Changed + +- โš ๏ธ Required Hugo version is now 0.128.0 or later +- Adopted new `hugo.IsMultilingual` parameter ([#921](https://github.com/jpanther/congo/pull/921)) +- Adopted new `pagination.pagerSize` config parameter ([#945](https://github.com/jpanther/congo/issues/945)) +- Upgrade to Tailwind v3.4.16 ([#934](https://github.com/jpanther/congo/pull/934), [#947](https://github.com/jpanther/congo/pull/947), [#954](https://github.com/jpanther/congo/pull/954), [#973](https://github.com/jpanther/congo/pull/973)) +- Upgrade to Mermaid v11.4.1 ([#931](https://github.com/jpanther/congo/pull/931), [#946](https://github.com/jpanther/congo/pull/946), [#957](https://github.com/jpanther/congo/pull/957), [#971](https://github.com/jpanther/congo/pull/971)) +- Upgrade to ChartJS v4.4.7 ([#953](https://github.com/jpanther/congo/pull/953), [#972](https://github.com/jpanther/congo/pull/972)) +- Updated Traditional Chinese translation ([#949](https://github.com/jpanther/congo/pull/949)) +- Updated Bulgarian translation ([#963](https://github.com/jpanther/congo/pull/963)) + +### Fixed + +- Example site not building due to an issue in the `zh-Hans` translated content ([#944](https://github.com/jpanther/congo/issues/944)) +- Bluesky icon not picking up theme colour ([#955](https://github.com/jpanther/congo/issues/955)) + +## [2.9.0] - 2024-08-29 + +### Added + +- New `profile` shortcode +- Umami Analytics support ([#832](https://github.com/jpanther/congo/pull/832)) +- Theme parameter to set a default HTML theme colour ([#849](https://github.com/jpanther/congo/pull/849)) +- New icon for `bluesky` ([#851](https://github.com/jpanther/congo/pull/851)) +- Support for article sharing to Threads ([#869](https://github.com/jpanther/congo/issues/869)) +- Norwegian Bokmรฅl translation ([#872](https://github.com/jpanther/congo/pull/872)) +- Breadcrumb metadata to page schema ([#885](https://github.com/jpanther/congo/pull/885)) + +### Changed + +- โš ๏ธ Simplified Chinese language code has changed from `zh-cn` to `zh-Hans` +- โš ๏ธ Traditional Chinese language code has changed from `zh-tw` to `zh-Hant` +- Scroll to top links now use JavaScript to determine when to display ([#806](https://github.com/jpanther/congo/pull/806)) +- Upgrade to Tailwind v3.4.10 ([#930](https://github.com/jpanther/congo/pull/930)) +- Upgrade to Typography v0.5.15 ([#864](https://github.com/jpanther/congo/pull/864), [#927](https://github.com/jpanther/congo/pull/927)) +- Upgrade to ChartJS v4.4.4 ([#881](https://github.com/jpanther/congo/pull/881),[#928](https://github.com/jpanther/congo/pull/928)) +- Upgrade to KaTeX v0.16.11 ([#925](https://github.com/jpanther/congo/pull/925)) +- Upgrade to Mermaid v11.0.2 ([#880](https://github.com/jpanther/congo/pull/880), [#926](https://github.com/jpanther/congo/pull/926)) + +### Fixed + +- Featured images overlap page title when article metadata hidden ([#827](https://github.com/jpanther/congo/issues/827)) +- Inconsistent picture rendering between `figure` shortcode and Markdown render hook ([#828](https://github.com/jpanther/congo/issues/828)) +- Animated GIF files are static when `enableImageWebp` is enabled ([#866](https://github.com/jpanther/congo/issues/866)) +- Next article pagination link animation is inverted ([#870](https://github.com/jpanther/congo/issues/870)) +- Unsafe URL warning in README link ([#901](https://github.com/jpanther/congo/pull/901)) + +## [2.8.2] - 2024-04-17 + +### Added + +- Tamil translation ([#830](https://github.com/jpanther/congo/pull/830)) +- Vietnamese translation ([#845](https://github.com/jpanther/congo/pull/845)) +- Swedish translation ([#852](https://github.com/jpanther/congo/pull/852)) + +### Changed + +- Upgrade to KaTeX v0.16.10 ([#839](https://github.com/jpanther/congo/pull/839)) +- Upgrade to Typography v0.5.12 ([#841](https://github.com/jpanther/congo/pull/841), [#860](https://github.com/jpanther/congo/pull/860)) +- Upgrade to Tailwind v3.4.3 ([#843](https://github.com/jpanther/congo/pull/843)) + +### Fixed + +- Background color inconsistent on mobile when dark mode enabled ([#796](https://github.com/jpanther/congo/issues/796)) + +## [2.8.1] - 2024-03-09 + +### Changed + +- Upgrade to ChartJS v4.4.2 ([#817](https://github.com/jpanther/congo/pull/817)) +- Upgrade to Mermaid v10.9.0 ([#825](https://github.com/jpanther/congo/pull/825)) + +### Fixed + +- Table of Contents missing left border detail ([#794](https://github.com/jpanther/congo/issues/794)) +- `x-twitter` option missing when using sharing links ([#809](https://github.com/jpanther/congo/issues/809)) +- Chinese default config contains incorrect `author` block name ([#807](https://github.com/jpanther/congo/pull/807)) +- Links in articles are prefixed with a blank space ([#813](https://github.com/jpanther/congo/pull/813)) +- HTML tables would not fill the container width on desktop ([#826](https://github.com/jpanther/congo/issues/826)) + +## [2.8.0] - 2024-01-22 + +### Added + +- Quicklink support ([#646](https://github.com/jpanther/congo/pull/646)) +- Automatic support for WebP images ([#693](https://github.com/jpanther/congo/pull/693)) +- Warning when building if links to Markdown files cannot be resolved ([#691](https://github.com/jpanther/congo/pull/691)) +- Ability to share articles to Telegram and Line ([#719](https://github.com/jpanther/congo/pull/719)) +- New icons for `line`, `google-scholar`, `mendeley` and `weibo` ([#719](https://github.com/jpanther/congo/pull/719), [#755](https://github.com/jpanther/congo/pull/755), [#756](https://github.com/jpanther/congo/pull/756)) +- Weibo sharing links ([#756](https://github.com/jpanther/congo/pull/756)) +- Support for Tailwind '950' colour variants ([#751](https://github.com/jpanther/congo/pull/751)) +- Table of contents will now scroll if taller than the browser height ([#733](https://github.com/jpanther/congo/pull/733)) +- External URL article stubs now auto-redirect if leaf pages are generated ([#778](https://github.com/jpanther/congo/pull/778)) +- Korean translation ([#731](https://github.com/jpanther/congo/pull/731)) +- Chinese translation of Example site and Docs ([#776](https://github.com/jpanther/congo/pull/776)) + +### Changed + +- โš ๏ธ Hugo extended version is now required when building sites +- โš ๏ธ Author params block in language configuration has been moved to `params.author` ([#704](https://github.com/jpanther/congo/pull/704)) +- Refactored image logic into a new `picture.html` partial ([#693](https://github.com/jpanther/congo/pull/693)) +- Upgrade to ChartJS v4.4.1 ([#736](https://github.com/jpanther/congo/pull/736)) +- Upgrade to Tailwind v3.4.1 ([#737](https://github.com/jpanther/congo/pull/737), [#752](https://github.com/jpanther/congo/pull/752), [#759](https://github.com/jpanther/congo/pull/759), [#774](https://github.com/jpanther/congo/pull/774)) +- Upgrade to Mermaid v10.7.0 ([#782](https://github.com/jpanther/congo/pull/782)) +- Updated Japanese translation ([#750](https://github.com/jpanther/congo/pull/750)) + +### Fixed + +- Hamburger menu is not dismissed when links are clicked ([#705](https://github.com/jpanther/congo/pull/705)) +- KaTeX, table and code elements wider than the page are not formatted correctly ([#753](https://github.com/jpanther/congo/pull/753)) +- 'รŸ' character is output at the top of articles ([#764](https://github.com/jpanther/congo/pull/764)) +- Article metadata element is output when there is no metadata to display ([#786](https://github.com/jpanther/congo/pull/786)) +- Header elements not vertically centered when using locale switcher ([#788](https://github.com/jpanther/congo/pull/788)) + +### Removed + +- Fathom Analytics custom domain parameter, as this is no longer supported by Fathom + +## [2.7.6] - 2023-11-26 + +### Fixed + +- Some Mermaid diagram elements not styled correctly in dark mode ([#706](https://github.com/jpanther/congo/issues/706)) + +## [2.7.5] - 2023-11-25 + +### Added + +- Ukrainian translation ([#703](https://github.com/jpanther/congo/pull/703)) +- Bulgarian translation ([#718](https://github.com/jpanther/congo/pull/718)) + +### Changed + +- Updated Dutch translation ([#696](https://github.com/jpanther/congo/pull/696)) +- Upgrade to Mermaid v10.6.1 ([#697](https://github.com/jpanther/congo/pull/697)) + +### Fixed + +- Some files have unnecessary execute permissions ([#714](https://github.com/jpanther/congo/pull/714)) +- Empty block is output when locale switcher is hidden ([#699](https://github.com/jpanther/congo/pull/699)) + +## [2.7.4] - 2023-11-05 + +### Fixed + +- Links with non-whitespace characters preceding them are prefixed with a space ([#695](https://github.com/jpanther/congo/issues/695)) + +## [2.7.3] - 2023-10-31 + +### Fixed + +- Article metadata HTML is output as text when using Hugo v0.120.0 ([#689](https://github.com/jpanther/congo/pull/689)) + +## [2.7.2] - 2023-10-26 + +### Changed + +- Upgrade to Tailwind v3.3.5 ([#681](https://github.com/jpanther/congo/pull/681), [#686](https://github.com/jpanther/congo/pull/686)) +- Upgrade to Mermaid v10.6.0 ([#684](https://github.com/jpanther/congo/pull/684)) +- Upgrade to FuseJS v7.0.0 ([#685](https://github.com/jpanther/congo/pull/685)) + +### Fixed + +- Empty block is output when locale switcher is hidden ([#678](https://github.com/jpanther/congo/issues/678)) +- Extra whitespace added after links ([#679](https://github.com/jpanther/congo/issues/679)) + +## [2.7.1] - 2023-10-24 + +### Changed + +- Minor refactor to improve memory efficiency in search results ([#650](https://github.com/jpanther/congo/pull/650)) +- Links in Markdown content are now portable ([#655](https://github.com/jpanther/congo/pull/655)) + +### Fixed + +- JavaScript error setting theme colour when site is loaded in dark mode ([#676](https://github.com/jpanther/congo/issues/676)) + +## [2.7.0] - 2023-10-23 + +### Added + +- New portable locale picker that can be placed in any menu using the `locale` action ([#583](https://github.com/jpanther/congo/issues/583)) +- New icons for `chevron-down`, `chevron-up`, `globe`, `translate`, `coffee` and `x-twitter` ([#669](https://github.com/jpanther/congo/pull/669)) +- Plausible Analytics support ([#584](https://github.com/jpanther/congo/pull/584)) +- Spanish translation of example site samples ([#606](https://github.com/jpanther/congo/pull/606)) +- Japanese translation of docs and example site ([#618](https://github.com/jpanther/congo/pull/618)) +- German translation of example site ([#631](https://github.com/jpanther/congo/pull/631)) + +### Changed + +- โš ๏ธ Renamed the `params.rtl` language parameter to `languageDirection` as this is now supported by Hugo ([#583](https://github.com/jpanther/congo/issues/583)) +- Robots.txt file now allows all by default without concern for whether the environment is set to production ([#620](https://github.com/jpanther/congo/pull/620)) +- Refactored the `head.html` partial to improve perceived performance on page load +- Upgrade to Mermaid v10.5.1 ([#577](https://github.com/jpanther/congo/pull/577), [#582](https://github.com/jpanther/congo/pull/582), [#626](https://github.com/jpanther/congo/pull/626), [#638](https://github.com/jpanther/congo/pull/638), [#663](https://github.com/jpanther/congo/pull/663), [#674](https://github.com/jpanther/congo/pull/674)) +- Upgrade to KaTeX v0.16.9 ([#590](https://github.com/jpanther/congo/pull/590), [#664](https://github.com/jpanther/congo/pull/664)) +- Upgrade to Tailwind v3.3.3 ([#602](https://github.com/jpanther/congo/pull/602)) +- Upgrade to ChartJS v4.3.3 ([#616](https://github.com/jpanther/congo/pull/616), [#627](https://github.com/jpanther/congo/pull/627), [#635](https://github.com/jpanther/congo/pull/635)) +- Upgrade to Typography v0.5.10 ([#641](https://github.com/jpanther/congo/pull/641)) + +### Fixed + +- Prominent images in content and site layout are lazy loaded ([#591](https://github.com/jpanther/congo/issues/591)) +- TypeError is output to console when viewing leaf pages ([#596](https://github.com/jpanther/congo/issues/596)) +- URL to Congo project in footer used deprecated git.io short link ([#605](https://github.com/jpanther/congo/issues/605)) +- Various typos in the docs and example site ([#608](https://github.com/jpanther/congo/pull/608), [#609](https://github.com/jpanther/congo/pull/609), [#613](https://github.com/jpanther/congo/pull/613)) +- Incorrect `render` value is used in the 'external' archetype ([#630](https://github.com/jpanther/congo/pull/630)) +- Images are missing `width` and `height` attributes ([#645](https://github.com/jpanther/congo/pull/645)) +- Extended head partial does not include page context ([#658](https://github.com/jpanther/congo/pull/658)) +- Taxonomy tags aren't padded when wrapping onto a new line ([#671](https://github.com/jpanther/congo/pull/671)) +- Minor CSS improvements, mainly relating to RTL styling +- Minor typos + +### Removed + +- Locales no longer appear next to the site name/logo as they are now part of the menu system ([#583](https://github.com/jpanther/congo/issues/583)) +- Language parameters `isoCode` and `displayName` are no longer supported ([#583](https://github.com/jpanther/congo/issues/583)) +- Meta `content-language` tag as it was not conveying the intended data (which is already included via the HTML `lang` attribute) + +## [2.6.1] - 2023-06-04 + +### Changed + +- Images are now marked for lazy loading by default ([#552](https://github.com/jpanther/congo/pull/552)) +- Current language is no longer displayed in language selection ([#565](https://github.com/jpanther/congo/issues/565)) +- Updated Simplified Chinese (China) translation ([#573](https://github.com/jpanther/congo/pull/573)) + +### Fixed + +- Language selection repeats current language on multilingual sites instead of linking to translated content ([#565](https://github.com/jpanther/congo/issues/565)) +- Icon padding inconsistent when using `--minify` option to build site ([#568](https://github.com/jpanther/congo/pull/568)) +- Copyright string in the language configuration does not apply ([#572](https://github.com/jpanther/congo/issues/572)) +- Upgrade to Mermaid v10.2.1 ([#569](https://github.com/jpanther/congo/pull/569)) + +## [2.6.0] - 2023-05-25 + +### Added + +- Support for Hugo v0.112.0 +- Ability to specify an alternate logo image when dark appearance is active ([#533](https://github.com/jpanther/congo/pull/533), [#543](https://github.com/jpanther/congo/pull/543)) +- Ability to specify the hashing algorithm that is used when fingerprinting assets ([#478](https://github.com/jpanther/congo/issues/478)) +- Arabic translation ([#521](https://github.com/jpanther/congo/pull/521)) +- Slovak translation ([#541](https://github.com/jpanther/congo/pull/541)) +- Czech translation ([#541](https://github.com/jpanther/congo/pull/541)) + +### Changed + +- โš ๏ธ Some parameters in the root of the Languages config file have been nested under the `params` block +- Search results now respect `showDate` value when displaying article metadata ([#511](https://github.com/jpanther/congo/pull/511)) +- Adopted new Tailwind logical properties for RTL styling +- Article sharing links now open in a new tab/window +- Updated Dutch translation ([#544](https://github.com/jpanther/congo/pull/544)) +- Upgrade to Tailwind v3.3.1 ([#523](https://github.com/jpanther/congo/pull/523)) +- Upgrade to KaTeX v0.16.7 ([#538](https://github.com/jpanther/congo/pull/538), [#549](https://github.com/jpanther/congo/pull/549)) +- Upgrade to Chart.js v4.3.0 ([#551](https://github.com/jpanther/congo/pull/551)) +- Upgrade to Mermaid v10.2.0 ([#563](https://github.com/jpanther/congo/pull/563)) + +### Fixed + +- Some `srcset` values are broken when using Hugo `--minify` option ([#508](https://github.com/jpanther/congo/pull/508)) +- Author images are cropped off-centre during image processing ([#527](https://github.com/jpanther/congo/pull/527)) +- Site doesn't build when using Hugo v0.112.0 ([#561](https://github.com/jpanther/congo/pull/561)) + +## [2.5.4] - 2023-03-20 + +### Added + +- Polish translation ([#497](https://github.com/jpanther/congo/pull/497)) + +### Changed + +- Updated Russian translation ([#502](https://github.com/jpanther/congo/pull/502)) + +### Fixed + +- Bengali translation prevents site building in certain configurations ([#503](https://github.com/jpanther/congo/issues/503)) + +## [2.5.3] - 2023-03-05 + +### Added + +- Russian translation ([#485](https://github.com/jpanther/congo/pull/485)) + +### Changed + +- Updated German translation ([#475](https://github.com/jpanther/congo/pull/475)) +- Upgrade to Chart.js v4.2.1 ([#472](https://github.com/jpanther/congo/pull/472)) +- Upgrade to Mermaid v9.4.0 ([#473](https://github.com/jpanther/congo/pull/473)) +- Upgrade to Tailwind v3.2.7 ([#491](https://github.com/jpanther/congo/pull/491)) + +### Fixed + +- Caching the analytics partial prevents some advanced analytics use cases ([#480](https://github.com/jpanther/congo/issues/480)) + +## [2.5.2] - 2023-01-24 + +### Added + +- New icons for `mobile` and `phone` + +### Fixed + +- Author links containing URLs in non-hypertext schemes (ie. `tel:`) would not be created as links ([#452](https://github.com/jpanther/congo/pull/452)) +- Extra whitespace inserted after links within Markdown content ([#456](https://github.com/jpanther/congo/pull/456)) + +## [2.5.1] - 2023-01-20 + +### Changed + +- External links are now automatically appended with `rel="noreferrer noopener"` ([#446](https://github.com/jpanther/congo/pull/446)) +- Updated Traditional Chinese (Taiwan) translation ([#448](https://github.com/jpanther/congo/pull/448)) +- Upgrade to Chart.js v4.2.0 ([#449](https://github.com/jpanther/congo/pull/449)) + +### Fixed + +- Page alignment off-centre when opening hamburger menu at wide viewports ([#445](https://github.com/jpanther/congo/issues/445)) + +## [2.5.0] - 2023-01-17 + +### Added + +- Support for icons in menus including support for links styled as an icon by itself or an icon with text +- Search and appearance switcher links can now be fully customised and positioned anywhere in the menu +- Front matter support for specifying article thumbnails, covers and featured image details (including filename pattern, alt text and caption) +- Two new colour schemes - `cherry` and `sapphire` +- Support for SVG assets as article thumbnails, covers and featured images +- Front matter keywords support on a per article basis +- Indonesian translation ([#398](https://github.com/jpanther/congo/pull/398)) +- Mastodon sharing links ([#405](https://github.com/jpanther/congo/pull/405)) +- `homepage.recentLimit` parameter to adjust the maximum number of recent items listed on the homepage ([#411](https://github.com/jpanther/congo/pull/411)) + +### Changed + +- Images smaller than the article width are no longer resized to fill the content area and will now simply align centre ([#394](https://github.com/jpanther/congo/pull/394)) +- Upgrade to KaTeX v0.16.4 ([#414](https://github.com/jpanther/congo/pull/414)) +- Upgrade to Mermaid v9.3.0 ([#419](https://github.com/jpanther/congo/pull/419)) +- Upgrade to Chart.js v4.1.2 ([#420](https://github.com/jpanther/congo/pull/420), [#434](https://github.com/jpanther/congo/pull/434)) +- Upgrade to Typography v0.5.9 ([#437](https://github.com/jpanther/congo/pull/437)) + +### Fixed + +- `mainSections` parameter is language dependent and is not referenced from `params.toml` ([#376](https://github.com/jpanther/congo/pull/376)) +- Code highlight background cut off in Google Chrome when overflowing content area ([#383](https://github.com/jpanther/congo/pull/383)) +- Social icons shift position during CSS transition when hovered in Safari ([#396](https://github.com/jpanther/congo/pull/396)) +- Hamburger navigation menu is misaligned in mobile browsers ([#399](https://github.com/jpanther/congo/pull/399)) +- Error when attempting to resize SVG assets in page bundles ([#427](https://github.com/jpanther/congo/pull/427)) +- Appearance switcher missing `aria-label` ([#438](https://github.com/jpanther/congo/pull/438)) +- Article links missing `alt` text and `aria-label` ([#439](https://github.com/jpanther/congo/pull/439)) +- Line height in article tag list would cause overlap when wrapping to a new line ([#444](https://github.com/jpanther/congo/pull/444)) +- Figure shortcode would not apply `class` or `href` attributes in some cases +- Charts displaying with incorrect theme colours + +## [2.4.2] - 2022-11-22 + +### Added + +- Dutch translation ([#371](https://github.com/jpanther/congo/pull/371)) +- HTML `theme-color` meta tag to adjust browser colours according to the active Congo colour scheme ([#379](https://github.com/jpanther/congo/pull/379)) + +### Changed + +- Extended head and footer partials are no longer cached during builds +- Upgrade to Chart.js v4.0.1 ([#373](https://github.com/jpanther/congo/pull/373)) + +### Fixed + +- Code highlight background cut off when overflowing content area ([#374](https://github.com/jpanther/congo/issues/374)) +- 'Description' HTML meta tag not set from article description ([#378](https://github.com/jpanther/congo/issues/378)) + +## [2.4.1] - 2022-11-14 + +### Changed + +- Upgrade to Tailwind v3.2.4 ([#368](https://github.com/jpanther/congo/pull/368)) + +### Fixed + +- List page doesn't render nested list pages ([#365](https://github.com/jpanther/congo/issues/365)) +- Pagination is duplicated on term pages ([#366](https://github.com/jpanther/congo/issues/366)) +- Link to last pagination page sometimes displays twice +- Recent articles would sometimes display less than five articles + +## [2.4.0] - 2022-11-10 + +### Added + +- Support for article thumbnails, covers and featured images +- Hybrid header layout that switches between the hamburger and basic menus at appropriate viewport sizes +- Traditional Chinese (Taiwan) translation ([#262](https://github.com/jpanther/congo/pull/262)) +- New `list.paginationWidth` parameter to specify how many pagination links are generated before they are truncated +- Site title display can be toggled on or off independently, allowing for it to be displayed alongside the site logo or removed entirely +- Tailwind plugin for Prettier to standardise the order of CSS classes ([#268](https://github.com/jpanther/congo/pull/268)) +- External links in article content will now open in a new browser tab ([#312](https://github.com/jpanther/congo/pull/312)) +- Independent control over the display of taxonomy listings on article and list pages ([#326](https://github.com/jpanther/congo/pull/326)) +- Button shortcode now supports an optional `download` parameter to instruct browsers to directly download resources rather than navigate to a URL ([#349](https://github.com/jpanther/congo/pull/349)) +- Minor style and layout improvements + +### Changed + +- โš ๏ธ The `logo` parameter has moved under the `header` group and is now set using `header.logo` +- โš ๏ธ Simplified Chinese (China) language code has changed from `zh` to `zh-cn` +- Site logo is now in its own `logo.html` partial to allow it to be easily overridden ([#322](https://github.com/jpanther/congo/pull/322)) +- Upgrade to Chart.js v3.9.1 ([#261](https://github.com/jpanther/congo/pull/261)) +- Upgrade to Tailwind v3.2.2 ([#265](https://github.com/jpanther/congo/pull/265), [#333](https://github.com/jpanther/congo/pull/333), [#352](https://github.com/jpanther/congo/pull/352)) +- Upgrade to Mermaid v9.2.2 ([#272](https://github.com/jpanther/congo/pull/272), [#279](https://github.com/jpanther/congo/pull/279), [#296](https://github.com/jpanther/congo/pull/296), [#339](https://github.com/jpanther/congo/pull/339), [#360](https://github.com/jpanther/congo/pull/360)) +- Upgrade to KaTeX v0.16.3 ([#284](https://github.com/jpanther/congo/pull/284), [#334](https://github.com/jpanther/congo/pull/334)) +- Upgrade to Typography v0.5.8 ([#287](https://github.com/jpanther/congo/pull/287), [#292](https://github.com/jpanther/congo/pull/292), [#353](https://github.com/jpanther/congo/pull/353)) + +### Fixed + +- Appearance switcher title doesn't update when switching appearance ([#235](https://github.com/jpanther/congo/issues/235)) +- Article updated date logic doesn't consider formatted date values ([#259](https://github.com/jpanther/congo/issues/259)) +- Error calling Paginate when attempting to generate a site with no taxonomies ([#289](https://github.com/jpanther/congo/issues/289)) +- Multilingual links are spaced incorrectly when using Hugo minify ([#298](https://github.com/jpanther/congo/issues/298)) +- Pagination links overflow the page area on large datasets ([#299](https://github.com/jpanther/congo/issues/299)) +- Embedded content disappears when displayed at certain viewport sizes ([#302](https://github.com/jpanther/congo/issues/302), [#335](https://github.com/jpanther/congo/issues/335)) +- Order of articles on list pages would not follow Hugo conventions when grouped by year ([#313](https://github.com/jpanther/congo/issues/313)) +- Button shortcode overlaps table of contents when at the top of the article content ([#337](https://github.com/jpanther/congo/issues/337)) +- Providing a `colorScheme` value containing uppercase characters breaks some deployments ([#347](https://github.com/jpanther/congo/issues/347)) + +## [2.3.1] - 2022-07-30 + +### Added + +- Japanese translation ([#234](https://github.com/jpanther/congo/pull/234)) + +### Changed + +- Upgrade to Mermaid v9.1.3 ([#233](https://github.com/jpanther/congo/pull/233)) +- Upgrade to Tailwind v3.1.6 ([#245](https://github.com/jpanther/congo/pull/245)) +- Upgrade to Typography v0.5.4 ([#246](https://github.com/jpanther/congo/pull/246)) +- Upgrade to Chart.js v3.8.2 ([#247](https://github.com/jpanther/congo/pull/247)) + +### Fixed + +- Main content misaligned when hamburger menu is opened at large viewport sizes + +## [2.3.0] - 2022-06-27 + +### Added + +- Header layouts for selecting a preferred header style +- Hamburger menu header layout with popover main menu ([#167](https://github.com/jpanther/congo/discussions/167), [#88](https://github.com/jpanther/congo/discussions/88), [#43](https://github.com/jpanther/congo/discussions/43), [#29](https://github.com/jpanther/congo/discussions/29)) +- Front matter support for showing or hiding comments on a per article basis ([#207](https://github.com/jpanther/congo/discussions/207)) +- `showCopyright` and `showThemeAttribution` parameters that allow more control over how the site footer is displayed ([#192](https://github.com/jpanther/congo/discussions/192)) +- `bars` SVG icon + +### Changed + +- โš ๏ธ Footer configuration parameters are now in their own `footer` sub-group +- Search will now return results for all page types, including lists and taxonomies +- Comments partials are now better considered within the page layout +- Reduced whitespace at the top of the main content block ([#226](https://github.com/jpanther/congo/discussions/226)) +- Upgrade to Tailwind v3.1.4 ([#225](https://github.com/jpanther/congo/pull/225)) + +### Fixed + +- Hugo v0.101.0 breaks the link to the homepage ([#230](https://github.com/jpanther/congo/issues/230)) +- Search link does not appear in header if main menu has no items to display +- Search only returns results in the primary language when multiple languages are available ([#229](https://github.com/jpanther/congo/issues/229)) +- Arrow on external article links not aligned correctly when title wraps onto multiple lines +- Arrow on external article links points the wrong direction for RTL languages +- Scroll to top misaligned with the footer at small viewport heights +- Link to homepage would be incorrect in some deployments if `baseURL` contained sub-directories in the path + +## [2.2.3] - 2022-06-22 + +### Changed + +- Profile image alt text now uses author name when available + +### Fixed + +- Search not working when `baseURL` does not end with a forward slash ([#224](https://github.com/jpanther/congo/pull/224)) +- Author `headline` parameter not correctly displaying Markdown or Emoji content + +## [2.2.2] - 2022-06-16 + +### Added + +- Breadcrumb display can now be can now be specified in front matter for articles and list pages +- Italian translation ([#209](https://github.com/jpanther/congo/pull/209)) + +### Changed + +- Upgrade to Chart.js v3.8.0 ([#204](https://github.com/jpanther/congo/pull/204)) +- Upgrade to KaTeX v0.16.0 ([#208](https://github.com/jpanther/congo/pull/208)) +- Upgrade to Mermaid v9.1.2 ([#214](https://github.com/jpanther/congo/pull/214)) + +## [2.2.1] - 2022-05-25 + +### Changed + +- Upgrade to Mermaid v9.1.1 ([#194](https://github.com/jpanther/congo/pull/194)) +- Upgrade to Fuse.js v6.6.2 ([#195](https://github.com/jpanther/congo/pull/195)) +- Upgrade KaTeX to v0.15.6 ([#202](https://github.com/jpanther/congo/pull/202)) + +### Fixed + +- Main content area doesn't grow to window height ([#201](https://github.com/jpanther/congo/issues/201)) + +## [2.2.0] - 2022-05-09 + +### Added + +- Finnish translation ([#185](https://github.com/jpanther/congo/pull/185)) + +### Changed + +- Updated French translation ([#178](https://github.com/jpanther/congo/pull/178)) +- Analytics partial now checks `hugo.IsProduction` instead of `.Site.IsServer` before including scripts ([#179](https://github.com/jpanther/congo/issues/179)) +- Upgrade to Tailwind v3.0.24 ([#176](https://github.com/jpanther/congo/pull/176)) +- Upgrade to Mermaid v9.0.1 ([#183](https://github.com/jpanther/congo/pull/183)) +- Upgrade to Fuse.js v6.6.1 ([#189](https://github.com/jpanther/congo/pull/189)) + +### Fixed + +- Code blocks are rendered incorrectly in RTL languages ([#164](https://github.com/jpanther/congo/issues/164)) +- Scroll to top link overlaps footer menu on mobile devices when there are several links ([#172](https://github.com/jpanther/congo/issues/172)) + +### Removed + +- `hugo.Generator` from HTML `` so that the [default Hugo generator behaviour](https://gohugo.io/getting-started/configuration/#disablehugogeneratorinject) works as expected ([#179](https://github.com/jpanther/congo/issues/179)) + +## [2.1.3] - 2022-04-12 + +### Added + +- Hungarian translation ([#170](https://github.com/jpanther/congo/pull/170)) + +### Fixed + +- Scroll to top link overlaps footer menu on mobile devices ([#172](https://github.com/jpanther/congo/issues/172)) + +## [2.1.2] - 2022-04-08 + +### Added + +- Romanian translation ([#168](https://github.com/jpanther/congo/pull/168)) + +### Changed + +- Upgrade to Mermaid v9.0.0 + +## [2.1.1] - 2022-04-03 + +### Added + +- Print styles to hide unnecessary elements when printing ([#155](https://github.com/jpanther/congo/pull/155)) +- Hebrew translation ([#163](https://github.com/jpanther/congo/pull/163)) + +### Fixed + +- Footer menu displays incorrectly in RTL languages ([#165](https://github.com/jpanther/congo/pull/165)) + +## [2.1.0] - 2022-03-14 + +### Added + +- Simple page layout for creating full-width content ([#139](https://github.com/jpanther/congo/issues/139)) +- Portuguese (Portugal) translation ([#144](https://github.com/jpanther/congo/pull/144)) + +### Changed + +- Upgrade SVG icons to FontAwesome 6: + - New icons for Hashnode, bug, check, comment, light bulb, list, pencil, skull, tag, and information. ([#136](https://github.com/jpanther/congo/discussions/136)) + - โš ๏ธ The `exclamation-triangle` icon has been renamed `triangle-exclamation` + - โš ๏ธ The `times` icon has been renamed `xmark` + - โš ๏ธ The `stackoverflow` icon has been renamed `stack-overflow` +- Upgrade KaTeX to v0.15.3 +- Markdown images and `figure` shortcode now search the `assets/` directory if an image cannot be found in page bundle ([#126](https://github.com/jpanther/congo/issues/126)) +- Markdown images and `figure` shortcode now fallback to static assets if an image is not provided as a Hugo resource ([#126](https://github.com/jpanther/congo/issues/126)) +- Taxonomy term listings now honour the `groupByYear` parameter ([#145](https://github.com/jpanther/congo/pull/145)) +- The `alert` shortcode now allows its icon to be specified as a parameter + +### Fixed + +- Dark appearance shown even when default appearance set to light and auto switching is disabled ([#149](https://github.com/jpanther/congo/issues/149)) + +## [2.0.5] - 2022-02-20 + +### Added + +- Bengali translation ([#115](https://github.com/jpanther/congo/pull/115)) + +### Changed + +- Upgrade to Tailwind v3.0.23 and Typography v0.5.2 +- Upgrade to Mermaid v8.14.0 +- Upgrade to Chart.js v3.7.1 + +### Fixed + +- Updated date is displayed even when it is the same as published date +- Structured data on homepage unparsable by Google ([#113](https://github.com/jpanther/congo/issues/113)) +- Underline styles not displaying correctly in some browsers ([#125](https://github.com/jpanther/congo/issues/125)) + +## [2.0.4] - 2022-02-09 + +### Changed + +- Updated German translation ([#110](https://github.com/jpanther/congo/pull/110)) +- Upgrade to Tailwind v3.0.19 + +### Fixed + +- Main content area not growing to fill screen vertically +- Search results not cleared when search is dismissed ([#109](https://github.com/jpanther/congo/pull/109)) +- Emoji strings not displaying in search results + +## [2.0.3] - 2022-02-07 + +### Changed + +- Updated Turkish translation ([#105](https://github.com/jpanther/congo/pull/105)) +- Updated Spanish translation ([#106](https://github.com/jpanther/congo/pull/106)) + +### Fixed + +- Markdown images and `figure` shortcode fail to load resource when providing an external URL source +- HTML `figcaption` tags are output for Markdown images even when a caption is not provided +- Light appearance briefly appears on page load before switching to dark appearance ([#102](https://github.com/jpanther/congo/issues/102)) + +## [2.0.2] - 2022-02-05 + +### Changed + +- Updated French translation ([#100](https://github.com/jpanther/congo/pull/100)) + +### Fixed + +- User's appearance preference is lost on page load when default appearance is dark ([#102](https://github.com/jpanther/congo/issues/102)) +- JavaScript warning when appearance switcher is disabled + +## [2.0.1] - 2022-02-03 + +### Fixed + +- Hugo module error when downloading version 2 +- Emoji strings not displaying in table of contents + +## [2.0.0] - 2022-02-03 + +### Added + +- Multilingual support +- Right-to-left (RTL) language support +- Site search powered by Fuse.js +- Automatic Markdown image resizing and srcset generation +- Performance and Accessibility improvements to achieve perfect Lighthouse scores +- Tables of contents on article pages ([#47](https://github.com/jpanther/congo/discussions/47)) +- Code copy buttons in article content +- Taxonomy and term listings now support Markdown content +- Taxonomies on article and list pages +- Article pagination direction can be inverted +- Author `headline` parameter +- Skip to content and Scroll to top links +- Archetype for generating links to external articles + +### Changed + +- โš ๏ธ Required Hugo version is now 0.87.0 or later +- โš ๏ธ Complete rewrite of dark mode to allow more flexibile configuration +- โš ๏ธ All theme images are now Hugo assets +- โš ๏ธ Overhauled `figure` shortcode which now resizes images +- Upgrade to Tailwind v3.0.18 +- Inline JavaScript moved to external files +- Improved JSON-LD structured data +- Breadcrumbs now fallback to section name when `title` is not provided +- Minor style and layout improvements + +## [1.6.4] - 2022-01-24 + +### Added + +- Turkish translation ([#90](https://github.com/jpanther/congo/pull/90)) + +### Changed + +- Article updated date formatting and i18n ([#91](https://github.com/jpanther/congo/pull/91)) +- Upgrade to Mermaid v8.13.10 + +### Fixed + +- Article metadata not wrapping at small viewports ([#91](https://github.com/jpanther/congo/pull/91)) + +## [1.6.3] - 2022-01-19 + +### Added + +- Icon for Stack Overflow ([#82](https://github.com/jpanther/congo/pull/82)) + +### Changed + +- Upgrade to Mermaid v8.13.9 +- Upgrade to KaTeX v0.15.2 + +### Fixed + +- Emoji characters in article titles not appearing on list pages and in HTML metadata ([#84](https://github.com/jpanther/congo/pull/84)) + +## [1.6.2] - 2022-01-07 + +### Changed + +- Upgrade to Chart.js v3.7.0 +- Upgrade to Mermaid v8.13.8 + +### Fixed + +- `lead` shortcode not rendering Markdown formatted text ([#73](https://github.com/jpanther/congo/issues/73)) +- JSON-LD keywords data not structured correctly ([#74](https://github.com/jpanther/congo/issues/74)) + +## [1.6.1] - 2021-12-31 + +### Added + +- Icon for Blogger ([#71](https://github.com/jpanther/congo/pull/71)) + +### Fixed + +- Error when building using older Hugo versions ([#65](https://github.com/jpanther/congo/pull/65)) +- Error when serving sites using blogdown ([#66](https://github.com/jpanther/congo/pull/66)) + +## [1.6.0] - 2021-12-21 + +### Added + +- Article word counts ([#57](https://github.com/jpanther/congo/pull/57)) +- Last updated dates on articles +- Icons for Amazon, Apple, Flickr, Google, Kickstarter, Microsoft, Patreon, Telegram, Tumblr and WhatsApp + +### Changed + +- Adjusted contrast of some items to improve accessibility +- Upgrade to Chart.js v3.6.2 +- Upgrade to Mermaid v8.13.6 + +### Fixed + +- Missing ARIA descriptions and alt tags on some images and links + +## [1.5.3] - 2021-11-18 + +### Changed + +- Updated Chinese translation ([#32](https://github.com/jpanther/congo/pull/32)) + +### Fixed + +- Article pagination uses date of current article ([#32](https://github.com/jpanther/congo/pull/32)) + +## [1.5.2] - 2021-11-10 + +### Added + +- German translation ([#27](https://github.com/jpanther/congo/pull/27)) +- Portuguese (Brazil) translation ([#28](https://github.com/jpanther/congo/pull/28)) +- Spanish translation ([#30](https://github.com/jpanther/congo/pull/30)) + +### Fixed + +- Article pagination link spacing ([#26](https://github.com/jpanther/congo/pull/26)) +- Minor icon style issues + +## [1.5.1] - 2021-11-04 + +### Fixed + +- Hugo failing to build site when deploying as a module + +## [1.5.0] - 2021-11-04 + +### Added + +- Chart.js support using `chart` shortcode +- KaTeX support using `katex` shortcode +- Dark mode toggle with new theme parameters for managing light/dark appearance +- French translation ([#18](https://github.com/jpanther/congo/pull/18)) +- Author bio in article footer +- Grouping by year can now be specified in front matter on list pages + +### Changed + +- Site name, author and menus will now render Markdown and Emoji +- Bundled Mermaid for better vendor dependency management +- Mermaid diagrams are now themed to match the configured colour scheme +- Upgrade to Tailwind v2.2.19 + +### Fixed + +- Site logo image dimensions are unconstrained ([#19](https://github.com/jpanther/congo/issues/19)) +- Article summary styled incorrectly in dark mode +- Links containing `code` blocks styled incorrectly + +## [1.4.0] - 2021-10-20 + +### Added + +- Footer menu +- Article summary support +- Slate colour scheme ([#9](https://github.com/jpanther/congo/pull/9)) +- Icons for ORCID and ResearchGate ([#9](https://github.com/jpanther/congo/pull/9)) +- Pinterest sharing links +- Sharing links can now be specified in front matter + +### Changed + +- Main menu is now optional +- Upgrade to Mermaid v8.13.3 +- Upgrade to Tailwind v2.2.17 + +### Fixed + +- Site logo not linked to home page ([#13](https://github.com/jpanther/congo/issues/13)) + +## [1.3.0] - 2021-09-29 + +### Added + +- Site logo support +- Chinese translation ([#2](https://github.com/jpanther/congo/pull/2)) + +### Changed + +- Upgrade to Tailwind v2.2.16 + +## [1.2.1] - 2021-08-26 + +### Added + +- New `robots` parameter to add metadata to guide robots on how to handle specific content + +### Changed + +- URLs are relative by default which allows the theme to be more flexible in different deployment scenarios + +### Fixed + +- Missing dark style for group subheadings on article listings +- Fathom Analytics script included twice when using custom domain +- Recent heading on homepage profile layout misaligned + +## [1.2.0] - 2021-08-22 + +### Added + +- Multiple colour schemes +- Edit links on article pages +- Icons for Foursquare and Pinterest +- Asset fingerprinting and SRI +- CSS minification for custom stylesheets + +### Changed + +- Static assets are now managed through Hugo Pipelines + +### Fixed + +- Minor style issue with `button` shortcode +- Hugo Modules would fail when using default theme config file +- Some content not centred correctly on the profile homepage layout +- Some links missing the correct styles when in Firefox +- `externalUrl` front matter not working on some list pages + +## [1.1.1] - 2021-08-19 + +### Fixed + +- Hotfix for exampleSite and GitHub configuration + +## [1.1.0] - 2021-08-18 + +### Added + +- Breadcrumbs +- i18n support +- Recent articles partial +- CSS transitions +- Hugo module support +- JSON-LD structured metadata + +### Changed + +- โš ๏ธ Renamed parameter: `homepage.showList` -> `homepage.showRecent` +- โš ๏ธ Renamed parameter: `homepage.listSections` -> `mainSections` +- โš ๏ธ Consolidated author configuration parameters into `config.toml` +- General style tweaks to enhance design consistency + +### Fixed + +- URLs being incorrect in some cases when the site is deployed in a subfolder + +## [1.0.0] - 2021-08-16 + +### Added + +- Built with Tailwind CSS JIT for minified stylesheets without any excess code +- Fully responsive layout +- Dark mode (auto-switching based upon browser) +- Highly customisable configuration +- Multiple homepage layouts +- Flexible with any content types, taxonomies and menus +- Ability to link to posts on third-party websites +- Diagrams and visualisations using Mermaid JS +- SVG icons from FontAwesome 5 +- Heading anchors, Buttons, Badges and more +- HTML and Emoji support in articles +- SEO friendly with links for sharing to social media +- RSS feeds +- Fathom Analytics and Google Analytics support +- Favicons support +- Comments support +- Advanced customisation using simple Tailwind colour definitions and styles +- Fully documented + +[Unreleased]: https://github.com/jpanther/congo/compare/v2.13.0...HEAD +[2.13.0]: https://github.com/jpanther/congo/compare/v2.12.2...v2.13.0 +[2.12.2]: https://github.com/jpanther/congo/compare/v2.12.1...v2.12.2 +[2.12.1]: https://github.com/jpanther/congo/compare/v2.12.0...v2.12.1 +[2.12.0]: https://github.com/jpanther/congo/compare/v2.11.0...v2.12.0 +[2.11.0]: https://github.com/jpanther/congo/compare/v2.10.0...v2.11.0 +[2.10.0]: https://github.com/jpanther/congo/compare/v2.9.0...v2.10.0 +[2.9.0]: https://github.com/jpanther/congo/compare/v2.8.2...v2.9.0 +[2.8.2]: https://github.com/jpanther/congo/compare/v2.8.1...v2.8.2 +[2.8.1]: https://github.com/jpanther/congo/compare/v2.8.0...v2.8.1 +[2.8.0]: https://github.com/jpanther/congo/compare/v2.7.6...v2.8.0 +[2.7.6]: https://github.com/jpanther/congo/compare/v2.7.5...v2.7.6 +[2.7.5]: https://github.com/jpanther/congo/compare/v2.7.4...v2.7.5 +[2.7.4]: https://github.com/jpanther/congo/compare/v2.7.3...v2.7.4 +[2.7.3]: https://github.com/jpanther/congo/compare/v2.7.2...v2.7.3 +[2.7.2]: https://github.com/jpanther/congo/compare/v2.7.1...v2.7.2 +[2.7.1]: https://github.com/jpanther/congo/compare/v2.7.0...v2.7.1 +[2.7.0]: https://github.com/jpanther/congo/compare/v2.6.1...v2.7.0 +[2.6.1]: https://github.com/jpanther/congo/compare/v2.6.0...v2.6.1 +[2.6.0]: https://github.com/jpanther/congo/compare/v2.5.4...v2.6.0 +[2.5.4]: https://github.com/jpanther/congo/compare/v2.5.3...v2.5.4 +[2.5.3]: https://github.com/jpanther/congo/compare/v2.5.2...v2.5.3 +[2.5.2]: https://github.com/jpanther/congo/compare/v2.5.1...v2.5.2 +[2.5.1]: https://github.com/jpanther/congo/compare/v2.5.0...v2.5.1 +[2.5.0]: https://github.com/jpanther/congo/compare/v2.4.2...v2.5.0 +[2.4.2]: https://github.com/jpanther/congo/compare/v2.4.1...v2.4.2 +[2.4.1]: https://github.com/jpanther/congo/compare/v2.4.0...v2.4.1 +[2.4.0]: https://github.com/jpanther/congo/compare/v2.3.1...v2.4.0 +[2.3.1]: https://github.com/jpanther/congo/compare/v2.3.0...v2.3.1 +[2.3.0]: https://github.com/jpanther/congo/compare/v2.2.3...v2.3.0 +[2.2.3]: https://github.com/jpanther/congo/compare/v2.2.2...v2.2.3 +[2.2.2]: https://github.com/jpanther/congo/compare/v2.2.1...v2.2.2 +[2.2.1]: https://github.com/jpanther/congo/compare/v2.2.0...v2.2.1 +[2.2.0]: https://github.com/jpanther/congo/compare/v2.1.3...v2.2.0 +[2.1.3]: https://github.com/jpanther/congo/compare/v2.1.2...v2.1.3 +[2.1.2]: https://github.com/jpanther/congo/compare/v2.1.1...v2.1.2 +[2.1.1]: https://github.com/jpanther/congo/compare/v2.1.0...v2.1.1 +[2.1.0]: https://github.com/jpanther/congo/compare/v2.0.5...v2.1.0 +[2.0.5]: https://github.com/jpanther/congo/compare/v2.0.4...v2.0.5 +[2.0.4]: https://github.com/jpanther/congo/compare/v2.0.3...v2.0.4 +[2.0.3]: https://github.com/jpanther/congo/compare/v2.0.2...v2.0.3 +[2.0.2]: https://github.com/jpanther/congo/compare/v2.0.1...v2.0.2 +[2.0.1]: https://github.com/jpanther/congo/compare/v2.0.0...v2.0.1 +[2.0.0]: https://github.com/jpanther/congo/compare/v1.6.4...v2.0.0 +[1.6.4]: https://github.com/jpanther/congo/compare/v1.6.3...v1.6.4 +[1.6.3]: https://github.com/jpanther/congo/compare/v1.6.2...v1.6.3 +[1.6.2]: https://github.com/jpanther/congo/compare/v1.6.1...v1.6.2 +[1.6.1]: https://github.com/jpanther/congo/compare/v1.6.0...v1.6.1 +[1.6.0]: https://github.com/jpanther/congo/compare/v1.5.3...v1.6.0 +[1.5.3]: https://github.com/jpanther/congo/compare/v1.5.2...v1.5.3 +[1.5.2]: https://github.com/jpanther/Congo/compare/v1.5.1...v1.5.2 +[1.5.1]: https://github.com/jpanther/Congo/compare/v1.5.0...v1.5.1 +[1.5.0]: https://github.com/jpanther/Congo/compare/v1.4.0...v1.5.0 +[1.4.0]: https://github.com/jpanther/Congo/compare/v1.3.0...v1.4.0 +[1.3.0]: https://github.com/jpanther/Congo/compare/v1.2.1...v1.3.0 +[1.2.1]: https://github.com/jpanther/Congo/compare/v1.2.0...v1.2.1 +[1.2.0]: https://github.com/jpanther/Congo/compare/v1.1.1...v1.2.0 +[1.1.1]: https://github.com/jpanther/congo/compare/v1.1.0...v1.1.1 +[1.1.0]: https://github.com/jpanther/congo/compare/v1.0.0...v1.1.0 +[1.0.0]: https://github.com/jpanther/congo/releases/tag/v1.0.0 diff --git a/themes/congo/CODE_OF_CONDUCT.md b/themes/congo/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..ad2925b --- /dev/null +++ b/themes/congo/CODE_OF_CONDUCT.md @@ -0,0 +1,43 @@ +# Code of Conduct - Congo + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behaviour that contributes to a positive environment for our community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologising to those affected by our mistakes, and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behaviour include: + +- The use of sexualised language or imagery, and sexual attention or advances +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying and enforcing our standards of acceptable behaviour and will take appropriate and fair corrective action in response to any instances of unacceptable behaviour. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviours that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behaviour may be reported to the [project maintainer](https://github.com/jpanther/). All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org/), version [1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct/code_of_conduct.md) and [2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct/code_of_conduct.md), and was generated by [contributing-gen](https://github.com/bttger/contributing-gen). diff --git a/themes/congo/CONTRIBUTING.md b/themes/congo/CONTRIBUTING.md new file mode 100644 index 0000000..71a3d7a --- /dev/null +++ b/themes/congo/CONTRIBUTING.md @@ -0,0 +1,53 @@ +## How to contribute to Congo + +### Bugs & other issues + +#### Found a bug? ๐Ÿ› + +- **Ensure the bug has not already been reported** by searching [GitHub Issues](https://github.com/jpanther/congo/issues). If there's already an open issue, feel free to add any extra information you might have about the issue. +- If you're unable to find an open issue matching the problem, [open a new one](https://github.com/jpanther/congo/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample**, **screenshot**, or a **test case** demonstrating the expected behavior that is not occurring. +- Where possible, use the bug report templates to create the issue. Avoid including descriptions like "bug", "feature", etc in the issue title as these will be handled by labels. + +#### Have a patch that fixes an issue? + +- Great! Open a new GitHub pull request with the patch. +- All development occurs on the `dev` branch and new PRs should be forked from here. +- The command `npm run example` can be used to test local changes using the example site. +- Ensure the PR description clearly describes the problem and solution. Include the relevant issue number, if applicable. +- **Before submitting**, check the [coding conventions](#coding-conventions) section below to learn more about coding and commit message expectations. + +### New features & enhancements + +#### Do you intend to add a new feature, or change an existing one? + +- Enhancements are welcome but before implementing any features, be sure to suggest your change by opening a [new discussion](https://github.com/jpanther/congo/discussions/new) about your idea. Enhancements are discussed to ensure they fit with the project's design intent and overall roadmap. +- Before opening a discussion, [check to see](https://github.com/jpanther/congo/discussions/categories/ideas) if a similar idea is already being discussed. +- All ideas and suggestions are welcome and will be judged on their merits. +- If the community supports your idea, go ahead and submit a PR with the implemented feature. + +### Questions? ๐Ÿ™‹โ€โ™€๏ธ + +- If you have a general question, these should be asked using [GitHub Discussions](https://github.com/jpanther/congo/discussions). Feel free to open a [new discussion](https://github.com/jpanther/congo/discussions/new) to ask your question using the "Q&A" category. +- Be sure to check if your question has already been answered by searching [existing Q&A discussions](https://github.com/jpanther/congo/discussions/categories/q-a). + +### Coding conventions + +- Indent using 2 spaces (soft tabs). +- Put spaces between list items (ie. `[1, 2, 3]`, not `[1,2,3]`), around operators (ie. `1 + 1`, not `1+1`) and inside go templating tags (ie. `{{< alert >}}`, not `{{}}`). +- Avoid code reuse in templates by extracting components into partials. +- Layout code in a logical manner that prioritises readability. +- Add comments when the intent of the code isn't immediately apparent or to break up large blocks of logic. +- Use relative paths to assets without including the preceding slash but, when referring to a folder, including a trailing slash (ie. `static/img/`, not `/static/img/` or `/static/img`). +- Any static text must be referenced using the `i18n` methods and included in the localisation assets. +- Commit often, preferring incremental changes rather than bundling everything into a single, large commit. + +The project includes a Prettier config that helps to format code in line with these guidelines. + +#### Commit message guidelines + +- Use [Gitmoji](https://gitmoji.dev) in commit messages to provide context. +- Clearly describe the change with a short summary in the first 72 characters. +- Place more detailed explanations in paragraphs below the summary, separated by a blank line. +- Use imperative language (ie. "Fix bug", not "Fixed bug" or "Fixes bug"). +- Do not end the summary line with a period. +- Reference any issues fixed using their GitHub issue number. diff --git a/themes/congo/LICENSE b/themes/congo/LICENSE new file mode 100644 index 0000000..37b1ead --- /dev/null +++ b/themes/congo/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2021 James Panther (https://jamespanther.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/themes/congo/README.md b/themes/congo/README.md new file mode 100644 index 0000000..72ddde6 --- /dev/null +++ b/themes/congo/README.md @@ -0,0 +1,96 @@ +# Congo + +Congo is designed to be a powerful, lightweight theme for [Hugo](https://gohugo.io). It's built using Tailwind CSS with a clean and minimalist design that prioritises to your content. + +๐ŸŒ [Demo site](https://jpanther.github.io/congo/) +๐Ÿ“‘ [Theme documentation](https://jpanther.github.io/congo/docs/) +๐Ÿ› [Bug reports & issues](https://github.com/jpanther/congo/issues) +๐Ÿ’ก [Questions & feature requests](https://github.com/jpanther/congo/discussions) + +![Screenshot](https://raw.githubusercontent.com/jpanther/congo/stable/images/screenshot.png) + +## Features + +- Fully responsive layout built with Tailwind CSS 3.0 +- Multiple colour schemes (or fully customise your own) +- Dark mode (forced on/off or auto-switching with user toggle) +- Highly customisable configuration +- Multiple homepage layouts +- Flexible with any content types, taxonomies and menus +- Multilingual content support including support for RTL languages +- Ability to link to posts on third-party websites +- Client-side site search powered by Fuse.js +- Diagrams and visualisations using Mermaid +- Charts using Chart.js +- Mathematical notation using KaTeX +- SVG icons from FontAwesome 6 +- Automatic image resizing using Hugo Pipes +- Heading anchors, Tables of Contents, Code copy, Buttons, Badges and more +- HTML and Emoji support in articles ๐ŸŽ‰ +- SEO friendly with links for sharing to social media +- Fathom Analytics, Plausible Analytics, Umami Analytics and Google Analytics support +- RSS feeds, Favicons and comments support +- Advanced customisation using simple Tailwind colour definitions and styles +- Optimised for performance and accessibility with perfect Lighthouse scores +- Fully documented with regular updates + +--- + +## Documentation + +Congo has [extensive documentation](https://jpanther.github.io/congo/docs/) that covers all aspects of the theme. Be sure to [read the docs](https://jpanther.github.io/congo/docs/) to learn more about how to use the theme and its features. + +--- + +## Installation + +Congo supports several installation methods - as a Hugo Module (easiest), a git submodule, or as a completely manual install. + +Detailed instructions for each method can be found in the [Installation](https://jpanther.github.io/congo/docs/installation) docs. You should consult the documentation for the simplest setup experience. Below is a quick start guide using Hugo modules if you're already confident installing Hugo themes. + +### Quick start using Hugo + +> **Note:** Ensure you have **Go** and **Hugo** installed, and that you have created a new Hugo project before proceeding. + +1. From your project directory, initialise Hugo Modules: + + ```shell + hugo mod init github.com// + ``` + +2. Create `config/_default/module.toml` and add the following: + + ```toml + [[imports]] + path = "github.com/jpanther/congo/v2" + ``` + +3. Start your server using `hugo server` and the theme will be downloaded automatically. + +4. In the root folder of your website, delete the `hugo.toml` file that was generated by Hugo. Copy the `*.toml` config files from the theme into your `config/_default/` folder. + + > **Note:** Do not overwrite the `module.toml` file you created above! + + You will find these theme config files in the Hugo cache directory, or [download a copy](https://github.com/jpanther/congo/tree/stable/config/_default) from GitHub. + +5. Follow the [Getting Started](https://jpanther.github.io/congo/docs/getting-started/) instructions to configure your website. + +### Installing theme updates + +As new releases are posted, you can update the theme using Hugo. Simply run `hugo mod get -u` from your project directory and the theme will automatically update to the latest release. + +Detailed [update instructions](https://jpanther.github.io/congo/docs/installation/#installing-updates) are available in the docs. + +--- + +## Contributing + +Congo is expected to evolve over time. I intend to keep adding features and making changes as required. + +Feel free to get in touch with any issues or suggestions for new features you'd like to see. + +- ๐Ÿ› **Bug reports & issues:** Use [GitHub Issues](https://github.com/jpanther/congo/issues) +- ๐Ÿ’ก **Ideas for new features:** Open a discussion on [GitHub Discussions](https://github.com/jpanther/congo/discussions) +- ๐Ÿ™‹โ€โ™€๏ธ **General questions:** Head to [GitHub Discussions](https://github.com/jpanther/congo/discussions) + +If you're able to fix a bug or implement a new feature, I welcome PRs for this purpose. Learn more in the [contributing guidelines](https://github.com/jpanther/congo/blob/dev/CONTRIBUTING.md). diff --git a/themes/congo/archetypes/default.md b/themes/congo/archetypes/default.md new file mode 100644 index 0000000..97f90a6 --- /dev/null +++ b/themes/congo/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +description: "" +--- diff --git a/themes/congo/archetypes/external.md b/themes/congo/archetypes/external.md new file mode 100644 index 0000000..f22bbff --- /dev/null +++ b/themes/congo/archetypes/external.md @@ -0,0 +1,10 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +externalUrl: "" +summary: "" +showReadingTime: false +build: + render: "never" + list: "local" +--- diff --git a/themes/congo/assets/css/compiled/main.css b/themes/congo/assets/css/compiled/main.css new file mode 100644 index 0000000..481b0e2 --- /dev/null +++ b/themes/congo/assets/css/compiled/main.css @@ -0,0 +1,3165 @@ +/*! Congo v2.13.0 | MIT License | https://github.com/jpanther/congo */ + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com */ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: currentColor; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden]:where(:not([hidden="until-found"])) { + display: none; +} + +.prose { + color: var(--tw-prose-body); + max-width: 65ch; +} + +.prose :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; +} + +.prose :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-lead); + font-size: 1.25em; + line-height: 1.6; + margin-top: 1.2em; + margin-bottom: 1.2em; +} + +.prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-links); + text-decoration: underline; + font-weight: 500; + text-decoration-color: rgba(var(--color-primary-300), 1); +} + +.prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)):hover { + color: rgba(var(--color-neutral), 1); + text-decoration: none; + background-color: rgba(var(--color-primary-600), 1); + border-radius: 0.09rem; +} + +.prose :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-bold); + font-weight: 600; +} + +.prose :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: decimal; + margin-top: 1.25em; + margin-bottom: 1.25em; + padding-inline-start: 1.625em; +} + +.prose :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-alpha; +} + +.prose :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-alpha; +} + +.prose :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-alpha; +} + +.prose :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-alpha; +} + +.prose :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-roman; +} + +.prose :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-roman; +} + +.prose :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-roman; +} + +.prose :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-roman; +} + +.prose :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: decimal; +} + +.prose :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: disc; + margin-top: 1.25em; + margin-bottom: 1.25em; + padding-inline-start: 1.625em; +} + +.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { + font-weight: 400; + color: var(--tw-prose-counters); +} + +.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { + color: var(--tw-prose-bullets); +} + +.prose :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + margin-top: 1.25em; +} + +.prose :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-color: var(--tw-prose-hr); + border-top-width: 1px; + margin-top: 3em; + margin-bottom: 3em; +} + +.prose :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 500; + font-style: italic; + color: var(--tw-prose-quotes); + border-inline-start-width: 0.25rem; + border-inline-start-color: var(--tw-prose-quote-borders); + quotes: "\201C""\201D""\2018""\2019"; + margin-top: 1.6em; + margin-bottom: 1.6em; + padding-inline-start: 1em; +} + +.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: open-quote; +} + +.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: close-quote; +} + +.prose :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 800; + font-size: 2.25em; + margin-top: 0; + margin-bottom: 0.8888889em; + line-height: 1.1111111; +} + +.prose :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 900; + color: inherit; +} + +.prose :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 700; + font-size: 1.5em; + margin-top: 2em; + margin-bottom: 1em; + line-height: 1.3333333; +} + +.prose :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 800; + color: inherit; +} + +.prose :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + font-size: 1.25em; + margin-top: 1.6em; + margin-bottom: 0.6em; + line-height: 1.6; +} + +.prose :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 700; + color: inherit; +} + +.prose :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + margin-top: 1.5em; + margin-bottom: 0.5em; + line-height: 1.5; +} + +.prose :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 700; + color: inherit; +} + +.prose :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; +} + +.prose :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + display: block; + margin-top: 2em; + margin-bottom: 2em; +} + +.prose :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; +} + +.prose :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 600; + font-family: inherit; + color: var(--tw-prose-kbd); + box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows); + font-size: 0.9rem; + border-radius: 0.25rem; + padding-top: 0.1875em; + padding-inline-end: 0.375em; + padding-bottom: 0.1875em; + padding-inline-start: 0.375em; + background-color: rgba(var(--color-neutral-200), 1); + padding: 0.1rem 0.4rem; +} + +.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-code); + font-weight: 600; + font-size: 0.875em; +} + +.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: "`"; +} + +.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: "`"; +} + +.prose :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-code); +} + +.prose :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + font-size: 0.875em; +} + +.prose :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + font-size: 0.9em; +} + +.prose :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-pre-code); + background-color: var(--tw-prose-pre-bg); + overflow-x: auto; + font-weight: 400; + font-size: 0.875em; + line-height: 1.7142857; + margin-top: 1.7142857em; + margin-bottom: 1.7142857em; + border-radius: 0.375rem; + padding-top: 0.8571429em; + padding-inline-end: 1.1428571em; + padding-bottom: 0.8571429em; + padding-inline-start: 1.1428571em; +} + +.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + background-color: transparent; + border-width: 0; + border-radius: 0; + padding: 0; + font-weight: inherit; + color: inherit; + font-size: inherit; + font-family: inherit; + line-height: inherit; +} + +.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: none; +} + +.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: none; +} + +.prose :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + width: 100%; + table-layout: auto; + margin-top: 2em; + margin-bottom: 2em; + font-size: 0.875em; + line-height: 1.7142857; +} + +.prose :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-th-borders); +} + +.prose :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + vertical-align: bottom; + padding-inline-end: 0.5714286em; + padding-bottom: 0.5714286em; + padding-inline-start: 0.5714286em; +} + +.prose :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-td-borders); +} + +.prose :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 0; +} + +.prose :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + vertical-align: baseline; +} + +.prose :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-top-width: 1px; + border-top-color: var(--tw-prose-th-borders); +} + +.prose :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + vertical-align: top; +} + +.prose :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-align: start; +} + +.prose :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-captions); + font-size: 0.875em; + line-height: 1.4285714; + margin-top: 0.8571429em; +} + +.prose { + --tw-prose-body: rgba(var(--color-neutral-700), 1); + --tw-prose-headings: rgba(var(--color-neutral-800), 1); + --tw-prose-lead: rgba(var(--color-neutral-500), 1); + --tw-prose-links: rgba(var(--color-primary-700), 1); + --tw-prose-bold: rgba(var(--color-neutral-900), 1); + --tw-prose-counters: rgba(var(--color-neutral-800), 1); + --tw-prose-bullets: rgba(var(--color-neutral-500), 1); + --tw-prose-hr: rgba(var(--color-neutral-200), 1); + --tw-prose-quotes: rgba(var(--color-neutral-700), 1); + --tw-prose-quote-borders: rgba(var(--color-primary-200), 1); + --tw-prose-captions: rgba(var(--color-neutral-500), 1); + --tw-prose-kbd: #111827; + --tw-prose-kbd-shadows: rgb(17 24 39 / 10%); + --tw-prose-code: rgba(var(--color-secondary-700), 1); + --tw-prose-pre-code: rgba(var(--color-neutral-700), 1); + --tw-prose-pre-bg: rgba(var(--color-neutral-50), 1); + --tw-prose-th-borders: rgba(var(--color-neutral-500), 1); + --tw-prose-td-borders: rgba(var(--color-neutral-300), 1); + --tw-prose-invert-body: rgba(var(--color-neutral-300), 1); + --tw-prose-invert-headings: rgba(var(--color-neutral-50), 1); + --tw-prose-invert-lead: rgba(var(--color-neutral-500), 1); + --tw-prose-invert-links: rgba(var(--color-primary-400), 1); + --tw-prose-invert-bold: rgba(var(--color-neutral), 1); + --tw-prose-invert-counters: rgba(var(--color-neutral-400), 1); + --tw-prose-invert-bullets: rgba(var(--color-neutral-600), 1); + --tw-prose-invert-hr: rgba(var(--color-neutral-500), 1); + --tw-prose-invert-quotes: rgba(var(--color-neutral-200), 1); + --tw-prose-invert-quote-borders: rgba(var(--color-primary-900), 1); + --tw-prose-invert-captions: rgba(var(--color-neutral-400), 1); + --tw-prose-invert-kbd: #fff; + --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%); + --tw-prose-invert-code: rgba(var(--color-secondary-400), 1); + --tw-prose-invert-pre-code: rgba(var(--color-neutral-200), 1); + --tw-prose-invert-pre-bg: rgba(var(--color-neutral-700), 1); + --tw-prose-invert-th-borders: rgba(var(--color-neutral-500), 1); + --tw-prose-invert-td-borders: rgba(var(--color-neutral-700), 1); + font-size: 1rem; + line-height: 1.75; +} + +.prose :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.375em; +} + +.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.375em; +} + +.prose :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.75em; + margin-bottom: 0.75em; +} + +.prose :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; +} + +.prose :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.25em; +} + +.prose :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; +} + +.prose :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.25em; +} + +.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.75em; + margin-bottom: 0.75em; +} + +.prose :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; +} + +.prose :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5em; + padding-inline-start: 1.625em; +} + +.prose :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; +} + +.prose :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; +} + +.prose :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-top: 0.5714286em; + padding-inline-end: 0.5714286em; + padding-bottom: 0.5714286em; + padding-inline-start: 0.5714286em; +} + +.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; +} + +.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; +} + +.prose :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; +} + +.prose :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 0; +} + +.prose :where(mark):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: rgba(var(--color-neutral-800), 1); + background-color: rgba(var(--color-secondary-200), 1); + padding: 0.1rem 0.2rem; + border-radius: 0.12rem; +} + +body a, +body button { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +/* Scale SVG icons to text size */ + +.icon svg { + height: 1em; + width: 1em; +} + +/* Search */ + +#search-query::-webkit-search-cancel-button, +#search-query::-webkit-search-decoration, +#search-query::-webkit-search-results-button, +#search-query::-webkit-search-results-decoration { + display: none; +} + +/* Hamburger menu */ + +body:has(#menu-controller:checked) { + height: 100vh; + overflow: hidden; +} + +#menu-button:has(#menu-controller:checked) { + visibility: hidden; +} + +#menu-controller:checked ~ #menu-wrapper { + visibility: visible; + opacity: 1; +} + +/* RTL support */ + +.prose blockquote:where([dir="rtl"], [dir="rtl"] *) { + border-left-width: 0px; + border-right-width: 4px; + padding-right: 1rem; +} + +.prose ul > li:where([dir="rtl"], [dir="rtl"] *), +.prose ol > li:where([dir="rtl"], [dir="rtl"] *) { + margin-right: 1.75rem; + padding-left: 0px; + padding-right: 0.5rem; +} + +.prose ol > li:where([dir="rtl"], [dir="rtl"] *):before, +.prose ul > li:where([dir="rtl"], [dir="rtl"] *):before { + left: auto; + right: 0.25rem; +} + +.prose thead td:first-child:where([dir="rtl"], [dir="rtl"] *), +.prose thead th:first-child:where([dir="rtl"], [dir="rtl"] *) { + padding-right: 0px; +} + +.prose thead td:last-child:where([dir="rtl"], [dir="rtl"] *), +.prose thead th:last-child:where([dir="rtl"], [dir="rtl"] *) { + padding-left: 0px; +} + +/* Adjust first child within prose */ + +.prose div.min-w-0.max-w-prose > *:first-child { + margin-top: 0.75rem; +} + +/* Table of Contents */ + +.toc { + max-height: 100vh; + overflow-y: auto; + padding-bottom: 50px; +} + +.toc ul, +.toc li { + list-style-type: none; + padding-left: 0px; + padding-right: 0px; + line-height: 1.375; +} + +.toc ul ul { + padding-inline-start: 1rem; +} + +.toc a { + font-weight: 400; + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-700), var(--tw-text-opacity, 1)); +} + +.toc a:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-400), var(--tw-text-opacity, 1)); +} + +.toc ul > li:where([dir="rtl"], [dir="rtl"] *) { + margin-right: 0px; +} + +/* Code Copy */ + +.highlight-wrapper { + display: block; +} + +.highlight { + position: relative; + z-index: 0; +} + +.highlight:hover > .copy-button { + visibility: visible; +} + +.copy-button { + visibility: hidden; + position: absolute; + right: 0px; + top: 0px; + z-index: 10; + width: 5rem; + cursor: pointer; + white-space: nowrap; + border-bottom-left-radius: 0.375rem; + border-top-right-radius: 0.375rem; + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-200), var(--tw-bg-opacity, 1)); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-700), var(--tw-text-opacity, 1)); + opacity: 0.9; +} + +.copy-button:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-600), var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-200), var(--tw-text-opacity, 1)); +} + +.copy-button:hover, +.copy-button:focus, +.copy-button:active, +.copy-button:active:hover { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity, 1)); +} + +.copy-button:hover:is(.dark *), +.copy-button:focus:is(.dark *), +.copy-button:active:is(.dark *), +.copy-button:active:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-600), var(--tw-bg-opacity, 1)); +} + +.copy-textarea { + position: absolute; + z-index: -10; + opacity: 0.05; +} + +/* Fix long KaTeX equations on mobile (see https://katex.org/docs/issues.html#css-customization) */ + +.katex-display { + overflow: auto hidden; +} + +/* Fix long tables breaking out of article on mobile */ + +table { + display: block; + overflow: auto; +} + +@media (min-width: 768px) { + table { + display: table; + } +} + +/* Fix long inline code sections breaking out of article on mobile */ + +code { + word-wrap: break-word; + /* All browsers since IE 5.5+ */ + overflow-wrap: break-word; +} + +/* -- Chroma Highlight -- */ + +/* Background */ + +.chroma { + border-radius: 0.375rem; + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-50), var(--tw-bg-opacity, 1)); + padding-top: 0.75rem; + padding-bottom: 0.75rem; + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-700), var(--tw-text-opacity, 1)); +} + +.chroma:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-700), var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-200), var(--tw-text-opacity, 1)); +} + +.chroma pre { + margin: 0px; + padding: 0px; +} + +.prose div.chroma { + margin-bottom: 1.5rem; + margin-top: 1.5rem; +} + +/* LineTable */ + +.chroma .lntable { + margin: 0px; + display: block; + width: auto; + overflow: auto; + font-size: 1rem; + line-height: 1.5rem; +} + +/* LineNumbersTable */ + +/* LineNumbers */ + +.chroma .lnt, +.chroma .ln { + margin-right: 0.5rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-600), var(--tw-text-opacity, 1)); +} + +.chroma .lnt:is(.dark *), +.chroma .ln:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-300), var(--tw-text-opacity, 1)); +} + +.chroma .lntd { + padding: 0px; + vertical-align: top; +} + +.chroma .lntd:last-of-type { + width: 100%; +} + +/* LineHighlight */ + +.chroma .hl { + display: block; + width: 100%; + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity, 1)); +} + +.chroma .hl:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity, 1)); +} + +/* Keyword */ + +/* KeywordDeclaration */ + +/* KeywordNamespace */ + +/* KeywordPseudo */ + +/* KeywordReserved */ + +/* NameClass */ + +/* NameFunctionMagic */ + +/* NameNamespace */ + +/* NameVariableClass */ + +/* Operator */ + +.chroma .k, +.chroma .kd, +.chroma .kn, +.chroma .kp, +.chroma .kr, +.chroma .nc, +.chroma .fm, +.chroma .nn, +.chroma .vc, +.chroma .o { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-600), var(--tw-text-opacity, 1)); +} + +.chroma .k:is(.dark *), +.chroma .kd:is(.dark *), +.chroma .kn:is(.dark *), +.chroma .kp:is(.dark *), +.chroma .kr:is(.dark *), +.chroma .nc:is(.dark *), +.chroma .fm:is(.dark *), +.chroma .nn:is(.dark *), +.chroma .vc:is(.dark *), +.chroma .o:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-300), var(--tw-text-opacity, 1)); +} + +/* KeywordConstant */ + +.chroma .kc { + font-weight: 600; + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-400), var(--tw-text-opacity, 1)); +} + +.chroma .kc:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-500), var(--tw-text-opacity, 1)); +} + +/* KeywordType */ + +/* NameVariable */ + +/* NameVariableInstance */ + +/* NameVariableMagic */ + +/* LiteralNumber */ + +/* LiteralNumberBin */ + +/* LiteralNumberFloat */ + +/* LiteralNumberHex */ + +/* LiteralNumberInteger */ + +/* LiteralNumberIntegerLong */ + +/* LiteralNumberOct */ + +.chroma .kt, +.chroma .nv, +.chroma .vi, +.chroma .vm, +.chroma .m, +.chroma .mb, +.chroma .mf, +.chroma .mh, +.chroma .mi, +.chroma .il, +.chroma .mo { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-400), var(--tw-text-opacity, 1)); +} + +.chroma .kt:is(.dark *), +.chroma .nv:is(.dark *), +.chroma .vi:is(.dark *), +.chroma .vm:is(.dark *), +.chroma .m:is(.dark *), +.chroma .mb:is(.dark *), +.chroma .mf:is(.dark *), +.chroma .mh:is(.dark *), +.chroma .mi:is(.dark *), +.chroma .il:is(.dark *), +.chroma .mo:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-600), var(--tw-text-opacity, 1)); +} + +/* Name */ + +/* NameDecorator */ + +/* NameEntity */ + +/* NameLabel */ + +.chroma .n, +.chroma .nd, +.chroma .ni, +.chroma .nl { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-900), var(--tw-text-opacity, 1)); +} + +.chroma .n:is(.dark *), +.chroma .nd:is(.dark *), +.chroma .ni:is(.dark *), +.chroma .nl:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-200), var(--tw-text-opacity, 1)); +} + +/* NameAttribute */ + +/* NameBuiltin */ + +/* NameBuiltinPseudo */ + +/* NameOther */ + +/* NameProperty */ + +/* NameTag */ + +.chroma .na, +.chroma .nb, +.chroma .bp, +.chroma .nx, +.chroma .py, +.chroma .nt { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-800), var(--tw-text-opacity, 1)); +} + +.chroma .na:is(.dark *), +.chroma .nb:is(.dark *), +.chroma .bp:is(.dark *), +.chroma .nx:is(.dark *), +.chroma .py:is(.dark *), +.chroma .nt:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-300), var(--tw-text-opacity, 1)); +} + +/* NameConstant */ + +/* NameException */ + +/* NameVariableGlobal */ + +.chroma .no, +.chroma .ne, +.chroma .vg { + font-weight: 600; + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-400), var(--tw-text-opacity, 1)); +} + +.chroma .no:is(.dark *), +.chroma .ne:is(.dark *), +.chroma .vg:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-500), var(--tw-text-opacity, 1)); +} + +/* NameFunction */ + +.chroma .nf { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-600), var(--tw-text-opacity, 1)); +} + +.chroma .nf:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-500), var(--tw-text-opacity, 1)); +} + +/* Literal */ + +/* LiteralDate */ + +/* LiteralString */ + +/* LiteralStringAffix */ + +/* LiteralStringBacktick */ + +/* LiteralStringChar */ + +/* LiteralStringDelimiter */ + +/* LiteralStringDoc */ + +/* LiteralStringDouble */ + +/* LiteralStringHeredoc */ + +/* LiteralStringInterpol */ + +/* LiteralStringOther */ + +/* LiteralStringSingle */ + +/* GenericInserted */ + +/* GenericOutput */ + +/* GenericPrompt */ + +.chroma .l, +.chroma .ld, +.chroma .s, +.chroma .sa, +.chroma .sb, +.chroma .sc, +.chroma .dl, +.chroma .sd, +.chroma .s2, +.chroma .sh, +.chroma .si, +.chroma .sx, +.chroma .s1, +.chroma .gd, +.chroma .gi, +.chroma .go, +.chroma .gp { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-800), var(--tw-text-opacity, 1)); +} + +.chroma .l:is(.dark *), +.chroma .ld:is(.dark *), +.chroma .s:is(.dark *), +.chroma .sa:is(.dark *), +.chroma .sb:is(.dark *), +.chroma .sc:is(.dark *), +.chroma .dl:is(.dark *), +.chroma .sd:is(.dark *), +.chroma .s2:is(.dark *), +.chroma .sh:is(.dark *), +.chroma .si:is(.dark *), +.chroma .sx:is(.dark *), +.chroma .s1:is(.dark *), +.chroma .gd:is(.dark *), +.chroma .gi:is(.dark *), +.chroma .go:is(.dark *), +.chroma .gp:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-400), var(--tw-text-opacity, 1)); +} + +/* LiteralStringEscape */ + +.chroma .se { + font-weight: 600; + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-400), var(--tw-text-opacity, 1)); +} + +.chroma .se:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-secondary-500), var(--tw-text-opacity, 1)); +} + +/* LiteralStringRegex */ + +/* LiteralStringSymbol */ + +.chroma .sr, +.chroma .ss { + font-weight: 600; + --tw-text-opacity: 1; + color: rgba(var(--color-primary-800), var(--tw-text-opacity, 1)); +} + +.chroma .sr:is(.dark *), +.chroma .ss:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-400), var(--tw-text-opacity, 1)); +} + +/* OperatorWord */ + +.chroma .ow { + font-weight: 600; + --tw-text-opacity: 1; + color: rgba(var(--color-primary-400), var(--tw-text-opacity, 1)); +} + +.chroma .ow:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-600), var(--tw-text-opacity, 1)); +} + +/* Comment */ + +/* CommentMultiline */ + +/* CommentSingle */ + +/* CommentSpecial */ + +/* CommentPreproc */ + +/* CommentPreprocFile */ + +.chroma .c, +.chroma .cm, +.chroma .c1, +.chroma .cs, +.chroma .cp, +.chroma .cpf { + font-style: italic; + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-500), var(--tw-text-opacity, 1)); +} + +.chroma .c:is(.dark *), +.chroma .cm:is(.dark *), +.chroma .c1:is(.dark *), +.chroma .cs:is(.dark *), +.chroma .cp:is(.dark *), +.chroma .cpf:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-400), var(--tw-text-opacity, 1)); +} + +/* CommentHashbang */ + +.chroma .ch { + font-weight: 600; + font-style: italic; + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-500), var(--tw-text-opacity, 1)); +} + +.chroma .ch:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-400), var(--tw-text-opacity, 1)); +} + +/* GenericEmph */ + +.chroma .ge { + font-style: italic; +} + +/* GenericHeading */ + +.chroma .gh { + font-weight: 600; + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-500), var(--tw-text-opacity, 1)); +} + +/* GenericStrong */ + +.chroma .gs { + font-weight: 600; +} + +/* GenericSubheading */ + +/* GenericTraceback */ + +.chroma .gu, +.chroma .gt { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-500), var(--tw-text-opacity, 1)); +} + +/* GenericUnderline */ + +.chroma .gl { + text-decoration-line: underline; +} + +.pointer-events-none { + pointer-events: none; +} + +.pointer-events-auto { + pointer-events: auto; +} + +.invisible { + visibility: hidden; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.sticky { + position: sticky; +} + +.inset-0 { + inset: 0px; +} + +.-start-6 { + inset-inline-start: -1.5rem; +} + +.bottom-0 { + bottom: 0px; +} + +.bottom-7 { + bottom: 1.75rem; +} + +.end-0 { + inset-inline-end: 0px; +} + +.top-0 { + top: 0px; +} + +.top-20 { + top: 5rem; +} + +.top-\[100vh\] { + top: 100vh; +} + +.top-\[calc\(100vh-5\.5rem\)\] { + top: calc(100vh - 5.5rem); +} + +.z-10 { + z-index: 10; +} + +.z-30 { + z-index: 30; +} + +.z-40 { + z-index: 40; +} + +.z-50 { + z-index: 50; +} + +.order-first { + order: -9999; +} + +.m-1 { + margin: 0.25rem; +} + +.m-auto { + margin: auto; +} + +.-mx-2 { + margin-left: -0.5rem; + margin-right: -0.5rem; +} + +.mx-1 { + margin-left: 0.25rem; + margin-right: 0.25rem; +} + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.my-0 { + margin-top: 0px; + margin-bottom: 0px; +} + +.my-1 { + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} + +.my-3 { + margin-top: 0.75rem; + margin-bottom: 0.75rem; +} + +.\!mb-0 { + margin-bottom: 0px !important; +} + +.\!mb-9 { + margin-bottom: 2.25rem !important; +} + +.\!mt-0 { + margin-top: 0px !important; +} + +.-mb-1 { + margin-bottom: -0.25rem; +} + +.-ms-5 { + margin-inline-start: -1.25rem; +} + +.-mt-3 { + margin-top: -0.75rem; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.mb-10 { + margin-bottom: 2.5rem; +} + +.mb-12 { + margin-bottom: 3rem; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.mb-6 { + margin-bottom: 1.5rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + +.mb-\[2px\] { + margin-bottom: 2px; +} + +.me-14 { + margin-inline-end: 3.5rem; +} + +.me-2 { + margin-inline-end: 0.5rem; +} + +.me-4 { + margin-inline-end: 1rem; +} + +.ml-2 { + margin-left: 0.5rem; +} + +.mr-2 { + margin-right: 0.5rem; +} + +.ms-1 { + margin-inline-start: 0.25rem; +} + +.ms-2 { + margin-inline-start: 0.5rem; +} + +.mt-0 { + margin-top: 0px; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mt-10 { + margin-top: 2.5rem; +} + +.mt-12 { + margin-top: 3rem; +} + +.mt-6 { + margin-top: 1.5rem; +} + +.mt-8 { + margin-top: 2rem; +} + +.mt-\[0\.1rem\] { + margin-top: 0.1rem; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.inline { + display: inline; +} + +.flex { + display: flex; +} + +.hidden { + display: none; +} + +.h-12 { + height: 3rem; +} + +.h-8 { + height: 2rem; +} + +.h-auto { + height: auto; +} + +.h-full { + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.max-h-\[10rem\] { + max-height: 10rem; +} + +.max-h-\[4\.5rem\] { + max-height: 4.5rem; +} + +.min-h-0 { + min-height: 0px; +} + +.w-12 { + width: 3rem; +} + +.w-24 { + width: 6rem; +} + +.w-36 { + width: 9rem; +} + +.w-6 { + width: 1.5rem; +} + +.w-8 { + width: 2rem; +} + +.w-full { + width: 100%; +} + +.w-screen { + width: 100vw; +} + +.min-w-0 { + min-width: 0px; +} + +.min-w-\[1\.8rem\] { + min-width: 1.8rem; +} + +.min-w-\[2\.4rem\] { + min-width: 2.4rem; +} + +.max-w-3xl { + max-width: 48rem; +} + +.max-w-7xl { + max-width: 80rem; +} + +.max-w-\[10rem\] { + max-width: 10rem; +} + +.max-w-\[6rem\] { + max-width: 6rem; +} + +.max-w-full { + max-width: 100%; +} + +.max-w-prose { + max-width: 65ch; +} + +.flex-auto { + flex: 1 1 auto; +} + +.flex-none { + flex: none; +} + +.flex-grow { + flex-grow: 1; +} + +.grow { + flex-grow: 1; +} + +.-translate-y-8 { + --tw-translate-y: -2rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.cursor-default { + cursor: default; +} + +.cursor-pointer { + cursor: pointer; +} + +.list-none { + list-style-type: none; +} + +.appearance-none { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.flex-row { + flex-direction: row; +} + +.flex-col { + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.items-start { + align-items: flex-start; +} + +.items-end { + align-items: flex-end; +} + +.items-center { + align-items: center; +} + +.justify-end { + justify-content: flex-end; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.place-self-center { + place-self: center; +} + +.self-center { + align-self: center; +} + +.overflow-auto { + overflow: auto; +} + +.overflow-hidden { + overflow: hidden; +} + +.overflow-visible { + overflow: visible; +} + +.scroll-smooth { + scroll-behavior: smooth; +} + +.whitespace-nowrap { + white-space: nowrap; +} + +.\!rounded-md { + border-radius: 0.375rem !important; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-full { + border-radius: 9999px; +} + +.rounded-lg { + border-radius: 0.5rem; +} + +.rounded-md { + border-radius: 0.375rem; +} + +.rounded-b-lg { + border-bottom-right-radius: 0.5rem; + border-bottom-left-radius: 0.5rem; +} + +.border { + border-width: 1px; +} + +.border-s { + border-inline-start-width: 1px; +} + +.border-t { + border-top-width: 1px; +} + +.border-dotted { + border-style: dotted; +} + +.border-neutral-200 { + --tw-border-opacity: 1; + border-color: rgba(var(--color-neutral-200), var(--tw-border-opacity, 1)); +} + +.border-neutral-300 { + --tw-border-opacity: 1; + border-color: rgba(var(--color-neutral-300), var(--tw-border-opacity, 1)); +} + +.border-neutral-400 { + --tw-border-opacity: 1; + border-color: rgba(var(--color-neutral-400), var(--tw-border-opacity, 1)); +} + +.border-primary-400 { + --tw-border-opacity: 1; + border-color: rgba(var(--color-primary-400), var(--tw-border-opacity, 1)); +} + +.bg-neutral { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral), var(--tw-bg-opacity, 1)); +} + +.bg-neutral-100 { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-100), var(--tw-bg-opacity, 1)); +} + +.bg-neutral-100\/50 { + background-color: rgba(var(--color-neutral-100), 0.5); +} + +.bg-neutral-300 { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-300), var(--tw-bg-opacity, 1)); +} + +.bg-neutral-500\/50 { + background-color: rgba(var(--color-neutral-500), 0.5); +} + +.bg-neutral\/50 { + background-color: rgba(var(--color-neutral), 0.5); +} + +.bg-primary-100 { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity, 1)); +} + +.bg-primary-200 { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-200), var(--tw-bg-opacity, 1)); +} + +.bg-primary-600 { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-600), var(--tw-bg-opacity, 1)); +} + +.bg-transparent { + background-color: transparent; +} + +.object-scale-down { + -o-object-fit: scale-down; + object-fit: scale-down; +} + +.object-left { + -o-object-position: left; + object-position: left; +} + +.p-1 { + padding: 0.25rem; +} + +.p-4 { + padding: 1rem; +} + +.px-0 { + padding-left: 0px; + padding-right: 0px; +} + +.px-1 { + padding-left: 0.25rem; + padding-right: 0.25rem; +} + +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.py-10 { + padding-top: 2.5rem; + padding-bottom: 2.5rem; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.py-6 { + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} + +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} + +.py-\[1px\] { + padding-top: 1px; + padding-bottom: 1px; +} + +.pb-4 { + padding-bottom: 1rem; +} + +.pe-10 { + padding-inline-end: 2.5rem; +} + +.pe-2 { + padding-inline-end: 0.5rem; +} + +.pe-3 { + padding-inline-end: 0.75rem; +} + +.pe-4 { + padding-inline-end: 1rem; +} + +.pe-5 { + padding-inline-end: 1.25rem; +} + +.ps-2 { + padding-inline-start: 0.5rem; +} + +.ps-5 { + padding-inline-start: 1.25rem; +} + +.pt-3 { + padding-top: 0.75rem; +} + +.pt-4 { + padding-top: 1rem; +} + +.pt-8 { + padding-top: 2rem; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text-start { + text-align: start; +} + +.text-end { + text-align: end; +} + +.align-top { + vertical-align: top; +} + +.align-text-bottom { + vertical-align: text-bottom; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-\[0\.6rem\] { + font-size: 0.6rem; +} + +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + +.font-bold { + font-weight: 700; +} + +.font-extrabold { + font-weight: 800; +} + +.font-medium { + font-weight: 500; +} + +.font-normal { + font-weight: 400; +} + +.font-semibold { + font-weight: 600; +} + +.uppercase { + text-transform: uppercase; +} + +.italic { + font-style: italic; +} + +.leading-3 { + line-height: .75rem; +} + +.leading-6 { + line-height: 1.5rem; +} + +.leading-7 { + line-height: 1.75rem; +} + +.leading-relaxed { + line-height: 1.625; +} + +.\!text-neutral { + --tw-text-opacity: 1 !important; + color: rgba(var(--color-neutral), var(--tw-text-opacity, 1)) !important; +} + +.text-neutral-400 { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-400), var(--tw-text-opacity, 1)); +} + +.text-neutral-500 { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-500), var(--tw-text-opacity, 1)); +} + +.text-neutral-700 { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-700), var(--tw-text-opacity, 1)); +} + +.text-neutral-800 { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-800), var(--tw-text-opacity, 1)); +} + +.text-neutral-900 { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-900), var(--tw-text-opacity, 1)); +} + +.text-primary-400 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-400), var(--tw-text-opacity, 1)); +} + +.text-primary-500 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-500), var(--tw-text-opacity, 1)); +} + +.text-primary-600 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-600), var(--tw-text-opacity, 1)); +} + +.text-primary-700 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-700), var(--tw-text-opacity, 1)); +} + +.\!no-underline { + text-decoration-line: none !important; +} + +.decoration-neutral-300 { + text-decoration-color: rgba(var(--color-neutral-300), 1); +} + +.decoration-primary-500 { + text-decoration-color: rgba(var(--color-primary-500), 1); +} + +.opacity-0 { + opacity: 0; +} + +.shadow { + --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-lg { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.backdrop-blur { + --tw-backdrop-blur: blur(8px); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.backdrop-blur-sm { + --tw-backdrop-blur: blur(4px); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-opacity { + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-transform { + transition-property: transform; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.dark\:prose-invert:is(.dark *) { + --tw-prose-body: var(--tw-prose-invert-body); + --tw-prose-headings: var(--tw-prose-invert-headings); + --tw-prose-lead: var(--tw-prose-invert-lead); + --tw-prose-links: var(--tw-prose-invert-links); + --tw-prose-bold: var(--tw-prose-invert-bold); + --tw-prose-counters: var(--tw-prose-invert-counters); + --tw-prose-bullets: var(--tw-prose-invert-bullets); + --tw-prose-hr: var(--tw-prose-invert-hr); + --tw-prose-quotes: var(--tw-prose-invert-quotes); + --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders); + --tw-prose-captions: var(--tw-prose-invert-captions); + --tw-prose-kbd: var(--tw-prose-invert-kbd); + --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows); + --tw-prose-code: var(--tw-prose-invert-code); + --tw-prose-pre-code: var(--tw-prose-invert-pre-code); + --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg); + --tw-prose-th-borders: var(--tw-prose-invert-th-borders); + --tw-prose-td-borders: var(--tw-prose-invert-td-borders); +} + +.dark\:prose-invert:is(.dark *) :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-decoration-color: rgba(var(--color-neutral-600), 1); +} + +.dark\:prose-invert:is(.dark *) :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: rgba(var(--color-neutral-200), 1); + background-color: rgba(var(--color-neutral-700), 1); +} + +.dark\:prose-invert:is(.dark *) :where(mark):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + background-color: rgba(var(--color-secondary-400), 1); +} + +.first\:mt-8:first-child { + margin-top: 2rem; +} + +.hover\:scale-125:hover { + --tw-scale-x: 1.25; + --tw-scale-y: 1.25; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:border-primary-300:hover { + --tw-border-opacity: 1; + border-color: rgba(var(--color-primary-300), var(--tw-border-opacity, 1)); +} + +.hover\:\!bg-primary-500:hover { + --tw-bg-opacity: 1 !important; + background-color: rgba(var(--color-primary-500), var(--tw-bg-opacity, 1)) !important; +} + +.hover\:bg-primary-100:hover { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity, 1)); +} + +.hover\:bg-primary-500:hover { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-500), var(--tw-bg-opacity, 1)); +} + +.hover\:bg-primary-600:hover { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-600), var(--tw-bg-opacity, 1)); +} + +.hover\:text-neutral:hover { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral), var(--tw-text-opacity, 1)); +} + +.hover\:text-primary-500:hover { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-500), var(--tw-text-opacity, 1)); +} + +.hover\:text-primary-600:hover { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-600), var(--tw-text-opacity, 1)); +} + +.hover\:text-primary-700:hover { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-700), var(--tw-text-opacity, 1)); +} + +.hover\:underline:hover { + text-decoration-line: underline; +} + +.hover\:decoration-primary-400:hover { + text-decoration-color: rgba(var(--color-primary-400), 1); +} + +.hover\:decoration-2:hover { + text-decoration-thickness: 2px; +} + +.hover\:underline-offset-2:hover { + text-underline-offset: 2px; +} + +.focus\:translate-y-0:focus { + --tw-translate-y: 0px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.focus\:bg-primary-100:focus { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity, 1)); +} + +.focus\:outline-dotted:focus { + outline-style: dotted; +} + +.focus\:outline-2:focus { + outline-width: 2px; +} + +.focus\:outline-transparent:focus { + outline-color: transparent; +} + +.group:hover .group-hover\:visible { + visibility: visible; +} + +.group:hover .group-hover\:-translate-x-\[-2px\] { + --tw-translate-x: 2px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.group:hover .group-hover\:-translate-x-\[2px\] { + --tw-translate-x: -2px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.group:hover .group-hover\:text-primary-300 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-300), var(--tw-text-opacity, 1)); +} + +.group:hover .group-hover\:text-primary-600 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-600), var(--tw-text-opacity, 1)); +} + +.group:hover .group-hover\:underline { + text-decoration-line: underline; +} + +.group:hover .group-hover\:decoration-primary-500 { + text-decoration-color: rgba(var(--color-primary-500), 1); +} + +.group:hover .group-hover\:decoration-2 { + text-decoration-thickness: 2px; +} + +.group:hover .group-hover\:underline-offset-2 { + text-underline-offset: 2px; +} + +.group:hover .group-hover\:opacity-100 { + opacity: 1; +} + +.dark\:inline:is(.dark *) { + display: inline; +} + +.dark\:flex:is(.dark *) { + display: flex; +} + +.dark\:hidden:is(.dark *) { + display: none; +} + +.dark\:border-neutral-600:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgba(var(--color-neutral-600), var(--tw-border-opacity, 1)); +} + +.dark\:border-neutral-700:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgba(var(--color-neutral-700), var(--tw-border-opacity, 1)); +} + +.dark\:border-primary-600:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgba(var(--color-primary-600), var(--tw-border-opacity, 1)); +} + +.dark\:bg-neutral-600:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-600), var(--tw-bg-opacity, 1)); +} + +.dark\:bg-neutral-700:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-700), var(--tw-bg-opacity, 1)); +} + +.dark\:bg-neutral-800:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-800), var(--tw-bg-opacity, 1)); +} + +.dark\:bg-neutral-800\/50:is(.dark *) { + background-color: rgba(var(--color-neutral-800), 0.5); +} + +.dark\:bg-neutral-900\/50:is(.dark *) { + background-color: rgba(var(--color-neutral-900), 0.5); +} + +.dark\:bg-primary-400:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-400), var(--tw-bg-opacity, 1)); +} + +.dark\:bg-primary-800:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-800), var(--tw-bg-opacity, 1)); +} + +.dark\:bg-primary-900:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity, 1)); +} + +.dark\:text-neutral:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral), var(--tw-text-opacity, 1)); +} + +.dark\:text-neutral-100:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-100), var(--tw-text-opacity, 1)); +} + +.dark\:text-neutral-300:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-300), var(--tw-text-opacity, 1)); +} + +.dark\:text-neutral-400:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-400), var(--tw-text-opacity, 1)); +} + +.dark\:text-neutral-500:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-500), var(--tw-text-opacity, 1)); +} + +.dark\:text-neutral-800:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-800), var(--tw-text-opacity, 1)); +} + +.dark\:text-primary-400:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-400), var(--tw-text-opacity, 1)); +} + +.dark\:hover\:border-primary-600:hover:is(.dark *) { + --tw-border-opacity: 1; + border-color: rgba(var(--color-primary-600), var(--tw-border-opacity, 1)); +} + +.dark\:hover\:\!bg-primary-700:hover:is(.dark *) { + --tw-bg-opacity: 1 !important; + background-color: rgba(var(--color-primary-700), var(--tw-bg-opacity, 1)) !important; +} + +.dark\:hover\:bg-primary-400:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-400), var(--tw-bg-opacity, 1)); +} + +.dark\:hover\:bg-primary-900:hover:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity, 1)); +} + +.dark\:hover\:text-neutral-800:hover:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-800), var(--tw-text-opacity, 1)); +} + +.dark\:hover\:text-primary-400:hover:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-400), var(--tw-text-opacity, 1)); +} + +.dark\:focus\:bg-primary-900:focus:is(.dark *) { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity, 1)); +} + +.group:hover .dark\:group-hover\:text-neutral-700:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-700), var(--tw-text-opacity, 1)); +} + +.group:hover .dark\:group-hover\:text-primary-400:is(.dark *) { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-400), var(--tw-text-opacity, 1)); +} + +@media (min-width: 640px) { + .sm\:mb-0 { + margin-bottom: 0px; + } + + .sm\:me-7 { + margin-inline-end: 1.75rem; + } + + .sm\:flex { + display: flex; + } + + .sm\:hidden { + display: none; + } + + .sm\:max-h-\[7\.5rem\] { + max-height: 7.5rem; + } + + .sm\:w-1\/2 { + width: 50%; + } + + .sm\:w-40 { + width: 10rem; + } + + .sm\:max-w-\[10rem\] { + max-width: 10rem; + } + + .sm\:flex-row { + flex-direction: row; + } + + .sm\:items-center { + align-items: center; + } + + .sm\:p-6 { + padding: 1.5rem; + } + + .sm\:px-14 { + padding-left: 3.5rem; + padding-right: 3.5rem; + } + + .sm\:py-10 { + padding-top: 2.5rem; + padding-bottom: 2.5rem; + } + + .sm\:pe-6 { + padding-inline-end: 1.5rem; + } + + .sm\:pt-10 { + padding-top: 2.5rem; + } + + .sm\:text-lg { + font-size: 1.125rem; + line-height: 1.75rem; + } + + .sm\:last\:me-0:last-child { + margin-inline-end: 0px; + } + + .sm\:last\:me-0\.5:last-child { + margin-inline-end: 0.125rem; + } +} + +@media (min-width: 768px) { + .md\:w-1\/3 { + width: 33.333333%; + } + + .md\:p-\[10vh\] { + padding: 10vh; + } + + .md\:px-24 { + padding-left: 6rem; + padding-right: 6rem; + } +} + +@media (min-width: 1024px) { + .lg\:sticky { + position: sticky; + } + + .lg\:top-10 { + top: 2.5rem; + } + + .lg\:order-last { + order: 9999; + } + + .lg\:hidden { + display: none; + } + + .lg\:w-1\/4 { + width: 25%; + } + + .lg\:max-w-xs { + max-width: 20rem; + } + + .lg\:flex-row { + flex-direction: row; + } + + .lg\:p-\[12vh\] { + padding: 12vh; + } + + .lg\:px-32 { + padding-left: 8rem; + padding-right: 8rem; + } + + .lg\:ps-8 { + padding-inline-start: 2rem; + } +} + +@media (min-width: 1280px) { + .xl\:w-1\/5 { + width: 20%; + } +} + +.ltr\:right-0:where([dir="ltr"], [dir="ltr"] *) { + right: 0px; +} + +.ltr\:block:where([dir="ltr"], [dir="ltr"] *) { + display: block; +} + +.ltr\:inline:where([dir="ltr"], [dir="ltr"] *) { + display: inline; +} + +.ltr\:hidden:where([dir="ltr"], [dir="ltr"] *) { + display: none; +} + +.rtl\:left-0:where([dir="rtl"], [dir="rtl"] *) { + left: 0px; +} + +.rtl\:block:where([dir="rtl"], [dir="rtl"] *) { + display: block; +} + +.rtl\:inline:where([dir="rtl"], [dir="rtl"] *) { + display: inline; +} + +.rtl\:hidden:where([dir="rtl"], [dir="rtl"] *) { + display: none; +} + +@media print { + .print\:hidden { + display: none; + } +} diff --git a/themes/congo/assets/css/main.css b/themes/congo/assets/css/main.css new file mode 100644 index 0000000..98df05d --- /dev/null +++ b/themes/congo/assets/css/main.css @@ -0,0 +1,328 @@ +/*! Congo v2.13.0 | MIT License | https://github.com/jpanther/congo */ + +@tailwind base; +@tailwind components; + +body a, +body button { + @apply transition-colors; +} + +/* Scale SVG icons to text size */ +.icon svg { + @apply h-[1em] w-[1em]; +} + +/* Search */ +#search-query::-webkit-search-cancel-button, +#search-query::-webkit-search-decoration, +#search-query::-webkit-search-results-button, +#search-query::-webkit-search-results-decoration { + @apply hidden; +} + +/* Hamburger menu */ +body:has(#menu-controller:checked) { + @apply h-screen overflow-hidden; +} +#menu-button:has(#menu-controller:checked) { + @apply invisible; +} +#menu-controller:checked ~ #menu-wrapper { + @apply visible opacity-100; +} + +/* RTL support */ +.prose blockquote { + @apply rtl:border-l-0 rtl:border-r-4 rtl:pr-4; +} +.prose ul > li, +.prose ol > li { + @apply rtl:mr-7 rtl:pl-0 rtl:pr-2; +} +.prose ol > li:before, +.prose ul > li:before { + @apply rtl:left-auto rtl:right-1; +} +.prose thead td:first-child, +.prose thead th:first-child { + @apply rtl:pr-0; +} +.prose thead td:last-child, +.prose thead th:last-child { + @apply rtl:pl-0; +} + +/* Adjust first child within prose */ +.prose div.min-w-0.max-w-prose > *:first-child { + @apply mt-3; +} + +/* Table of Contents */ +.toc { + max-height: 100vh; + overflow-y: auto; + padding-bottom: 50px; +} + +.toc ul, +.toc li { + @apply list-none px-0 leading-snug; +} +.toc ul ul { + @apply ps-4; +} +.toc a { + @apply font-normal text-neutral-700 dark:text-neutral-400; +} +.toc ul > li { + @apply rtl:mr-0; +} + +/* Code Copy */ +.highlight-wrapper { + @apply block; +} +.highlight { + @apply relative z-0; +} +.highlight:hover > .copy-button { + @apply visible; +} +.copy-button { + @apply invisible absolute right-0 top-0 z-10 w-20 cursor-pointer whitespace-nowrap rounded-bl-md rounded-tr-md bg-neutral-200 py-1 font-mono text-sm text-neutral-700 opacity-90 dark:bg-neutral-600 dark:text-neutral-200; +} +.copy-button:hover, +.copy-button:focus, +.copy-button:active, +.copy-button:active:hover { + @apply bg-primary-100 dark:bg-primary-600; +} +.copy-textarea { + @apply absolute -z-10 opacity-5; +} + +/* Fix long KaTeX equations on mobile (see https://katex.org/docs/issues.html#css-customization) */ +.katex-display { + overflow: auto hidden; +} + +/* Fix long tables breaking out of article on mobile */ +table { + @apply block overflow-auto md:table; +} + +/* Fix long inline code sections breaking out of article on mobile */ +code { + word-wrap: break-word; /* All browsers since IE 5.5+ */ + @apply break-words; +} + +/* -- Chroma Highlight -- */ +/* Background */ +.chroma { + @apply rounded-md bg-neutral-50 py-3 text-neutral-700 dark:bg-neutral-700 dark:text-neutral-200; +} +.chroma pre { + @apply m-0 p-0; +} +.prose div.chroma { + @apply mb-6 mt-6; +} +/* LineTable */ +.chroma .lntable { + @apply m-0 block w-auto overflow-auto text-base; +} +/* LineNumbersTable */ +/* LineNumbers */ +.chroma .lnt, +.chroma .ln { + @apply mr-2 px-2 text-neutral-600 dark:text-neutral-300; +} +.chroma .lntd { + @apply p-0 align-top; +} +.chroma .lntd:last-of-type { + @apply w-full; +} +/* LineHighlight */ +.chroma .hl { + @apply block w-full bg-primary-100 dark:bg-primary-900; +} +/* Keyword */ +/* KeywordDeclaration */ +/* KeywordNamespace */ +/* KeywordPseudo */ +/* KeywordReserved */ +/* NameClass */ +/* NameFunctionMagic */ +/* NameNamespace */ +/* NameVariableClass */ +/* Operator */ +.chroma .k, +.chroma .kd, +.chroma .kn, +.chroma .kp, +.chroma .kr, +.chroma .nc, +.chroma .fm, +.chroma .nn, +.chroma .vc, +.chroma .o { + @apply text-primary-600 dark:text-primary-300; +} +/* KeywordConstant */ +.chroma .kc { + @apply font-semibold text-secondary-400 dark:text-secondary-500; +} +/* KeywordType */ +/* NameVariable */ +/* NameVariableInstance */ +/* NameVariableMagic */ +/* LiteralNumber */ +/* LiteralNumberBin */ +/* LiteralNumberFloat */ +/* LiteralNumberHex */ +/* LiteralNumberInteger */ +/* LiteralNumberIntegerLong */ +/* LiteralNumberOct */ +.chroma .kt, +.chroma .nv, +.chroma .vi, +.chroma .vm, +.chroma .m, +.chroma .mb, +.chroma .mf, +.chroma .mh, +.chroma .mi, +.chroma .il, +.chroma .mo { + @apply text-secondary-400 dark:text-secondary-600; +} +/* Name */ +/* NameDecorator */ +/* NameEntity */ +/* NameLabel */ +.chroma .n, +.chroma .nd, +.chroma .ni, +.chroma .nl { + @apply text-secondary-900 dark:text-secondary-200; +} +/* NameAttribute */ +/* NameBuiltin */ +/* NameBuiltinPseudo */ +/* NameOther */ +/* NameProperty */ +/* NameTag */ +.chroma .na, +.chroma .nb, +.chroma .bp, +.chroma .nx, +.chroma .py, +.chroma .nt { + @apply text-secondary-800 dark:text-secondary-300; +} +/* NameConstant */ +/* NameException */ +/* NameVariableGlobal */ +.chroma .no, +.chroma .ne, +.chroma .vg { + @apply font-semibold text-secondary-400 dark:text-secondary-500; +} +/* NameFunction */ +.chroma .nf { + @apply text-secondary-600 dark:text-secondary-500; +} +/* Literal */ +/* LiteralDate */ +/* LiteralString */ +/* LiteralStringAffix */ +/* LiteralStringBacktick */ +/* LiteralStringChar */ +/* LiteralStringDelimiter */ +/* LiteralStringDoc */ +/* LiteralStringDouble */ +/* LiteralStringHeredoc */ +/* LiteralStringInterpol */ +/* LiteralStringOther */ +/* LiteralStringSingle */ +/* GenericInserted */ +/* GenericOutput */ +/* GenericPrompt */ +.chroma .l, +.chroma .ld, +.chroma .s, +.chroma .sa, +.chroma .sb, +.chroma .sc, +.chroma .dl, +.chroma .sd, +.chroma .s2, +.chroma .sh, +.chroma .si, +.chroma .sx, +.chroma .s1, +.chroma .gd, +.chroma .gi, +.chroma .go, +.chroma .gp { + @apply text-primary-800 dark:text-primary-400; +} +/* LiteralStringEscape */ +.chroma .se { + @apply font-semibold text-secondary-400 dark:text-secondary-500; +} +/* LiteralStringRegex */ +/* LiteralStringSymbol */ +.chroma .sr, +.chroma .ss { + @apply font-semibold text-primary-800 dark:text-primary-400; +} +/* OperatorWord */ +.chroma .ow { + @apply font-semibold text-primary-400 dark:text-primary-600; +} +/* Comment */ +/* CommentMultiline */ +/* CommentSingle */ +/* CommentSpecial */ +/* CommentPreproc */ +/* CommentPreprocFile */ +.chroma .c, +.chroma .cm, +.chroma .c1, +.chroma .cs, +.chroma .cp, +.chroma .cpf { + @apply italic text-neutral-500 dark:text-neutral-400; +} +/* CommentHashbang */ +.chroma .ch { + @apply font-semibold italic text-neutral-500 dark:text-neutral-400; +} +/* GenericEmph */ +.chroma .ge { + @apply italic; +} +/* GenericHeading */ +.chroma .gh { + @apply font-semibold text-neutral-500; +} +/* GenericStrong */ +.chroma .gs { + @apply font-semibold; +} +/* GenericSubheading */ +/* GenericTraceback */ +.chroma .gu, +.chroma .gt { + @apply text-neutral-500; +} +/* GenericUnderline */ +.chroma .gl { + @apply underline; +} + +@tailwind utilities; diff --git a/themes/congo/assets/css/schemes/avocado.css b/themes/congo/assets/css/schemes/avocado.css new file mode 100644 index 0000000..b9cb77e --- /dev/null +++ b/themes/congo/assets/css/schemes/avocado.css @@ -0,0 +1,40 @@ +/* Avocado scheme */ +:root { + --color-neutral: 255, 255, 255; + /* Stone */ + --color-neutral-50: 250, 250, 249; + --color-neutral-100: 245, 245, 244; + --color-neutral-200: 231, 229, 228; + --color-neutral-300: 214, 211, 209; + --color-neutral-400: 168, 162, 158; + --color-neutral-500: 120, 113, 108; + --color-neutral-600: 87, 83, 78; + --color-neutral-700: 68, 64, 60; + --color-neutral-800: 41, 37, 36; + --color-neutral-900: 28, 25, 23; + --color-neutral-950: 12, 10, 9; + /* Lime */ + --color-primary-50: 247, 254, 231; + --color-primary-100: 236, 252, 203; + --color-primary-200: 217, 249, 157; + --color-primary-300: 190, 242, 100; + --color-primary-400: 163, 230, 53; + --color-primary-500: 132, 204, 22; + --color-primary-600: 101, 163, 13; + --color-primary-700: 77, 124, 15; + --color-primary-800: 63, 98, 18; + --color-primary-900: 54, 83, 20; + --color-primary-950: 26, 46, 5; + /* Emerald */ + --color-secondary-50: 236, 253, 245; + --color-secondary-100: 209, 250, 229; + --color-secondary-200: 167, 243, 208; + --color-secondary-300: 110, 231, 183; + --color-secondary-400: 52, 211, 153; + --color-secondary-500: 16, 185, 129; + --color-secondary-600: 5, 150, 105; + --color-secondary-700: 4, 120, 87; + --color-secondary-800: 6, 95, 70; + --color-secondary-900: 6, 78, 59; + --color-secondary-950: 2, 44, 34; +} diff --git a/themes/congo/assets/css/schemes/cherry.css b/themes/congo/assets/css/schemes/cherry.css new file mode 100644 index 0000000..2d64729 --- /dev/null +++ b/themes/congo/assets/css/schemes/cherry.css @@ -0,0 +1,40 @@ +/* Cherry scheme */ +:root { + --color-neutral: 255, 255, 255; + /* Neutral */ + --color-neutral-50: 250, 250, 250; + --color-neutral-100: 245, 245, 245; + --color-neutral-200: 229, 229, 229; + --color-neutral-300: 212, 212, 212; + --color-neutral-400: 163, 163, 163; + --color-neutral-500: 115, 115, 115; + --color-neutral-600: 82, 82, 82; + --color-neutral-700: 64, 64, 64; + --color-neutral-800: 38, 38, 38; + --color-neutral-900: 23, 23, 23; + --color-neutral-950: 10, 10, 10; + /* Rose */ + --color-primary-50: 255, 241, 242; + --color-primary-100: 255, 228, 230; + --color-primary-200: 254, 205, 211; + --color-primary-300: 253, 164, 175; + --color-primary-400: 251, 113, 133; + --color-primary-500: 244, 63, 94; + --color-primary-600: 225, 29, 72; + --color-primary-700: 190, 18, 60; + --color-primary-800: 159, 18, 57; + --color-primary-900: 136, 19, 55; + --color-primary-950: 76, 5, 25; + /* Green */ + --color-secondary-50: 240, 253, 244; + --color-secondary-100: 220, 252, 231; + --color-secondary-200: 187, 247, 208; + --color-secondary-300: 134, 239, 172; + --color-secondary-400: 74, 222, 128; + --color-secondary-500: 34, 197, 94; + --color-secondary-600: 22, 163, 74; + --color-secondary-700: 21, 128, 61; + --color-secondary-800: 22, 101, 52; + --color-secondary-900: 20, 83, 45; + --color-secondary-950: 5, 46, 22; +} diff --git a/themes/congo/assets/css/schemes/congo.css b/themes/congo/assets/css/schemes/congo.css new file mode 100644 index 0000000..8b18d0a --- /dev/null +++ b/themes/congo/assets/css/schemes/congo.css @@ -0,0 +1,40 @@ +/* Congo scheme */ +:root { + --color-neutral: 255, 255, 255; + /* Gray */ + --color-neutral-50: 250, 250, 250; + --color-neutral-100: 244, 244, 245; + --color-neutral-200: 228, 228, 231; + --color-neutral-300: 212, 212, 216; + --color-neutral-400: 161, 161, 170; + --color-neutral-500: 113, 113, 122; + --color-neutral-600: 82, 82, 91; + --color-neutral-700: 63, 63, 70; + --color-neutral-800: 39, 39, 42; + --color-neutral-900: 24, 24, 27; + --color-neutral-950: 3, 7, 18; + /* Violet */ + --color-primary-50: 245, 243, 255; + --color-primary-100: 237, 233, 254; + --color-primary-200: 221, 214, 254; + --color-primary-300: 196, 181, 253; + --color-primary-400: 167, 139, 250; + --color-primary-500: 139, 92, 246; + --color-primary-600: 124, 58, 237; + --color-primary-700: 109, 40, 217; + --color-primary-800: 91, 33, 182; + --color-primary-900: 76, 29, 149; + --color-primary-950: 46, 16, 101; + /* Fuchsia */ + --color-secondary-50: 253, 244, 255; + --color-secondary-100: 250, 232, 255; + --color-secondary-200: 245, 208, 254; + --color-secondary-300: 240, 171, 252; + --color-secondary-400: 232, 121, 249; + --color-secondary-500: 217, 70, 239; + --color-secondary-600: 192, 38, 211; + --color-secondary-700: 162, 28, 175; + --color-secondary-800: 134, 25, 143; + --color-secondary-900: 112, 26, 117; + --color-secondary-950: 74, 4, 78; +} diff --git a/themes/congo/assets/css/schemes/fire.css b/themes/congo/assets/css/schemes/fire.css new file mode 100644 index 0000000..01efdb9 --- /dev/null +++ b/themes/congo/assets/css/schemes/fire.css @@ -0,0 +1,40 @@ +/* Fire scheme */ +:root { + --color-neutral: 255, 255, 255; + /* Stone */ + --color-neutral-50: 250, 250, 249; + --color-neutral-100: 245, 245, 244; + --color-neutral-200: 231, 229, 228; + --color-neutral-300: 214, 211, 209; + --color-neutral-400: 168, 162, 158; + --color-neutral-500: 120, 113, 108; + --color-neutral-600: 87, 83, 78; + --color-neutral-700: 68, 64, 60; + --color-neutral-800: 41, 37, 36; + --color-neutral-900: 28, 25, 23; + --color-neutral-950: 12, 10, 9; + /* Orange */ + --color-primary-50: 255, 247, 237; + --color-primary-100: 255, 237, 213; + --color-primary-200: 254, 215, 170; + --color-primary-300: 253, 186, 116; + --color-primary-400: 251, 146, 60; + --color-primary-500: 249, 115, 22; + --color-primary-600: 234, 88, 12; + --color-primary-700: 194, 65, 12; + --color-primary-800: 154, 52, 18; + --color-primary-900: 124, 45, 18; + --color-primary-950: 69, 10, 10; + /* Rose */ + --color-secondary-50: 255, 241, 242; + --color-secondary-100: 255, 228, 230; + --color-secondary-200: 254, 205, 211; + --color-secondary-300: 253, 164, 175; + --color-secondary-400: 251, 113, 133; + --color-secondary-500: 244, 63, 94; + --color-secondary-600: 225, 29, 72; + --color-secondary-700: 190, 18, 60; + --color-secondary-800: 159, 18, 57; + --color-secondary-900: 136, 19, 55; + --color-secondary-950: 76, 5, 25; +} diff --git a/themes/congo/assets/css/schemes/ocean.css b/themes/congo/assets/css/schemes/ocean.css new file mode 100644 index 0000000..32e8138 --- /dev/null +++ b/themes/congo/assets/css/schemes/ocean.css @@ -0,0 +1,40 @@ +/* Ocean scheme */ +:root { + --color-neutral: 255, 255, 255; + /* Slate */ + --color-neutral-50: 248, 250, 252; + --color-neutral-100: 241, 245, 249; + --color-neutral-200: 226, 232, 240; + --color-neutral-300: 203, 213, 225; + --color-neutral-400: 148, 163, 184; + --color-neutral-500: 100, 116, 139; + --color-neutral-600: 71, 85, 105; + --color-neutral-700: 51, 65, 85; + --color-neutral-800: 30, 41, 59; + --color-neutral-900: 15, 23, 42; + --color-neutral-950: 2, 6, 23; + /* Blue */ + --color-primary-50: 239, 246, 255; + --color-primary-100: 219, 234, 254; + --color-primary-200: 191, 219, 254; + --color-primary-300: 147, 197, 253; + --color-primary-400: 96, 165, 250; + --color-primary-500: 59, 130, 246; + --color-primary-600: 37, 99, 235; + --color-primary-700: 29, 78, 216; + --color-primary-800: 30, 64, 175; + --color-primary-900: 30, 58, 138; + --color-primary-950: 23, 37, 8; + /* Cyan */ + --color-secondary-50: 236, 254, 255; + --color-secondary-100: 207, 250, 254; + --color-secondary-200: 165, 243, 252; + --color-secondary-300: 103, 232, 249; + --color-secondary-400: 34, 211, 238; + --color-secondary-500: 6, 182, 212; + --color-secondary-600: 8, 145, 178; + --color-secondary-700: 14, 116, 144; + --color-secondary-800: 21, 94, 117; + --color-secondary-900: 22, 78, 99; + --color-secondary-950: 8, 51, 69; +} diff --git a/themes/congo/assets/css/schemes/sapphire.css b/themes/congo/assets/css/schemes/sapphire.css new file mode 100644 index 0000000..94632b1 --- /dev/null +++ b/themes/congo/assets/css/schemes/sapphire.css @@ -0,0 +1,40 @@ +/* Sapphire scheme */ +:root { + --color-neutral: 255, 255, 255; + /* Slate */ + --color-neutral-50: 248, 250, 252; + --color-neutral-100: 241, 245, 249; + --color-neutral-200: 226, 232, 240; + --color-neutral-300: 203, 213, 225; + --color-neutral-400: 148, 163, 184; + --color-neutral-500: 100, 116, 139; + --color-neutral-600: 71, 85, 105; + --color-neutral-700: 51, 65, 85; + --color-neutral-800: 30, 41, 59; + --color-neutral-900: 15, 23, 42; + --color-neutral-950: 10, 10, 10; + /* Indigo */ + --color-primary-50: 238, 242, 255; + --color-primary-100: 224, 231, 255; + --color-primary-200: 199, 210, 254; + --color-primary-300: 165, 180, 252; + --color-primary-400: 129, 140, 248; + --color-primary-500: 99, 102, 241; + --color-primary-600: 79, 70, 229; + --color-primary-700: 67, 56, 202; + --color-primary-800: 55, 48, 163; + --color-primary-900: 49, 46, 129; + --color-primary-950: 30, 27, 75; + /* Pink */ + --color-secondary-50: 253, 242, 248; + --color-secondary-100: 252, 231, 243; + --color-secondary-200: 251, 207, 232; + --color-secondary-300: 249, 168, 212; + --color-secondary-400: 244, 114, 182; + --color-secondary-500: 236, 72, 153; + --color-secondary-600: 219, 39, 119; + --color-secondary-700: 190, 24, 93; + --color-secondary-800: 157, 23, 77; + --color-secondary-900: 131, 24, 67; + --color-secondary-950: 80, 7, 36; +} diff --git a/themes/congo/assets/css/schemes/slate.css b/themes/congo/assets/css/schemes/slate.css new file mode 100644 index 0000000..4f73ee7 --- /dev/null +++ b/themes/congo/assets/css/schemes/slate.css @@ -0,0 +1,40 @@ +/* Slate scheme */ +:root { + --color-neutral: 255, 255, 255; + /* Gray */ + --color-neutral-50: 249, 250, 251; + --color-neutral-100: 243, 244, 246; + --color-neutral-200: 229, 231, 235; + --color-neutral-300: 209, 213, 219; + --color-neutral-400: 156, 163, 175; + --color-neutral-500: 107, 114, 128; + --color-neutral-600: 75, 85, 99; + --color-neutral-700: 55, 65, 81; + --color-neutral-800: 31, 41, 55; + --color-neutral-900: 17, 24, 39; + --color-neutral-950: 17, 24, 39; + /* Slate */ + --color-primary-50: 248, 250, 252; + --color-primary-100: 241, 245, 249; + --color-primary-200: 226, 232, 240; + --color-primary-300: 203, 213, 225; + --color-primary-400: 148, 163, 184; + --color-primary-500: 100, 116, 139; + --color-primary-600: 71, 85, 105; + --color-primary-700: 51, 65, 85; + --color-primary-800: 30, 41, 59; + --color-primary-900: 15, 23, 42; + --color-primary-950: 2, 6, 23; + /* Gray */ + --color-secondary-50: 249, 250, 251; + --color-secondary-100: 243, 244, 246; + --color-secondary-200: 229, 231, 235; + --color-secondary-300: 209, 213, 219; + --color-secondary-400: 156, 163, 175; + --color-secondary-500: 107, 114, 128; + --color-secondary-600: 75, 85, 99; + --color-secondary-700: 55, 65, 81; + --color-secondary-800: 31, 41, 55; + --color-secondary-900: 17, 24, 39; + --color-secondary-950: 10, 10, 10; +} diff --git a/themes/congo/assets/icons/amazon.svg b/themes/congo/assets/icons/amazon.svg new file mode 100644 index 0000000..32047db --- /dev/null +++ b/themes/congo/assets/icons/amazon.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/apple.svg b/themes/congo/assets/icons/apple.svg new file mode 100644 index 0000000..d1c2233 --- /dev/null +++ b/themes/congo/assets/icons/apple.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/bars.svg b/themes/congo/assets/icons/bars.svg new file mode 100644 index 0000000..6e5941d --- /dev/null +++ b/themes/congo/assets/icons/bars.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/blogger.svg b/themes/congo/assets/icons/blogger.svg new file mode 100644 index 0000000..194dd9b --- /dev/null +++ b/themes/congo/assets/icons/blogger.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/bluesky.svg b/themes/congo/assets/icons/bluesky.svg new file mode 100644 index 0000000..8952dc3 --- /dev/null +++ b/themes/congo/assets/icons/bluesky.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/bug.svg b/themes/congo/assets/icons/bug.svg new file mode 100644 index 0000000..97cae6e --- /dev/null +++ b/themes/congo/assets/icons/bug.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/check.svg b/themes/congo/assets/icons/check.svg new file mode 100644 index 0000000..a6938bd --- /dev/null +++ b/themes/congo/assets/icons/check.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/chevron-down.svg b/themes/congo/assets/icons/chevron-down.svg new file mode 100644 index 0000000..fc640bd --- /dev/null +++ b/themes/congo/assets/icons/chevron-down.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/chevron-up.svg b/themes/congo/assets/icons/chevron-up.svg new file mode 100644 index 0000000..a2b79a2 --- /dev/null +++ b/themes/congo/assets/icons/chevron-up.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/circle-info.svg b/themes/congo/assets/icons/circle-info.svg new file mode 100644 index 0000000..bd32225 --- /dev/null +++ b/themes/congo/assets/icons/circle-info.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/codepen.svg b/themes/congo/assets/icons/codepen.svg new file mode 100644 index 0000000..52ec58a --- /dev/null +++ b/themes/congo/assets/icons/codepen.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/coffee.svg b/themes/congo/assets/icons/coffee.svg new file mode 100644 index 0000000..a8e1f67 --- /dev/null +++ b/themes/congo/assets/icons/coffee.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/comment.svg b/themes/congo/assets/icons/comment.svg new file mode 100644 index 0000000..2305041 --- /dev/null +++ b/themes/congo/assets/icons/comment.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/dev.svg b/themes/congo/assets/icons/dev.svg new file mode 100644 index 0000000..7311e84 --- /dev/null +++ b/themes/congo/assets/icons/dev.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/discord.svg b/themes/congo/assets/icons/discord.svg new file mode 100644 index 0000000..75f1fc7 --- /dev/null +++ b/themes/congo/assets/icons/discord.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/dribbble.svg b/themes/congo/assets/icons/dribbble.svg new file mode 100644 index 0000000..c2613fe --- /dev/null +++ b/themes/congo/assets/icons/dribbble.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/edit.svg b/themes/congo/assets/icons/edit.svg new file mode 100644 index 0000000..82a6035 --- /dev/null +++ b/themes/congo/assets/icons/edit.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/email.svg b/themes/congo/assets/icons/email.svg new file mode 100644 index 0000000..fa215c6 --- /dev/null +++ b/themes/congo/assets/icons/email.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/facebook.svg b/themes/congo/assets/icons/facebook.svg new file mode 100644 index 0000000..1535831 --- /dev/null +++ b/themes/congo/assets/icons/facebook.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/flickr.svg b/themes/congo/assets/icons/flickr.svg new file mode 100644 index 0000000..fcd57c4 --- /dev/null +++ b/themes/congo/assets/icons/flickr.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/foursquare.svg b/themes/congo/assets/icons/foursquare.svg new file mode 100644 index 0000000..74c28e6 --- /dev/null +++ b/themes/congo/assets/icons/foursquare.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/github.svg b/themes/congo/assets/icons/github.svg new file mode 100644 index 0000000..ed8c470 --- /dev/null +++ b/themes/congo/assets/icons/github.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/gitlab.svg b/themes/congo/assets/icons/gitlab.svg new file mode 100644 index 0000000..998e306 --- /dev/null +++ b/themes/congo/assets/icons/gitlab.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/globe.svg b/themes/congo/assets/icons/globe.svg new file mode 100644 index 0000000..6304e06 --- /dev/null +++ b/themes/congo/assets/icons/globe.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/goodreads.svg b/themes/congo/assets/icons/goodreads.svg new file mode 100644 index 0000000..483510f --- /dev/null +++ b/themes/congo/assets/icons/goodreads.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/assets/icons/google-scholar.svg b/themes/congo/assets/icons/google-scholar.svg new file mode 100644 index 0000000..1862f54 --- /dev/null +++ b/themes/congo/assets/icons/google-scholar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/assets/icons/google.svg b/themes/congo/assets/icons/google.svg new file mode 100644 index 0000000..7e10132 --- /dev/null +++ b/themes/congo/assets/icons/google.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/hashnode.svg b/themes/congo/assets/icons/hashnode.svg new file mode 100644 index 0000000..6ebe2db --- /dev/null +++ b/themes/congo/assets/icons/hashnode.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/instagram.svg b/themes/congo/assets/icons/instagram.svg new file mode 100644 index 0000000..3cd3d33 --- /dev/null +++ b/themes/congo/assets/icons/instagram.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/keybase.svg b/themes/congo/assets/icons/keybase.svg new file mode 100644 index 0000000..998110e --- /dev/null +++ b/themes/congo/assets/icons/keybase.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/kickstarter.svg b/themes/congo/assets/icons/kickstarter.svg new file mode 100644 index 0000000..4496981 --- /dev/null +++ b/themes/congo/assets/icons/kickstarter.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/kofi.svg b/themes/congo/assets/icons/kofi.svg new file mode 100644 index 0000000..aa86104 --- /dev/null +++ b/themes/congo/assets/icons/kofi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/themes/congo/assets/icons/lastfm.svg b/themes/congo/assets/icons/lastfm.svg new file mode 100644 index 0000000..2b53341 --- /dev/null +++ b/themes/congo/assets/icons/lastfm.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/lightbulb.svg b/themes/congo/assets/icons/lightbulb.svg new file mode 100644 index 0000000..5ffc710 --- /dev/null +++ b/themes/congo/assets/icons/lightbulb.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/line.svg b/themes/congo/assets/icons/line.svg new file mode 100644 index 0000000..b066929 --- /dev/null +++ b/themes/congo/assets/icons/line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/assets/icons/link.svg b/themes/congo/assets/icons/link.svg new file mode 100644 index 0000000..eb283c2 --- /dev/null +++ b/themes/congo/assets/icons/link.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/linkedin.svg b/themes/congo/assets/icons/linkedin.svg new file mode 100644 index 0000000..4e3948b --- /dev/null +++ b/themes/congo/assets/icons/linkedin.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/list.svg b/themes/congo/assets/icons/list.svg new file mode 100644 index 0000000..f7a7df4 --- /dev/null +++ b/themes/congo/assets/icons/list.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/mastodon.svg b/themes/congo/assets/icons/mastodon.svg new file mode 100644 index 0000000..2c9db56 --- /dev/null +++ b/themes/congo/assets/icons/mastodon.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/medium.svg b/themes/congo/assets/icons/medium.svg new file mode 100644 index 0000000..07d095d --- /dev/null +++ b/themes/congo/assets/icons/medium.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/mendeley.svg b/themes/congo/assets/icons/mendeley.svg new file mode 100644 index 0000000..dbd2ed8 --- /dev/null +++ b/themes/congo/assets/icons/mendeley.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/assets/icons/microsoft.svg b/themes/congo/assets/icons/microsoft.svg new file mode 100644 index 0000000..1bdb0c2 --- /dev/null +++ b/themes/congo/assets/icons/microsoft.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/mobile.svg b/themes/congo/assets/icons/mobile.svg new file mode 100644 index 0000000..2b9a046 --- /dev/null +++ b/themes/congo/assets/icons/mobile.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/moon.svg b/themes/congo/assets/icons/moon.svg new file mode 100644 index 0000000..8356307 --- /dev/null +++ b/themes/congo/assets/icons/moon.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/orcid.svg b/themes/congo/assets/icons/orcid.svg new file mode 100644 index 0000000..b7f1b25 --- /dev/null +++ b/themes/congo/assets/icons/orcid.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/patreon.svg b/themes/congo/assets/icons/patreon.svg new file mode 100644 index 0000000..bd2e994 --- /dev/null +++ b/themes/congo/assets/icons/patreon.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/pencil.svg b/themes/congo/assets/icons/pencil.svg new file mode 100644 index 0000000..29bd525 --- /dev/null +++ b/themes/congo/assets/icons/pencil.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/phone.svg b/themes/congo/assets/icons/phone.svg new file mode 100644 index 0000000..6760340 --- /dev/null +++ b/themes/congo/assets/icons/phone.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/pinterest.svg b/themes/congo/assets/icons/pinterest.svg new file mode 100644 index 0000000..386481c --- /dev/null +++ b/themes/congo/assets/icons/pinterest.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/podcast.svg b/themes/congo/assets/icons/podcast.svg new file mode 100644 index 0000000..e8f950a --- /dev/null +++ b/themes/congo/assets/icons/podcast.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/reddit.svg b/themes/congo/assets/icons/reddit.svg new file mode 100644 index 0000000..bb55eb5 --- /dev/null +++ b/themes/congo/assets/icons/reddit.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/researchgate.svg b/themes/congo/assets/icons/researchgate.svg new file mode 100644 index 0000000..ad176db --- /dev/null +++ b/themes/congo/assets/icons/researchgate.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/rss.svg b/themes/congo/assets/icons/rss.svg new file mode 100644 index 0000000..24a5d3b --- /dev/null +++ b/themes/congo/assets/icons/rss.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/search.svg b/themes/congo/assets/icons/search.svg new file mode 100644 index 0000000..15fe892 --- /dev/null +++ b/themes/congo/assets/icons/search.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/skull-crossbones.svg b/themes/congo/assets/icons/skull-crossbones.svg new file mode 100644 index 0000000..4e19f6e --- /dev/null +++ b/themes/congo/assets/icons/skull-crossbones.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/slack.svg b/themes/congo/assets/icons/slack.svg new file mode 100644 index 0000000..69909d8 --- /dev/null +++ b/themes/congo/assets/icons/slack.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/snapchat.svg b/themes/congo/assets/icons/snapchat.svg new file mode 100644 index 0000000..b6efeef --- /dev/null +++ b/themes/congo/assets/icons/snapchat.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/soundcloud.svg b/themes/congo/assets/icons/soundcloud.svg new file mode 100644 index 0000000..301c3d1 --- /dev/null +++ b/themes/congo/assets/icons/soundcloud.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/stack-overflow.svg b/themes/congo/assets/icons/stack-overflow.svg new file mode 100644 index 0000000..bba4159 --- /dev/null +++ b/themes/congo/assets/icons/stack-overflow.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/steam.svg b/themes/congo/assets/icons/steam.svg new file mode 100644 index 0000000..6efd1fd --- /dev/null +++ b/themes/congo/assets/icons/steam.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/strava.svg b/themes/congo/assets/icons/strava.svg new file mode 100644 index 0000000..1c80ccc --- /dev/null +++ b/themes/congo/assets/icons/strava.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/assets/icons/sun.svg b/themes/congo/assets/icons/sun.svg new file mode 100644 index 0000000..34a57ec --- /dev/null +++ b/themes/congo/assets/icons/sun.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/tag.svg b/themes/congo/assets/icons/tag.svg new file mode 100644 index 0000000..c78e65b --- /dev/null +++ b/themes/congo/assets/icons/tag.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/telegram.svg b/themes/congo/assets/icons/telegram.svg new file mode 100644 index 0000000..4101aef --- /dev/null +++ b/themes/congo/assets/icons/telegram.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/threads.svg b/themes/congo/assets/icons/threads.svg new file mode 100644 index 0000000..aa27c5f --- /dev/null +++ b/themes/congo/assets/icons/threads.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/tiktok.svg b/themes/congo/assets/icons/tiktok.svg new file mode 100644 index 0000000..792a850 --- /dev/null +++ b/themes/congo/assets/icons/tiktok.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/translate.svg b/themes/congo/assets/icons/translate.svg new file mode 100644 index 0000000..eae60ff --- /dev/null +++ b/themes/congo/assets/icons/translate.svg @@ -0,0 +1,4 @@ + + + + diff --git a/themes/congo/assets/icons/triangle-exclamation.svg b/themes/congo/assets/icons/triangle-exclamation.svg new file mode 100644 index 0000000..f501ce9 --- /dev/null +++ b/themes/congo/assets/icons/triangle-exclamation.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/tumblr.svg b/themes/congo/assets/icons/tumblr.svg new file mode 100644 index 0000000..1457d68 --- /dev/null +++ b/themes/congo/assets/icons/tumblr.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/twitch.svg b/themes/congo/assets/icons/twitch.svg new file mode 100644 index 0000000..a35fa55 --- /dev/null +++ b/themes/congo/assets/icons/twitch.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/twitter.svg b/themes/congo/assets/icons/twitter.svg new file mode 100644 index 0000000..3ab4c1c --- /dev/null +++ b/themes/congo/assets/icons/twitter.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/weibo.svg b/themes/congo/assets/icons/weibo.svg new file mode 100644 index 0000000..aa29562 --- /dev/null +++ b/themes/congo/assets/icons/weibo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/assets/icons/whatsapp.svg b/themes/congo/assets/icons/whatsapp.svg new file mode 100644 index 0000000..c1df966 --- /dev/null +++ b/themes/congo/assets/icons/whatsapp.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/x-twitter.svg b/themes/congo/assets/icons/x-twitter.svg new file mode 100644 index 0000000..717ef6f --- /dev/null +++ b/themes/congo/assets/icons/x-twitter.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/xing.svg b/themes/congo/assets/icons/xing.svg new file mode 100644 index 0000000..ca2bc46 --- /dev/null +++ b/themes/congo/assets/icons/xing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/assets/icons/xmark.svg b/themes/congo/assets/icons/xmark.svg new file mode 100644 index 0000000..a4c5121 --- /dev/null +++ b/themes/congo/assets/icons/xmark.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/icons/youtube.svg b/themes/congo/assets/icons/youtube.svg new file mode 100644 index 0000000..3fa4dad --- /dev/null +++ b/themes/congo/assets/icons/youtube.svg @@ -0,0 +1 @@ + diff --git a/themes/congo/assets/js/appearance.js b/themes/congo/assets/js/appearance.js new file mode 100644 index 0000000..0cdfd15 --- /dev/null +++ b/themes/congo/assets/js/appearance.js @@ -0,0 +1,80 @@ +const sitePreference = document.documentElement.getAttribute("data-default-appearance"); +const userPreference = localStorage.getItem("appearance"); + +function getCSSValue(varName) { + var cssValue = window.getComputedStyle(document.documentElement).getPropertyValue(varName); + return "rgb(" + cssValue.replace(/\s+/g, "") + ")"; +} + +function setThemeColor() { + var metaThemeColor = document.querySelector("meta[name=theme-color]"); + document.documentElement.classList.contains("dark") + ? metaThemeColor.setAttribute("content", getCSSValue("--color-neutral-800")) + : metaThemeColor.setAttribute("content", getCSSValue("--color-neutral")); + return true; +} + +if ((sitePreference === "dark" && userPreference === null) || userPreference === "dark") { + document.documentElement.classList.add("dark"); + setThemeColor(); +} + +if (document.documentElement.getAttribute("data-auto-appearance") === "true") { + if ( + window.matchMedia && + window.matchMedia("(prefers-color-scheme: dark)").matches && + userPreference !== "light" + ) { + document.documentElement.classList.add("dark"); + setThemeColor(); + } + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event) => { + if (event.matches) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + setThemeColor(); + }); +} + +function add_to_top_elem() { + var body = document.body; + var html = document.documentElement; + + const height = + Math.max( + body.scrollHeight, + body.offsetHeight, + html.clientHeight, + html.scrollHeight, + html.offsetHeight + ) - 150; + + const elem = document.getElementById("to-top"); + if (elem === null || elem === undefined) { + return; + } + + elem.hidden = height < window.innerHeight; +} + +window.addEventListener("DOMContentLoaded", (event) => { + add_to_top_elem(); + setThemeColor(); + var switchers = document.querySelectorAll("[id^='appearance-switcher']"); + switchers.forEach((switcher) => { + switcher.addEventListener("click", () => { + document.documentElement.classList.toggle("dark"); + setThemeColor(); + localStorage.setItem( + "appearance", + document.documentElement.classList.contains("dark") ? "dark" : "light" + ); + }); + switcher.addEventListener("contextmenu", (event) => { + event.preventDefault(); + localStorage.removeItem("appearance"); + }); + }); +}); diff --git a/themes/congo/assets/js/chart.js b/themes/congo/assets/js/chart.js new file mode 100644 index 0000000..352a563 --- /dev/null +++ b/themes/congo/assets/js/chart.js @@ -0,0 +1,14 @@ +function css(name) { + return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")"; +} + +Chart.defaults.font.size = 14; +Chart.defaults.plugins.colors.enabled = false; +Chart.defaults.backgroundColor = css("--color-primary-300"); +Chart.defaults.elements.point.borderColor = css("--color-primary-400"); +Chart.defaults.elements.bar.borderColor = css("--color-primary-500"); +Chart.defaults.elements.bar.borderWidth = 1; +Chart.defaults.elements.line.borderColor = css("--color-primary-400"); +Chart.defaults.elements.arc.backgroundColor = css("--color-primary-200"); +Chart.defaults.elements.arc.borderColor = css("--color-primary-500"); +Chart.defaults.elements.arc.borderWidth = 1; diff --git a/themes/congo/assets/js/code.js b/themes/congo/assets/js/code.js new file mode 100644 index 0000000..8496519 --- /dev/null +++ b/themes/congo/assets/js/code.js @@ -0,0 +1,66 @@ +var scriptBundle = document.getElementById("script-bundle"); +var copyText = scriptBundle ? scriptBundle.getAttribute("data-copy") : "Copy"; +var copiedText = scriptBundle ? scriptBundle.getAttribute("data-copied") : "Copied"; + +function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.className = "copy-button"; + button.type = "button"; + button.ariaLabel = copyText; + button.innerText = copyText; + button.addEventListener("click", () => copyCodeToClipboard(button, highlightDiv)); + addCopyButtonToDom(button, highlightDiv); +} + +async function copyCodeToClipboard(button, highlightDiv) { + const codeToCopy = highlightDiv.querySelector(":last-child > pre > code").innerText; + try { + result = await navigator.permissions.query({ name: "clipboard-write" }); + if (result.state == "granted" || result.state == "prompt") { + await navigator.clipboard.writeText(codeToCopy); + } else { + copyCodeBlockExecCommand(codeToCopy, highlightDiv); + } + } catch (_) { + copyCodeBlockExecCommand(codeToCopy, highlightDiv); + } finally { + codeWasCopied(button); + } +} + +function copyCodeBlockExecCommand(codeToCopy, highlightDiv) { + const textArea = document.createElement("textArea"); + textArea.contentEditable = "true"; + textArea.readOnly = "false"; + textArea.className = "copy-textarea"; + textArea.value = codeToCopy; + highlightDiv.insertBefore(textArea, highlightDiv.firstChild); + const range = document.createRange(); + range.selectNodeContents(textArea); + const sel = window.getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + textArea.setSelectionRange(0, 999999); + document.execCommand("copy"); + highlightDiv.removeChild(textArea); +} + +function codeWasCopied(button) { + button.blur(); + button.innerText = copiedText; + setTimeout(function () { + button.innerText = copyText; + }, 2000); +} + +function addCopyButtonToDom(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + wrapper.className = "highlight-wrapper"; + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); +} + +window.addEventListener("DOMContentLoaded", (event) => { + document.querySelectorAll(".highlight").forEach((highlightDiv) => createCopyButton(highlightDiv)); +}); diff --git a/themes/congo/assets/js/menu.js b/themes/congo/assets/js/menu.js new file mode 100644 index 0000000..4d674e2 --- /dev/null +++ b/themes/congo/assets/js/menu.js @@ -0,0 +1,6 @@ +/* + Closes the hamburger menu when a link is clicked. +*/ +function close_menu() { + document.getElementById("menu-controller").checked = false; +} diff --git a/themes/congo/assets/js/mermaid.js b/themes/congo/assets/js/mermaid.js new file mode 100644 index 0000000..9704c86 --- /dev/null +++ b/themes/congo/assets/js/mermaid.js @@ -0,0 +1,30 @@ +function css(name) { + return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")"; +} + +let isDark = document.documentElement.classList.contains("dark"); + +mermaid.initialize({ + theme: "base", + themeVariables: { + background: css("--color-neutral"), + primaryTextColor: isDark ? css("--color-neutral-200") : css("--color-neutral-700"), + primaryColor: isDark ? css("--color-primary-700") : css("--color-primary-200"), + secondaryColor: isDark ? css("--color-secondary-700") : css("--color-secondary-200"), + tertiaryColor: isDark ? css("--color-neutral-700") : css("--color-neutral-100"), + primaryBorderColor: isDark ? css("--color-primary-500") : css("--color-primary-400"), + secondaryBorderColor: css("--color-secondary-400"), + tertiaryBorderColor: isDark ? css("--color-neutral-300") : css("--color-neutral-400"), + lineColor: isDark ? css("--color-neutral-300") : css("--color-neutral-600"), + fontFamily: + "ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif", + fontSize: "16px", + pieTitleTextSize: "19px", + pieSectionTextSize: "16px", + pieLegendTextSize: "16px", + pieStrokeWidth: "1px", + pieOuterStrokeWidth: "0.5px", + pieStrokeColor: isDark ? css("--color-neutral-300") : css("--color-neutral-400"), + pieOpacity: "1", + }, +}); diff --git a/themes/congo/assets/js/quicklink.js b/themes/congo/assets/js/quicklink.js new file mode 100644 index 0000000..014d4ce --- /dev/null +++ b/themes/congo/assets/js/quicklink.js @@ -0,0 +1,3 @@ +window.addEventListener("load", () => { + quicklink.listen(); +}); diff --git a/themes/congo/assets/js/rtl.js b/themes/congo/assets/js/rtl.js new file mode 100644 index 0000000..26852d4 --- /dev/null +++ b/themes/congo/assets/js/rtl.js @@ -0,0 +1,3 @@ +window.addEventListener("DOMContentLoaded", (event) => { + document.querySelectorAll("pre, .highlight-wrapper").forEach((tag) => (tag.dir = "auto")); +}); diff --git a/themes/congo/assets/js/search.js b/themes/congo/assets/js/search.js new file mode 100644 index 0000000..ed0d6db --- /dev/null +++ b/themes/congo/assets/js/search.js @@ -0,0 +1,216 @@ +var fuse; +var showButtons = document.querySelectorAll("[id^='search-button']"); +var hideButton = document.getElementById("close-search-button"); +var wrapper = document.getElementById("search-wrapper"); +var modal = document.getElementById("search-modal"); +var input = document.getElementById("search-query"); +var output = document.getElementById("search-results"); +var first = output.firstChild; +var last = output.lastChild; +var searchVisible = false; +var indexed = false; +var hasResults = false; + +// Listen for events +showButtons.forEach((button) => { + button.addEventListener("click", displaySearch); +}); +hideButton.addEventListener("click", hideSearch); +wrapper.addEventListener("click", hideSearch); +modal.addEventListener("click", function (event) { + event.stopPropagation(); + event.stopImmediatePropagation(); + return false; +}); +document.addEventListener("keydown", function (event) { + // Forward slash to open search wrapper + if (event.key == "/") { + if (!searchVisible) { + event.preventDefault(); + displaySearch(); + } + } + + // Esc to close search wrapper + if (event.key == "Escape") { + hideSearch(); + } + + // Down arrow to move down results list + if (event.key == "ArrowDown") { + if (searchVisible && hasResults) { + event.preventDefault(); + if (document.activeElement == input) { + first.focus(); + } else if (document.activeElement == last) { + last.focus(); + } else { + document.activeElement.parentElement.nextSibling.firstElementChild.focus(); + } + } + } + + // Up arrow to move up results list + if (event.key == "ArrowUp") { + if (searchVisible && hasResults) { + event.preventDefault(); + if (document.activeElement == input) { + input.focus(); + } else if (document.activeElement == first) { + input.focus(); + } else { + document.activeElement.parentElement.previousSibling.firstElementChild.focus(); + } + } + } +}); + +input.onkeyup = function (event) { + // queue an update after each keypress. the last one after some idle time wins + let isFirstRun = throttle(() => executeQuery(this.value)); + // on first run, show a spinner + if (isFirstRun) { + output.innerHTML = `
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • `; + } +}; + +function throttle(func, time = 750) { + let isFirstRun = throttle.timeout === undefined; + if (!isFirstRun) { + clearTimeout(throttle.timeout); + } + throttle.timeout = setTimeout(() => { + func(); + throttle.timeout = undefined; + }, time); + return isFirstRun; +} + +function displaySearch() { + if (!indexed) { + buildIndex(); + } + if (!searchVisible) { + document.body.style.overflow = "hidden"; + wrapper.style.visibility = "visible"; + input.focus(); + searchVisible = true; + } +} + +function hideSearch() { + if (searchVisible) { + document.body.style.overflow = "visible"; + wrapper.style.visibility = "hidden"; + input.value = ""; + output.innerHTML = ""; + document.activeElement.blur(); + searchVisible = false; + } +} + +function fetchJSON(path, callback) { + var httpRequest = new XMLHttpRequest(); + httpRequest.onreadystatechange = function () { + if (httpRequest.readyState === 4) { + if (httpRequest.status === 200) { + var data = JSON.parse(httpRequest.responseText); + if (callback) callback(data); + } + } + }; + httpRequest.open("GET", path); + httpRequest.send(); +} + +function buildIndex() { + var baseURL = wrapper.getAttribute("data-url"); + baseURL = baseURL.replace(/\/?$/, "/"); + fetchJSON(baseURL + "index.json", function (data) { + var options = { + shouldSort: true, + ignoreLocation: true, + threshold: 0.0, + includeMatches: true, + keys: [ + { name: "title", weight: 0.8 }, + { name: "section", weight: 0.2 }, + { name: "summary", weight: 0.6 }, + { name: "content", weight: 0.4 }, + ], + }; + fuse = new Fuse(data, options); + indexed = true; + }); +} + +function executeQuery(term) { + let results = fuse.search(term); + hasResults = results.length > 0; + + if (results.length > 0) { + // prettier-ignore + output.innerHTML = results.map(function (value) { + return `
  • + +
    +
    ${value.item.title}
    +
    ${value.item.section}${value.item.date == null ? '' : `·${value.item.date}`}
    +
    ${value.item.summary}
    +
    +
    +
    +
    +
  • `; + }).join(""); + + first = output.firstChild.firstElementChild; + last = output.lastChild.firstElementChild; + } else { + output.innerHTML = ""; + } +} diff --git a/themes/congo/config/_default/hugo.toml b/themes/congo/config/_default/hugo.toml new file mode 100644 index 0000000..bc3f630 --- /dev/null +++ b/themes/congo/config/_default/hugo.toml @@ -0,0 +1,27 @@ +# -- Site Configuration -- +# Refer to the theme docs for more details about each of these parameters. +# https://jpanther.github.io/congo/docs/getting-started/ + +# baseURL = "https://your_domain.com/" +defaultContentLanguage = "en" + +enableRobotsTXT = true +summaryLength = 0 + +[pagination] + pagerSize = 10 + +[outputs] + home = ["HTML", "RSS", "JSON"] + +[privacy] + [privacy.vimeo] + enableDNT = true + [privacy.x] + enableDNT = true + [privacy.youTube] + privacyEnhanced = true + +[services] + [services.x] + disableInlineCSS = true diff --git a/themes/congo/config/_default/languages.en.toml b/themes/congo/config/_default/languages.en.toml new file mode 100644 index 0000000..f5a1689 --- /dev/null +++ b/themes/congo/config/_default/languages.en.toml @@ -0,0 +1,67 @@ +languageCode = "en" +languageName = "English" +languageDirection = "ltr" +weight = 1 + +title = "Congo" +# copyright = "Copy, _right?_ :thinking_face:" + +[params] + dateFormat = "2 January 2006" + + # mainSections = ["section1", "section2"] + # description = "My awesome website" + +[params.author] + # name = "Your name here" + # image = "img/author.jpg" + # headline = "I'm only human" + # bio = "A little bit about you" + # links = [ + # { email = "mailto:hello@your_domain.com" }, + # { link = "https://link-to-some-website.com/" }, + # { amazon = "https://www.amazon.com/hz/wishlist/ls/wishlist-id" }, + # { apple = "https://www.apple.com" }, + # { blogger = "https://username.blogspot.com/" }, + # { codepen = "https://codepen.io/username" }, + # { dev = "https://dev.to/username" }, + # { discord = "https://discord.gg/invitecode" }, + # { dribbble = "https://dribbble.com/username" }, + # { facebook = "https://facebook.com/username" }, + # { flickr = "https://www.flickr.com/photos/username/" }, + # { foursquare = "https://foursquare.com/username" }, + # { github = "https://github.com/username" }, + # { gitlab = "https://gitlab.com/username" }, + # { google = "https://www.google.com/" }, + # { google-scholar = "https://scholar.google.com/citations?user=user-id" }, + # { hashnode = "https://username.hashnode.dev" }, + # { instagram = "https://instagram.com/username" }, + # { keybase = "https://keybase.io/username" }, + # { kickstarter = "https://www.kickstarter.com/profile/username" }, + # { kofi = "https://ko-fi.com/username" }, + # { lastfm = "https://lastfm.com/user/username" }, + # { linkedin = "https://linkedin.com/in/username" }, + # { mastodon = "https://mastodon.instance/@username" }, + # { medium = "https://medium.com/username" }, + # { mendeley = "https://www.mendeley.com/" }, + # { microsoft = "https://www.microsoft.com/" }, + # { orcid = "https://orcid.org/userid" }, + # { patreon = "https://www.patreon.com/username" }, + # { pinterest = "https://pinterest.com/username" }, + # { reddit = "https://reddit.com/user/username" }, + # { researchgate = "https://www.researchgate.net/profile/username" }, + # { slack = "https://workspace.url/team/userid" }, + # { snapchat = "https://snapchat.com/add/username" }, + # { soundcloud = "https://soundcloud.com/username" }, + # { stack-overflow = "https://stackoverflow.com/users/userid/username" }, + # { steam = "https://steamcommunity.com/profiles/userid" }, + # { telegram = "https://t.me/username" }, + # { threads = "https://threads.net/@username" }, + # { tiktok = "https://tiktok.com/@username" }, + # { tumblr = "https://username.tumblr.com" }, + # { twitch = "https://twitch.tv/username" }, + # { whatsapp = "https://wa.me/phone-number" }, + # { x-twitter = "https://twitter.com/username" }, + # { youtube = "https://youtube.com/username" }, + # { xing = "https://xing.com/profile/username" }, + # ] diff --git a/themes/congo/config/_default/markup.toml b/themes/congo/config/_default/markup.toml new file mode 100644 index 0000000..cee9476 --- /dev/null +++ b/themes/congo/config/_default/markup.toml @@ -0,0 +1,19 @@ +# -- Markup -- +# These settings are required for the theme to function. + +[goldmark] +[goldmark.renderer] + unsafe = true +[goldmark.extensions] +[goldmark.extensions.passthrough] + enable = true +[goldmark.extensions.passthrough.delimiters] + block = [['\[', '\]'], ['$$', '$$']] + inline = [['\(', '\)']] + +[highlight] + noClasses = false + +[tableOfContents] + startLevel = 2 + endLevel = 4 diff --git a/themes/congo/config/_default/menus.en.toml b/themes/congo/config/_default/menus.en.toml new file mode 100644 index 0000000..758fbf4 --- /dev/null +++ b/themes/congo/config/_default/menus.en.toml @@ -0,0 +1,47 @@ +# -- Main Menu -- +# The main menu is displayed in the header at the top of the page. +# Acceptable parameters are name, pageRef, page, url, title, weight. +# +# The simplest menu configuration is to provide: +# name = The name to be displayed for this menu link +# pageRef = The identifier of the page or section to link to +# +# By default the menu is ordered alphabetically. This can be +# overridden by providing a weight value. The menu will then be +# ordered by weight from lowest to highest. + +[[main]] + name = "Blog" + pageRef = "posts" + weight = 10 + +[[main]] + name = "Categories" + pageRef = "categories" + weight = 20 + +[[main]] + name = "Tags" + pageRef = "tags" + weight = 30 + +[[main]] + identifier = "search" + weight = 99 + [main.params] + action = "search" + +[[main]] + identifier = "locale" + weight = 100 + [main.params] + action = "locale" + +# -- Footer Menu -- +# The footer menu is displayed at the bottom of the page, just before +# the copyright notice. Configure as per the main menu above. + +# [[footer]] +# name = "Tags" +# pageRef = "tags" +# weight = 10 diff --git a/themes/congo/config/_default/module.toml b/themes/congo/config/_default/module.toml new file mode 100644 index 0000000..e90665b --- /dev/null +++ b/themes/congo/config/_default/module.toml @@ -0,0 +1,3 @@ +[hugoVersion] + extended = true + min = "0.87.0" diff --git a/themes/congo/config/_default/params.toml b/themes/congo/config/_default/params.toml new file mode 100644 index 0000000..9524968 --- /dev/null +++ b/themes/congo/config/_default/params.toml @@ -0,0 +1,88 @@ +# -- Theme Options -- +# These options control how the theme functions and allow you to +# customise the display of your website. +# +# Refer to the theme docs for more details about each of these parameters. +# https://jpanther.github.io/congo/docs/configuration/#theme-parameters + +colorScheme = "congo" +defaultAppearance = "light" # valid options: light or dark +autoSwitchAppearance = true + +defaultThemeColor = "#FFFFFF" + +enableSearch = false +enableCodeCopy = false +enableImageLazyLoading = true +enableImageWebp = true + +# robots = "" +fingerprintAlgorithm = "sha256" + +[header] + layout = "basic" # valid options: basic, hamburger, hybrid, custom + # logo = "img/logo.jpg" + # logoDark = "img/dark-logo.jpg" + showTitle = true + +[footer] + showCopyright = true + showThemeAttribution = true + showAppearanceSwitcher = false + showScrollToTop = true + +[homepage] + layout = "page" # valid options: page, profile, custom + showRecent = false + recentLimit = 5 + +[article] + showDate = true + showDateUpdated = false + showAuthor = true + showBreadcrumbs = false + showDraftLabel = true + showEdit = false + # editURL = "https://github.com/username/repo/" + editAppendPath = true + showHeadingAnchors = true + showPagination = true + invertPagination = false + showReadingTime = true + showTableOfContents = false + showTaxonomies = false + showWordCount = false + showComments = false + # sharingLinks = ["facebook", "x-twitter", "mastodon", "pinterest", "reddit", "linkedin", "email", "threads", "telegram", "line", "weibo", "xing", "bluesky"] + +[list] + showBreadcrumbs = false + showSummary = false + showTableOfContents = false + showTaxonomies = false + groupByYear = true + paginationWidth = 1 + +[sitemap] + excludedKinds = ["taxonomy", "term"] + +[taxonomy] + showTermCount = true + +[fathomAnalytics] + # site = "ABC12345" + +[plausibleAnalytics] + # domain = "blog.yoursite.com" + # event = "" + # script = "" + +#[umamiAnalytics] +# site = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +# region = "eu" # can be either "eu" or "us" + +[verification] + # google = "" + # bing = "" + # pinterest = "" + # yandex = "" diff --git a/themes/congo/data/sharing.json b/themes/congo/data/sharing.json new file mode 100644 index 0000000..c209373 --- /dev/null +++ b/themes/congo/data/sharing.json @@ -0,0 +1,72 @@ +{ + "email": { + "icon": "email", + "title": "sharing.email", + "url": "mailto:?body=%s&subject=%s" + }, + "facebook": { + "icon": "facebook", + "title": "sharing.facebook", + "url": "https://www.facebook.com/sharer/sharer.php?u=%s"e=%s" + }, + "linkedin": { + "icon": "linkedin", + "title": "sharing.linkedin", + "url": "https://www.linkedin.com/shareArticle?mini=true&url=%s&title=%s" + }, + "mastodon": { + "icon": "mastodon", + "title": "sharing.mastodon", + "url": "https://tootpick.org/#text=%s %s" + }, + "pinterest": { + "icon": "pinterest", + "title": "sharing.pinterest", + "url": "https://pinterest.com/pin/create/bookmarklet/?url=%s&description=%s" + }, + "reddit": { + "icon": "reddit", + "title": "sharing.reddit", + "url": "https://reddit.com/submit/?url=%s&resubmit=true&title=%s" + }, + "twitter": { + "icon": "twitter", + "title": "sharing.twitter", + "url": "https://twitter.com/intent/tweet/?url=%s&text=%s" + }, + "x-twitter": { + "icon": "x-twitter", + "title": "sharing.x-twitter", + "url": "https://x.com/intent/tweet/?url=%s&text=%s" + }, + "threads": { + "icon": "threads", + "title": "sharing.threads", + "url": "https://www.threads.net/intent/post?text=%s %s" + }, + "telegram": { + "icon": "telegram", + "title": "sharing.telegram", + "url": "https://telegram.me/share/url?text=%s&url=%s" + }, + "line": { + "icon": "line", + "title": "sharing.line", + "url": "https://line.me/R/share?text=%s%%20%s" + }, + "weibo": { + "icon": "weibo", + "title": "sharing.weibo", + "url": "https://service.weibo.com/share/share.php?url=%s&appkey=&title=%s&pic=&ralateUid=&lang" + }, + "xing": { + "icon": "xing", + "title": "sharing.xing", + "url": "https://www.xing.com/spi/shares/new?url=%s" + }, + "bluesky": { + "icon": "bluesky", + "title": "sharing.bluesky", + "url": "https://bsky.app/intent/compose?text=%s%s" + } +} diff --git a/themes/congo/exampleSite/assets/img/author.jpg b/themes/congo/exampleSite/assets/img/author.jpg new file mode 100644 index 0000000..bd53fd2 Binary files /dev/null and b/themes/congo/exampleSite/assets/img/author.jpg differ diff --git a/themes/congo/exampleSite/assets/img/logo-dark.jpg b/themes/congo/exampleSite/assets/img/logo-dark.jpg new file mode 100644 index 0000000..9b4c5bd Binary files /dev/null and b/themes/congo/exampleSite/assets/img/logo-dark.jpg differ diff --git a/themes/congo/exampleSite/assets/img/logo.jpg b/themes/congo/exampleSite/assets/img/logo.jpg new file mode 100644 index 0000000..79dc6e8 Binary files /dev/null and b/themes/congo/exampleSite/assets/img/logo.jpg differ diff --git a/themes/congo/exampleSite/assets/js/home.js b/themes/congo/exampleSite/assets/js/home.js new file mode 100644 index 0000000..3721034 --- /dev/null +++ b/themes/congo/exampleSite/assets/js/home.js @@ -0,0 +1,27 @@ +function switchHomeLayout() { + const pageDiv = document.getElementById("page"); + const profileDiv = document.getElementById("profile"); + const layoutCode = document.querySelectorAll("code[id=layout]"); + if (pageDiv.style.display === "none") { + pageDiv.style.display = "block"; + profileDiv.style.display = "none"; + layoutCode.forEach(function (el) { + el.innerText = "page"; + }); + } else { + pageDiv.style.display = "none"; + profileDiv.style.display = "block"; + layoutCode.forEach(function (el) { + el.innerText = "profile"; + }); + } +} + +window.addEventListener("DOMContentLoaded", (event) => { + document.querySelectorAll("#switch-layout-button").forEach((button) => + button.addEventListener("click", function (e) { + e.preventDefault(); + switchHomeLayout(); + }) + ); +}); diff --git a/themes/congo/exampleSite/config/_default/hugo.toml b/themes/congo/exampleSite/config/_default/hugo.toml new file mode 100644 index 0000000..b774f07 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/hugo.toml @@ -0,0 +1,27 @@ +# -- Site Configuration -- +# Refer to the theme docs for more details about each of these parameters. +# https://jpanther.github.io/congo/docs/getting-started/ + +theme = "congo" +defaultContentLanguage = "en" + +enableRobotsTXT = true +summaryLength = 0 + +[pagination] + pagerSize = 15 + +[outputs] + home = ["HTML", "RSS", "JSON"] + +[privacy] + [privacy.vimeo] + enableDNT = true + [privacy.x] + enableDNT = true + [privacy.youTube] + privacyEnhanced = true + +[services] + [services.x] + disableInlineCSS = true diff --git a/themes/congo/exampleSite/config/_default/languages.de.toml b/themes/congo/exampleSite/config/_default/languages.de.toml new file mode 100644 index 0000000..ad8beb2 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/languages.de.toml @@ -0,0 +1,25 @@ +languageCode = "de-DE" +languageName = "Deutsch (Deutschland)" +languageDirection = "ltr" +weight = 4 + +title = "Congo" +copyright = "© 2024 Congo contributors" + +[params] + dateFormat = "2. January 2006" + + mainSections = ["samples"] + description = "Ein leistungsstarkes, leichtgewichtiges Theme fรผr Hugo, das mit Tailwind CSS erstellt wurde." + +[params.author] + name = "Congo" + image = "img/author.jpg" + headline = "Nicht dein Durschnitts-Theme!" + bio = "Dies ist ein Beispiel fรผr eine Autorenbiografie, und obwohl hier ein Stockfoto eines Hundes zu sehen ist, wurde dieser Artikel tatsรคchlich von einem Menschen verfasst. :dog:" + links = [ + { x-twitter = "https://twitter.com/" }, + { facebook = "https://facebook.com/" }, + { linkedin = "https://linkedin.com/" }, + { youtube = "https://youtube.com/" }, + ] diff --git a/themes/congo/exampleSite/config/_default/languages.en.toml b/themes/congo/exampleSite/config/_default/languages.en.toml new file mode 100644 index 0000000..4ea8a26 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/languages.en.toml @@ -0,0 +1,25 @@ +languageCode = "en-AU" +languageName = "English (Australia)" +languageDirection = "ltr" +weight = 1 + +title = "Congo" +copyright = "© 2024 Congo contributors" + +[params] + dateFormat = "2 January 2006" + + mainSections = ["samples"] + description = "A powerful, lightweight theme for Hugo built with Tailwind CSS." + +[params.author] + name = "Congo" + image = "img/author.jpg" + headline = "Not your ordinary theme!" + bio = "This is an example author bio, and although there's a stock photo of a dog here, this article was actually created by a human. :dog:" + links = [ + { x-twitter = "https://twitter.com/" }, + { facebook = "https://facebook.com/" }, + { linkedin = "https://linkedin.com/" }, + { youtube = "https://youtube.com/" }, + ] diff --git a/themes/congo/exampleSite/config/_default/languages.es.toml b/themes/congo/exampleSite/config/_default/languages.es.toml new file mode 100644 index 0000000..822f4b2 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/languages.es.toml @@ -0,0 +1,25 @@ +languageCode = "es-MX" +languageName = "Espaรฑol (Mรฉxico)" +languageDirection = "ltr" +weight = 2 + +title = "Congo" +copyright = "© 2024 Congo contributors" + +[params] + dateFormat = "2 January 2006" + + mainSections = ["samples"] + description = "Un tema poderoso y liviano para Hugo creado con Tailwind CSS." + +[params.author] + name = "Congo" + image = "img/author.jpg" + headline = "ยกNo es tu tema ordinario!" + bio = "Esta es una biografรญa de autor de ejemplo, y aunque aquรญ hay una foto de un perro, este artรญculo en realidad fue creado por un ser humano. :dog:" + links = [ + { x-twitter = "https://twitter.com/" }, + { facebook = "https://facebook.com/" }, + { linkedin = "https://linkedin.com/" }, + { youtube = "https://youtube.com/" }, + ] diff --git a/themes/congo/exampleSite/config/_default/languages.ja.toml b/themes/congo/exampleSite/config/_default/languages.ja.toml new file mode 100644 index 0000000..4d17701 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/languages.ja.toml @@ -0,0 +1,25 @@ +languageCode = "ja" +languageName = "ๆ—ฅๆœฌ่ชž" +languageDirection = "ltr" +weight = 2 + +title = "Congo" +copyright = "© 2024 Congo contributors" + +[params] + dateFormat = "2006ๅนด1ๆœˆ2ๆ—ฅ" + + mainSections = ["samples"] + description = "Tailwind CSSใ‚’ใƒ™ใƒผใ‚นใซ้–‹็™บใ•ใ‚ŒใŸๅผทๅŠ›ใง่ปฝ้‡ใชHugoๅ‘ใ‘ใƒ†ใƒผใƒž" + +[params.author] + name = "Congo" + image = "img/author.jpg" + headline = "ใŸใ ใชใ‚‰ใฌใƒ†ใƒผใƒž!" + bio = "ใ“ใ‚Œใฏ่‘—่€…ใฎ็ตŒๆญดใฎไพ‹ใงใ€ใ“ใ“ใซใฏ็Šฌใฎ็”ปๅƒใŒใ‚ใ‚‹ใŒใ€ๅฎŸ้š›ใซใฏไบบ้–“ใŒไฝœๆˆใ—ใŸใ‚‚ใฎใงใ‚ใ‚‹ใ€‚ :dog:" + links = [ + { x-twitter = "https://twitter.com/" }, + { facebook = "https://facebook.com/" }, + { linkedin = "https://linkedin.com/" }, + { youtube = "https://youtube.com/" }, + ] diff --git a/themes/congo/exampleSite/config/_default/languages.zh-Hans.toml b/themes/congo/exampleSite/config/_default/languages.zh-Hans.toml new file mode 100644 index 0000000..1759367 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/languages.zh-Hans.toml @@ -0,0 +1,25 @@ +languageCode = "zh-Hans" +languageName = "็ฎ€ไฝ“ไธญๆ–‡" +languageDirection = "ltr" +weight = 2 + +title = "Congo" +copyright = "© 2024 Congo contributors" + +[params] + dateFormat = "2006ๅนด1ๆœˆ2ๆ—ฅ" + + mainSections = ["samples"] + description = "ไธ€ๆฌพๅŸบไบŽTailwindcss็š„ๅผบๅคงไธ”่ฝป้‡็š„Hugoไธป้ข˜" + +[params.author] + name = "Congo" + image = "img/author.jpg" + headline = "้žๅ‡ก็š„ไธป้ข˜๏ผ" + bio = "่ฟ™ๆ˜ฏไธ€ไธชไฝœ่€…็ฎ€ไป‹็คบไพ‹๏ผŒ่™ฝ็„ถ่ฟ™้‡Œๆœ‰ไธ€ๅผ ็‹—็š„ๅบ“ๅญ˜็…ง็‰‡๏ผŒไฝ†ๅฎž้™…ไธŠ่ฟ™็ฏ‡ๆ–‡็ซ ๆ˜ฏ็”ฑไบบๅˆ›ๅปบ็š„ใ€‚ :dog:" + links = [ + { x-twitter = "https://twitter.com/" }, + { facebook = "https://facebook.com/" }, + { linkedin = "https://linkedin.com/" }, + { youtube = "https://youtube.com/" }, + ] diff --git a/themes/congo/exampleSite/config/_default/markup.toml b/themes/congo/exampleSite/config/_default/markup.toml new file mode 100644 index 0000000..0049e80 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/markup.toml @@ -0,0 +1,19 @@ +# -- Markup -- +# These settings are required for the theme to function. + +[goldmark] +[goldmark.renderer] + unsafe = true +[goldmark.extensions] +[goldmark.extensions.passthrough] + enable = true +[goldmark.extensions.passthrough.delimiters] + block = [['\[', '\]'], ['$$', '$$']] + inline = [['\(', '\)']] + +[highlight] + noClasses = false + +[tableOfContents] + startLevel = 2 + endLevel = 3 diff --git a/themes/congo/exampleSite/config/_default/menus.de.toml b/themes/congo/exampleSite/config/_default/menus.de.toml new file mode 100644 index 0000000..cbacbed --- /dev/null +++ b/themes/congo/exampleSite/config/_default/menus.de.toml @@ -0,0 +1,56 @@ +# -- Main Menu -- +# The main menu is displayed in the header at the top of the page. +# Acceptable parameters are name, pageRef, page, url, title, weight. +# +# The simplest menu configuration is to provide: +# name = The name to be displayed for this menu link +# pageRef = The identifier of the page or section to link to +# +# By default the menu is ordered alphabetically. This can be +# overridden by providing a weight value. The menu will then be +# ordered by weight from lowest to highest. + +[[main]] + name = "Dokumentation" + pageRef = "docs" + weight = 10 + +[[main]] + name = "Beispiele" + pageRef = "samples" + weight = 20 + +[[main]] + name = "Genutzt von" + pageRef = "users" + weight = 30 + +[[main]] + name = "GitHub" + url = "https://github.com/jpanther/congo" + weight = 40 + [main.params] + icon = "github" + showName = false + target = "_blank" + +[[main]] + identifier = "search" + weight = 99 + [main.params] + action = "search" + +[[main]] + identifier = "locale" + weight = 100 + [main.params] + action = "locale" + +# -- Footer Menu -- +# The footer menu is displayed at the bottom of the page, just before +# the copyright notice. Configure as per the main menu above. + +# [[footer]] +# name = "Tags" +# pageRef = "tags" +# weight = 10 diff --git a/themes/congo/exampleSite/config/_default/menus.en.toml b/themes/congo/exampleSite/config/_default/menus.en.toml new file mode 100644 index 0000000..4fe21c5 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/menus.en.toml @@ -0,0 +1,56 @@ +# -- Main Menu -- +# The main menu is displayed in the header at the top of the page. +# Acceptable parameters are name, pageRef, page, url, title, weight. +# +# The simplest menu configuration is to provide: +# name = The name to be displayed for this menu link +# pageRef = The identifier of the page or section to link to +# +# By default the menu is ordered alphabetically. This can be +# overridden by providing a weight value. The menu will then be +# ordered by weight from lowest to highest. + +[[main]] + name = "Docs" + pageRef = "docs" + weight = 10 + +[[main]] + name = "Samples" + pageRef = "samples" + weight = 20 + +[[main]] + name = "Users" + pageRef = "users" + weight = 30 + +[[main]] + name = "GitHub" + url = "https://github.com/jpanther/congo" + weight = 40 + [main.params] + icon = "github" + showName = false + target = "_blank" + +[[main]] + identifier = "search" + weight = 99 + [main.params] + action = "search" + +[[main]] + identifier = "locale" + weight = 100 + [main.params] + action = "locale" + +# -- Footer Menu -- +# The footer menu is displayed at the bottom of the page, just before +# the copyright notice. Configure as per the main menu above. + +# [[footer]] +# name = "Tags" +# pageRef = "tags" +# weight = 10 diff --git a/themes/congo/exampleSite/config/_default/menus.es.toml b/themes/congo/exampleSite/config/_default/menus.es.toml new file mode 100644 index 0000000..2f24319 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/menus.es.toml @@ -0,0 +1,56 @@ +# -- Main Menu -- +# The main menu is displayed in the header at the top of the page. +# Acceptable parameters are name, pageRef, page, url, title, weight. +# +# The simplest menu configuration is to provide: +# name = The name to be displayed for this menu link +# pageRef = The identifier of the page or section to link to +# +# By default the menu is ordered alphabetically. This can be +# overridden by providing a weight value. The menu will then be +# ordered by weight from lowest to highest. + +[[main]] + name = "Docs" + url = "/docs" + weight = 10 + +[[main]] + name = "Ejemplos" + pageRef = "samples" + weight = 20 + +[[main]] + name = "Usuarios" + pageRef = "users" + weight = 30 + +[[main]] + name = "GitHub" + url = "https://github.com/jpanther/congo" + weight = 40 + [main.params] + icon = "github" + showName = false + target = "_blank" + +[[main]] + identifier = "search" + weight = 99 + [main.params] + action = "search" + +[[main]] + identifier = "locale" + weight = 100 + [main.params] + action = "locale" + +# -- Footer Menu -- +# The footer menu is displayed at the bottom of the page, just before +# the copyright notice. Configure as per the main menu above. + +# [[footer]] +# name = "Tags" +# pageRef = "tags" +# weight = 10 diff --git a/themes/congo/exampleSite/config/_default/menus.ja.toml b/themes/congo/exampleSite/config/_default/menus.ja.toml new file mode 100644 index 0000000..74b4237 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/menus.ja.toml @@ -0,0 +1,56 @@ +# -- Main Menu -- +# The main menu is displayed in the header at the top of the page. +# Acceptable parameters are name, pageRef, page, url, title, weight. +# +# The simplest menu configuration is to provide: +# name = The name to be displayed for this menu link +# pageRef = The identifier of the page or section to link to +# +# By default the menu is ordered alphabetically. This can be +# overridden by providing a weight value. The menu will then be +# ordered by weight from lowest to highest. + +[[main]] + name = "ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ" + pageRef = "docs" + weight = 10 + +[[main]] + name = "ใ‚ตใƒณใƒ—ใƒซ" + pageRef = "samples" + weight = 20 + +[[main]] + name = "ๅˆฉ็”จไพ‹" + pageRef = "users" + weight = 30 + +[[main]] + name = "GitHub" + url = "https://github.com/jpanther/congo" + weight = 40 + [main.params] + icon = "github" + showName = false + target = "_blank" + +[[main]] + identifier = "ๆคœ็ดข" + weight = 99 + [main.params] + action = "search" + +[[main]] + identifier = "locale" + weight = 100 + [main.params] + action = "locale" + +# -- Footer Menu -- +# The footer menu is displayed at the bottom of the page, just before +# the copyright notice. Configure as per the main menu above. + +# [[footer]] +# name = "Tags" +# pageRef = "tags" +# weight = 10 diff --git a/themes/congo/exampleSite/config/_default/menus.zh-Hans.toml b/themes/congo/exampleSite/config/_default/menus.zh-Hans.toml new file mode 100644 index 0000000..9b58585 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/menus.zh-Hans.toml @@ -0,0 +1,56 @@ +# -- Main Menu -- +# The main menu is displayed in the header at the top of the page. +# Acceptable parameters are name, pageRef, page, url, title, weight. +# +# The simplest menu configuration is to provide: +# name = The name to be displayed for this menu link +# pageRef = The identifier of the page or section to link to +# +# By default the menu is ordered alphabetically. This can be +# overridden by providing a weight value. The menu will then be +# ordered by weight from lowest to highest. + +[[main]] + name = "ๆ–‡ๆกฃ" + pageRef = "docs" + weight = 10 + +[[main]] + name = "็คบไพ‹" + pageRef = "samples" + weight = 20 + +[[main]] + name = "็”จๆˆท" + pageRef = "users" + weight = 30 + +[[main]] + name = "GitHub" + url = "https://github.com/jpanther/congo" + weight = 40 + [main.params] + icon = "github" + showName = false + target = "_blank" + +[[main]] + identifier = "ๆœ็ดข" + weight = 99 + [main.params] + action = "search" + +[[main]] + identifier = "่ฏญ่จ€" + weight = 100 + [main.params] + action = "locale" + +# -- Footer Menu -- +# The footer menu is displayed at the bottom of the page, just before +# the copyright notice. Configure as per the main menu above. + +# [[footer]] +# name = "ๆ ‡็ญพ" +# pageRef = "tags" +# weight = 10 diff --git a/themes/congo/exampleSite/config/_default/module.toml b/themes/congo/exampleSite/config/_default/module.toml new file mode 100644 index 0000000..e90665b --- /dev/null +++ b/themes/congo/exampleSite/config/_default/module.toml @@ -0,0 +1,3 @@ +[hugoVersion] + extended = true + min = "0.87.0" diff --git a/themes/congo/exampleSite/config/_default/params.toml b/themes/congo/exampleSite/config/_default/params.toml new file mode 100644 index 0000000..ef70ee2 --- /dev/null +++ b/themes/congo/exampleSite/config/_default/params.toml @@ -0,0 +1,82 @@ +# -- Theme Options -- +# These options control how the theme functions and allow you to +# customise the display of your website. +# +# Refer to the theme docs for more details about each of these parameters. +# https://jpanther.github.io/congo/docs/configuration/#theme-parameters + +colorScheme = "congo" +defaultAppearance = "light" # valid options: light or dark +autoSwitchAppearance = true + +enableSearch = true +enableCodeCopy = true +enableImageLazyLoading = true +enableImageWebp = true +enableQuicklink = true + +# robots = "" +fingerprintAlgorithm = "sha256" + +[header] + layout = "basic" # valid options: basic, hamburger, hybrid, custom + # logo = "img/logo.jpg" + # logoDark = "img/logo-dark.jpg" + showTitle = true + +[footer] + showCopyright = true + showThemeAttribution = true + showAppearanceSwitcher = true + showScrollToTop = true + +[homepage] + layout = "custom" # valid options: page, profile, custom + showRecent = true + recentLimit = 5 + +[article] + showDate = true + showDateUpdated = false + showAuthor = true + showBreadcrumbs = true + showDraftLabel = true + showEdit = true + editURL = "https://github.com/jpanther/congo/tree/dev/exampleSite/content/" + editAppendPath = true + showHeadingAnchors = true + showPagination = true + invertPagination = false + showReadingTime = true + showTableOfContents = true + showTaxonomies = false + showWordCount = false + showComments = false + # sharingLinks = ["facebook", "x-twitter", "mastodon", "pinterest", "reddit", "linkedin", "email", "threads", "telegram", "line", "weibo", "xing", "bluesky"] + +[list] + showBreadcrumbs = true + showSummary = false + showTableOfContents = true + showTaxonomies = false + groupByYear = false + paginationWidth = 1 + +[sitemap] + excludedKinds = ["taxonomy", "term"] + +[taxonomy] + showTermCount = true + +[fathomAnalytics] + # site = "ABC12345" + +#[umamiAnalytics] +# site = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +# region = "eu" # Can be either "eu" or "us" + +[verification] + # google = "" + # bing = "" + # pinterest = "" + # yandex = "" diff --git a/themes/congo/exampleSite/config/_default/taxonomies.toml b/themes/congo/exampleSite/config/_default/taxonomies.toml new file mode 100644 index 0000000..193dc4b --- /dev/null +++ b/themes/congo/exampleSite/config/_default/taxonomies.toml @@ -0,0 +1 @@ +tag = "tags" diff --git a/themes/congo/exampleSite/content/_index.de.md b/themes/congo/exampleSite/content/_index.de.md new file mode 100644 index 0000000..8f4fedb --- /dev/null +++ b/themes/congo/exampleSite/content/_index.de.md @@ -0,0 +1,29 @@ +--- +title: "Willkommen bei Congo! :tada:" +description: "Dies ist eine Demo des Congo-Themes fรผr Hugo." +--- + +{{< lead >}} +Ein mรคchtiges und gleichzeitig leichtes Theme fรผr Hugo, das mit Tailwind CSS erstellt wurde. +{{< /lead >}} + +Dies ist eine Demo-Site, die vollstรคndig mit Congo erstellt wurde. Sie enthรคlt auch eine vollstรคndige [Theme-Dokumentation]({{< ref path="docs" lang="en" >}}). Congo ist flexibel und eignet sich sowohl fรผr statische seitenbasierte Inhalte (wie diese Demo) als auch fรผr einen traditionellen Blog mit einem Feed der letzten Beitrรคge. + +
    + + {{< icon "triangle-exclamation" >}} + + + Dies ist eine Demo des page-Layouts. + + +
    + +{{< figure src="festivities.svg" class="m-auto mt-6 max-w-prose" >}} + +Schau dir die [Beispielseiten]({{< ref "samples" >}}) an, um ein Gefรผhl fรผr die Mรถglichkeiten von Congo zu bekommen. Wenn dir gefรคllt, was du siehst, dann schau dir sich das Projekt auf [Github](https://github.com/jpanther/congo) an oder lies die [Installationsanleitung]({{< ref path="docs/installation" lang="en">}}), um loszulegen. diff --git a/themes/congo/exampleSite/content/_index.es.md b/themes/congo/exampleSite/content/_index.es.md new file mode 100644 index 0000000..4d4584c --- /dev/null +++ b/themes/congo/exampleSite/content/_index.es.md @@ -0,0 +1,29 @@ +--- +title: "ยกBienvenido a Congo! :tada:" +description: "Esta es una demostraciรณn del tema Congo para Hugo." +--- + +{{< lead >}} +Un tema poderoso y liviano para Hugo creado con Tailwind CSS. +{{< /lead >}} + +Este es un sitio de demostraciรณn creado completamente con Congo. Tambiรฉn contiene un conjunto completo de artรญculos con [documentaciรณn del tema]({{< ref path="docs" lang="en" >}}). Congo es flexible y es excelente tanto para contenido estรกtico basado en pรกginas (como es el caso de esta demostraciรณn) como para un blog tradicional con un feed de publicaciones recientes. + +
    + + {{< icon "triangle-exclamation" >}} + + + Esta es la demostraciรณn en formato page + + +
    + +{{< figure src="festivities.svg" class="m-auto mt-6 max-w-prose" >}} + +Explora las [pรกginas de ejemplo]({{< ref "samples" >}}) para tener una idea de lo que Congo puede hacer. Si te gusta lo que ves, consulta el proyecto en [Github](https://github.com/jpanther/congo) o lee la [Guรญa de instalaciรณn]({{< ref path="docs/installation" lang="en" >}}) para comenzar. diff --git a/themes/congo/exampleSite/content/_index.ja.md b/themes/congo/exampleSite/content/_index.ja.md new file mode 100644 index 0000000..9919924 --- /dev/null +++ b/themes/congo/exampleSite/content/_index.ja.md @@ -0,0 +1,31 @@ +--- +title: "Congoใธใ‚ˆใ†ใ“ใ! :tada:" +description: "ใ“ใ‚ŒใฏHugoๅ‘ใ‘ใƒ†ใƒผใƒžใ€Congoใฎใƒ‡ใƒขใงใ™" +--- + +{{< lead >}} +Tailwind CSSใ‚’ใƒ™ใƒผใ‚นใซ้–‹็™บใ•ใ‚ŒใŸๅผทๅŠ›ใง่ปฝ้‡ใชHugoๅ‘ใ‘ใƒ†ใƒผใƒžใ€‚ +{{< /lead >}} + +ใ“ใ‚ŒใฏCongoใ‚’ไฝฟใฃใฆๆง‹็ฏ‰ใ•ใ‚ŒใŸใƒ‡ใƒขใ‚ตใ‚คใƒˆใงใ™ใ€‚ +[Congoใซ้–ขใ™ใ‚‹ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ]({{< ref "docs" >}})ใ‚‚ๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ +CongoใฏๆŸ”่ปŸๆ€งใซๅฏŒใฟใ€้™็š„ใชใ‚ณใƒณใƒ†ใƒณใƒ„้…ไฟกใซใ‚‚ใ€ๆŠ•็จฟใƒ•ใ‚ฃใƒผใƒ‰ๆฉŸ่ƒฝใ‚’ๆŒใคใ‚ˆใ†ใชBlogใซใ‚‚้ฉใ—ใฆใ„ใพใ™ใ€‚ + +
    + + {{< icon "triangle-exclamation" >}} + + + ใ“ใ‚Œใฏpageใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎใƒ‡ใƒขใงใ™ใ€‚ + + +
    + +{{< figure src="festivities.svg" class="m-auto mt-6 max-w-prose" >}} + +[ไพ‹]({{< ref "samples" >}})ใ‚’่ฆ‹ใฆใ€CongoใฎๅฎŸๅŠ›ใ‚’ๅฎŸๆ„Ÿใ—ใฆใใ ใ•ใ„ใ€‚ๆฐ—ใซๅ…ฅใฃใŸใ‚‰[GitHub](https://github.com/jpanther/congo)ใ‚’ใƒใ‚งใƒƒใ‚ฏใ™ใ‚‹ใ‹ใ€[ใ‚คใƒณใ‚นใƒˆใƒผใƒซ]({{< ref "docs/installation" >}})ใ‚’่ชญใ‚“ใงๅฎŸ้š›ใซไฝฟใ„ๅง‹ใ‚ใฆใปใ—ใ„ใ€‚ diff --git a/themes/congo/exampleSite/content/_index.md b/themes/congo/exampleSite/content/_index.md new file mode 100644 index 0000000..f1a4ce5 --- /dev/null +++ b/themes/congo/exampleSite/content/_index.md @@ -0,0 +1,29 @@ +--- +title: "Welcome to Congo! :tada:" +description: "This is a demo of the Congo theme for Hugo." +--- + +{{< lead >}} +A powerful, lightweight theme for Hugo built with Tailwind CSS. +{{< /lead >}} + +This is a demo site built entirely using Congo. It also contains a complete set of [theme documentation]({{< ref "docs" >}}). Congo is flexible and is great for both static page-based content (like this demo) or a traditional blog with a feed of recent posts. + +
    + + {{< icon "triangle-exclamation" >}} + + + This is a demo of the page layout. + + +
    + +{{< figure src="festivities.svg" class="m-auto mt-6 max-w-prose" >}} + +Explore the [sample pages]({{< ref "samples" >}}) to get a feel for what Congo can do. If you like what you see, check out the project on [Github](https://github.com/jpanther/congo) or read the [Installation guide]({{< ref "docs/installation" >}}) to get started. diff --git a/themes/congo/exampleSite/content/_index.zh-Hans.md b/themes/congo/exampleSite/content/_index.zh-Hans.md new file mode 100644 index 0000000..35f52bc --- /dev/null +++ b/themes/congo/exampleSite/content/_index.zh-Hans.md @@ -0,0 +1,29 @@ +--- +title: "ๆฌข่ฟŽไฝฟ็”จCongo! :tada:" +description: "่ฟ™ๆ˜ฏไธ€ไธชๅŸบไบŽHugo็š„ไธป้ข˜Congo็คบไพ‹ใ€‚" +--- + +{{< lead >}} +ไธ€ๆฌพๅŸบไบŽTailwindcss็š„ๅผบๅคงไธ”่ฝป้‡Hugoไธป้ข˜ +{{< /lead >}} + +่ฟ™ๆ˜ฏไธ€ไธชๅฎŒๅ…จไฝฟ็”จCongoๆž„ๅปบ็š„ๆผ”็คบ็ซ™็‚นใ€‚ๅฎƒ่ฟ˜ๅŒ…ๅซไธ€ไธชๅฎŒๆ•ด็š„ [ไธป้ข˜ๆ–‡ๆกฃ]({{< ref "docs" >}}) ้›†ใ€‚Congoๆ˜ฏ็ตๆดป็š„๏ผŒ้žๅธธ้€‚ๅˆ้™ๆ€ๅŸบไบŽ้กต้ข็š„ๅ†…ๅฎน๏ผˆๅฐฑๅƒไฝ ็œ‹ๅˆฐ็š„่ฟ™ไธชๆผ”็คบ๏ผ‰ๆˆ–ๅ…ทๆœ‰ๆœ€ๆ–ฐๆ–‡็ซ ็š„ไผ ็ปŸๅšๅฎขใ€‚ + +
    + + {{< icon "triangle-exclamation" >}} + + + ่ฟ™ๆ˜ฏไธ€ไธช page ๅธƒๅฑ€็š„็คบไพ‹. + + +
    + +{{< figure src="festivities.svg" class="m-auto mt-6 max-w-prose" >}} + +ๆŽข็ดข [็คบไพ‹้กต้ข]({{< ref "samples" >}}) ไปฅๆ„Ÿๅ—Congo็š„ๅผบๅคงๅŠŸ่ƒฝใ€‚ๅฆ‚ๆžœไฝ ๅ–œๆฌข่ฏฅไธป้ข˜๏ผŒ่ฏทๅœจ [Github](https://github.com/jpanther/congo) ไธŠๆŸฅ็œ‹่ฏฅ้กน็›ฎ๏ผŒๆˆ–้˜…่ฏป [ๅฎ‰่ฃ…ๆŒ‡ๅ—]({{< ref "docs/installation" >}}) ๅผ€ๅง‹ไฝฟ็”จใ€‚ diff --git a/themes/congo/exampleSite/content/docs/_index.ja.md b/themes/congo/exampleSite/content/docs/_index.ja.md new file mode 100644 index 0000000..d1258ce --- /dev/null +++ b/themes/congo/exampleSite/content/docs/_index.ja.md @@ -0,0 +1,22 @@ +--- +title: "ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ" +description: "Congoใฎ็‰นๅพดใจใใฎไฝฟใ„ๆ–นใซใคใ„ใฆ" + +cascade: + showDate: false + showAuthor: false + showSummary: true + invertPagination: true +--- + +{{< lead >}} +ใ‚ทใƒณใƒ—ใƒซใงใƒ‘ใƒฏใƒ•ใƒซใ€‚Congoใฎไฝฟใ„ๆ–นใจ็‰นๅพดใ‚’ใ”็ดนไป‹ใ—ใพใ™ใ€‚ +{{< /lead >}} + +![Screenshots of Congo on an iPhone, iPad and MacBook](screenshot.png) + +ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใซใฏCongoใฎ็Ÿฅใ‚‹ในใใ™ในใฆใŒๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ใ‚‚ใ—ใ‚ใชใŸใŒCongoใซ่งฆใ‚Œใ‚‹ใฎใŒๅˆใ‚ใฆใชใ‚‰ใฐใ€[ใ‚คใƒณใ‚นใƒˆใƒผใƒซ]({{< ref "docs/installation" >}})ใ‚ฌใ‚คใƒ‰ใ‚’่ชญใ‚€ใ‹ใ€[ไพ‹]({{< ref "samples" >}})ใ‚’่ฆ‹ใฆใ€Congoใฏไฝ•ใŒใงใใ‚‹ใ‹็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ + +_ใ“ใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใซ็ด ๆ™ดใ‚‰ใ—ใ„ใ‚คใƒฉใ‚นใƒˆใ‚’ๆไพ›ใ—ใฆใใ‚ŒใŸ[Katerina Limpitsouni](https://ninalimpi.com)ใซๆ„Ÿ่ฌใ—ใพใ™ใ€‚_ + +--- diff --git a/themes/congo/exampleSite/content/docs/_index.md b/themes/congo/exampleSite/content/docs/_index.md new file mode 100644 index 0000000..e7c2325 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/_index.md @@ -0,0 +1,22 @@ +--- +title: "Documentation" +description: "Learn how to use Congo and its features." + +cascade: + showDate: false + showAuthor: false + showSummary: true + invertPagination: true +--- + +{{< lead >}} +Simple, yet powerful. Learn how to use Congo and its features. +{{< /lead >}} + +![Screenshots of Congo on an iPhone, iPad and MacBook](screenshot.png) + +This section contains everything you need to know about Congo. If you're new, check out the [Installation]({{< ref "docs/installation" >}}) guide to begin or visit the [Samples]({{< ref "samples" >}}) section to see what Congo can do. + +_Special thanks to [Katerina Limpitsouni](https://ninalimpi.com) for the excellent illustrations that are used throughout these docs!_ + +--- diff --git a/themes/congo/exampleSite/content/docs/_index.zh-Hans.md b/themes/congo/exampleSite/content/docs/_index.zh-Hans.md new file mode 100644 index 0000000..a2158e5 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/_index.zh-Hans.md @@ -0,0 +1,22 @@ +--- +title: "ๆ–‡ๆกฃ" +description: "ไบ†่งฃๅฆ‚ไฝ•ไฝฟ็”จCongoๅŠๅ…ถๅŠŸ่ƒฝใ€‚" + +cascade: + showDate: false + showAuthor: false + showSummary: true + invertPagination: true +--- + +{{< lead >}} +็ฎ€ๅ•่€Œๅผบๅคงใ€‚ไบ†่งฃๅฆ‚ไฝ•ไฝฟ็”จCongoๅŠๅ…ถๅŠŸ่ƒฝใ€‚ +{{< /lead >}} + +![Screenshots of Congo on an iPhone, iPad and MacBook](screenshot.png) + +่ฏฅ้ƒจๅˆ†ๅŒ…ๅซๅ…ณไบŽCongo็š„ๆ‰€ๆœ‰ๅฟ…่ฆไฟกๆฏใ€‚ๅฆ‚ๆžœๆ‚จๆ˜ฏๆ–ฐๆ‰‹๏ผŒ่ฏทๆŸฅ็œ‹ [ๅฎ‰่ฃ…]({{< ref "docs/installation" >}}) ๆŒ‡ๅ—ไปฅๅผ€ๅง‹๏ผŒๆˆ–่ฎฟ้—ฎ [็คบไพ‹]({{< ref "samples" >}}) ้ƒจๅˆ†ๆŸฅ็œ‹Congo็š„ๅŠŸ่ƒฝใ€‚ + +็‰นๅˆซๆ„Ÿ่ฐข [Katerina Limpitsouni](https://ninalimpi.com) ไธบ่ฟ™ไบ›ๆ–‡ๆกฃไธญไฝฟ็”จ็š„ๅ‡บ่‰ฒๆ’ๅ›พ๏ผ + +--- diff --git a/themes/congo/exampleSite/content/docs/advanced-customisation/index.ja.md b/themes/congo/exampleSite/content/docs/advanced-customisation/index.ja.md new file mode 100644 index 0000000..8358cae --- /dev/null +++ b/themes/congo/exampleSite/content/docs/advanced-customisation/index.ja.md @@ -0,0 +1,183 @@ +--- +title: "้ซ˜ๅบฆใชใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บ" +date: 2020-08-08 +draft: false +description: "Congoใ‚’ๆ‰‹ๅ‹•ใงๆง‹็ฏ‰ใ™ใ‚‹ๆ–นๆณ•" +summary: "Congoใฏใ€ๅŸบๆœฌ็š„ใชTailwind่จญๅฎšใฎๅค‰ๆ›ดใ€ๆ‰‹ๅ‹•ใงใฎใƒ†ใƒผใƒžๆง‹็ฏ‰ใ€ใ‚ซใ‚นใ‚ฟใƒ CSSใฎๆไพ›ใชใฉใ€้ซ˜ๅบฆใชใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ‚’ใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใพใ™ใ€‚" +slug: "advanced-customisation" +tags: ["advanced", "css", "docs"] +--- + +Congoใซ้ซ˜ๅบฆใชๅค‰ๆ›ดใ‚’ๅŠ ใˆใ‚‹ๆ–นๆณ•ใฏใŸใใ•ใ‚“ใ‚ใ‚Šใพใ™ใ€‚ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใงใใ‚‹ๅ†…ๅฎนใ‚„ใ€ใ”ๅธŒๆœ›ใฎ็ตๆžœใ‚’ๅพ—ใ‚‹ใŸใ‚ใฎๆœ€่‰ฏใฎๆ–นๆณ•ใซใคใ„ใฆใฏใ€ไปฅไธ‹ใ‚’ใŠ่ชญใฟใใ ใ•ใ„ใ€‚ + +ใ•ใ‚‰ใซใ‚ขใƒ‰ใƒใ‚คใ‚นใŒๅฟ…่ฆใชๅ ดๅˆใฏ[GitHub Discussions](https://github.com/jpanther/congo/discussions)ใซ่ณชๅ•ใ‚’ๆŠ•็จฟใ—ใฆใใ ใ•ใ„ใ€‚ + +## Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๆง‹้€  + +ใ“ใ‚Œใ‚‰ใฎไฝœๆฅญใซๅ…ฅใ‚‹ๅ‰ใซใ€[Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๆง‹้€ ](https://gohugo.io/getting-started/directory-structure/)ใจใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚„ใƒ†ใƒผใƒžใ‚’็ฎก็†ใ™ใ‚‹ใŸใ‚ใฎใƒ™ใ‚นใƒˆใƒ—ใƒฉใ‚ฏใƒ†ใ‚ฃใ‚นใซใคใ„ใฆ่ชฌๆ˜Žใ—ใพใ™ใ€‚ + +{{< alert >}} +**่ฆ็ด„:** ใƒ†ใƒผใƒžใƒ•ใ‚กใ‚คใƒซใ‚’็›ดๆŽฅ็ทจ้›†ใ™ใ‚‹ใฎใงใฏใชใใ€Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใงใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ‚’่กŒใชใฃใฆใใ ใ•ใ„ใ€‚ +{{< /alert >}} + +Congoใฏใ€Hugoใฎๆจ™ๆบ–็š„ใชใƒ—ใƒฉใ‚ฏใƒ†ใ‚ฃใ‚นใ‚’ใ™ในใฆๆดป็”จใงใใ‚‹ใ‚ˆใ†ใซไฝœใ‚‰ใ‚Œใฆใ„ใพใ™ใ€‚ใ‚ณใ‚ขใฎใƒ†ใƒผใƒžใƒ•ใ‚กใ‚คใƒซใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ“ใจใชใใ€ใƒ†ใƒผใƒžใฎใ™ในใฆใฎๅด้ขใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ—ใŸใ‚ŠไธŠๆ›ธใใ—ใŸใ‚Šใงใใ‚‹ใ‚ˆใ†ใซ่จญ่จˆใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใƒซใƒƒใ‚ฏ๏ผ†ใƒ•ใ‚ฃใƒผใƒซใ‚’ๅฎŒๅ…จใซใ‚ณใƒณใƒˆใƒญใƒผใƒซใ—ใชใŒใ‚‰ใ€ใ‚ทใƒผใƒ ใƒฌใ‚นใชใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใŒๅฏ่ƒฝใซใชใ‚Šใพใ™ใ€‚ + +ใใฎใŸใ‚ใซใฏใ€ใƒ†ใƒผใƒžใƒ•ใ‚กใ‚คใƒซใ‚’ๆ‰‹ๅ‹•ใง็›ดๆŽฅ่ชฟๆ•ดใ—ใฆใฏใ„ใ‘ใพใ›ใ‚“ใ€‚Hugo ใƒขใ‚ธใƒฅใƒผใƒซใ‚’ไฝฟใฃใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ๅ ดๅˆใงใ‚‚ใ€git ใ‚ตใƒ–ใƒขใ‚ธใƒฅใƒผใƒซใจใ—ใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ๅ ดๅˆใงใ‚‚ใ€ๆ‰‹ๅ‹•ใงใƒ†ใƒผใƒžใ‚’ `themes/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚คใƒณใ‚ฏใƒซใƒผใƒ‰ใ™ใ‚‹ๅ ดๅˆใงใ‚‚ใ€ใ“ใ‚Œใ‚‰ใฎใƒ•ใ‚กใ‚คใƒซใฏๅธธใซใใฎใพใพใซใ—ใฆใŠใในใใงใ™ใ€‚ + +ใƒ†ใƒผใƒžใฎๅ‹•ไฝœใ‚’่ชฟๆ•ดใ™ใ‚‹ๆญฃใ—ใ„ๆ–นๆณ•ใฏใ€HugoใฎๅผทๅŠ›ใช[file lookup order](https://gohugo.io/templates/lookup-order/)ใ‚’ไฝฟใฃใฆใƒ•ใ‚กใ‚คใƒซใ‚’ไธŠๆ›ธใใ™ใ‚‹ใ“ใจใงใ™ใ€‚ใใ†ใ™ใ‚‹ใ“ใจใงใ€ใ‚ใชใŸใŒใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚คใƒณใ‚ฏใƒซใƒผใƒ‰ใ—ใŸใƒ•ใ‚กใ‚คใƒซใŒ่‡ชๅ‹•็š„ใซใƒ†ใƒผใƒžใƒ•ใ‚กใ‚คใƒซใ‚ˆใ‚Šใ‚‚ๅ„ชๅ…ˆใ•ใ‚Œใ‚‹ใ“ใจใ‚’ไฟ่จผใ—ใพใ™ใ€‚ + +ไพ‹ใˆใฐใ€Congoใฎใƒกใ‚คใƒณ่จ˜ไบ‹ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’ใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใ—ใŸใ„ๅ ดๅˆใ€็‹ฌ่‡ชใฎ `layouts/_default/single.html` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒซใƒผใƒˆใซ็ฝฎใใ ใ‘ใงใ™ใ€‚ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฏใƒ†ใƒผใƒžใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ“ใจใชใใ€ใƒ†ใƒผใƒžใฎ `single.html` ใ‚’ไธŠๆ›ธใใ—ใพใ™ใ€‚ใ“ใ‚Œใฏใ€HTMLใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ€ใƒ‘ใƒผใ‚ทใƒฃใƒซใ€ใ‚ทใƒงใƒผใƒˆใ‚ณใƒผใƒ‰ใ€่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ€ใƒ‡ใƒผใ‚ฟใ€ใ‚ขใ‚ปใƒƒใƒˆใชใฉใ€ใฉใ‚“ใชใƒ†ใƒผใƒžใƒ•ใ‚กใ‚คใƒซใซใ‚‚ไฝฟใˆใพใ™ใ€‚ + +ใ“ใฎใ‚ทใƒณใƒ—ใƒซใชๆ…ฃ็ฟ’ใซๅพ“ใ†้™ใ‚Šใ€ใ‚ใชใŸใฎใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ‚’ๅคฑใ†ใ“ใจใชใใ€ๅธธใซใƒ†ใƒผใƒžใ‚’ใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆ๏ผˆใพใŸใฏ็•ฐใชใ‚‹ใƒ†ใƒผใƒžใฎใƒใƒผใ‚ธใƒงใƒณใ‚’ใƒ†ใ‚นใƒˆ๏ผ‰ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +## ใ‚ซใƒฉใƒผใ‚นใ‚ญใƒผใƒ  + +Congoใซใฏใ„ใใคใ‹ใฎใ‚ซใƒฉใƒผใ‚นใ‚ญใƒผใƒ ใŒๅŒๆขฑใ•ใ‚Œใฆใ„ใพใ™ใ€‚้…่‰ฒใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใซใฏใ€ `colorScheme` ใƒ†ใƒผใƒžใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’่จญๅฎšใ—ใพใ™ใ€‚็ต„ใฟ่พผใฟใฎ้…่‰ฒใซใคใ„ใฆ่ฉณใ—ใใฏ[ใฏใ˜ใ‚ใซ]({{< ref "getting-started" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚ + +ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎ้…่‰ฒใซๅŠ ใˆใฆใ€็‹ฌ่‡ชใฎใ‚นใ‚ญใƒผใƒ ใ‚’ไฝœๆˆใ—ใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆๅ…จไฝ“ใ‚’ๅฅฝใฟใฎใ‚นใ‚ฟใ‚คใƒซใซๅค‰ๆ›ดใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ใ‚นใ‚ญใƒผใƒ ใฏ `assets/css/schemes/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ `.css` ใƒ•ใ‚กใ‚คใƒซใ‚’็ฝฎใใ“ใจใงไฝœๆˆใงใใพใ™ใ€‚ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใŸใ‚‰ใ€ใƒ†ใƒผใƒž่จญๅฎšใฎไธญใงใใฎๅๅ‰ใ‚’ๅ‚็…งใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +Congoใฏ3่‰ฒใฎใƒ‘ใƒฌใƒƒใƒˆใ‚’ๅฎš็พฉใ—ใฆใƒ†ใƒผใƒžๅ…จไฝ“ใซไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ใ“ใฎ3่‰ฒใฏใ€Œใƒ‹ใƒฅใƒผใƒˆใƒฉใƒซใ€ใ€ใ€Œใƒ—ใƒฉใ‚คใƒžใƒชใƒผใ€ใ€ใ€Œใ‚ปใ‚ซใƒณใƒ€ใƒชใƒผใ€ใจใ—ใฆๅฎš็พฉใ•ใ‚Œใ€ใใ‚Œใžใ‚Œ10่‰ฒใฎๆฟƒๆทกใŒใ‚ใ‚Šใพใ™ใ€‚ + +Tailwind CSS 3.0ใŒไธ้€ๆ˜Žๅบฆใ‚’็”จใ„ใฆใ‚ซใƒฉใƒผๅ€คใ‚’่จˆ็ฎ—ใ™ใ‚‹ใŸใ‚ใ€ไฝฟ็”จใ™ใ‚‹ใ‚ซใƒฉใƒผใฏ[็‰นๅฎšใฎใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใซๆบ–ๆ‹ ](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo)ใ—ใฆๆŒ‡ๅฎšใ™ใ‚‹ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + +```css +:root { + --color-primary-500: 139, 92, 246; +} +``` + +ใ“ใฎไพ‹ใงใฏใ€ `primary-500` ใ‚’CSSๅค‰ๆ•ฐใจใ—ใฆ `Red: 139, Green: 92, Blue: 246` ใซๅฎš็พฉใ—ใฆใ„ใพใ™ใ€‚ + +ๆ—ขๅญ˜ใฎใƒ†ใƒผใƒžใ‚นใ‚ฟใ‚คใƒซใ‚ทใƒผใƒˆใฎใ„ใšใ‚Œใ‹ใ‚’ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใจใ—ใฆไฝฟ็”จใ—ใฆใใ ใ•ใ„ใ€‚็‹ฌ่‡ชใฎ่‰ฒใ‚’ๅฎš็พฉใ™ใ‚‹ใฎใฏ่‡ช็”ฑใงใ™ใŒใ€ใ‚คใƒณใ‚นใƒ”ใƒฌใƒผใ‚ทใƒงใƒณใ‚’ๅพ—ใ‚‹ใŸใ‚ใซใ€ๅ…ฌๅผใฎ[Tailwind color palette reference](https://tailwindcss.com/docs/customizing-colors#color-palette-reference)ใ‚‚ใƒใ‚งใƒƒใ‚ฏใ—ใฆใฟใฆใใ ใ•ใ„ใ€‚ + +## ใ‚นใ‚ฟใ‚คใƒซใฎใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ + +็‹ฌ่‡ชใฎHTML่ฆ็ด ใซใ‚นใ‚ฟใ‚คใƒซใ‚’่จญๅฎšใ™ใ‚‹ใŸใ‚ใซใ€ใ‚ซใ‚นใ‚ฟใƒ ใ‚นใ‚ฟใ‚คใƒซใ‚’่ฟฝๅŠ ใ™ใ‚‹ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚Congoใงใฏใ€็‹ฌ่‡ชใฎCSSใ‚นใ‚ฟใ‚คใƒซใ‚ทใƒผใƒˆใงใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใ‚นใ‚ฟใ‚คใƒซใ‚’ใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎ `assets/css/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ `custom.css` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +`custom.css` ใƒ•ใ‚กใ‚คใƒซใฏHugoใซใ‚ˆใฃใฆminifyใ•ใ‚Œใ€ไป–ใฎใƒ†ใƒผใƒžใ‚นใ‚ฟใ‚คใƒซใฎๅพŒใซ่‡ชๅ‹•็š„ใซ่ชญใฟ่พผใพใ‚Œใพใ™ใ€‚ + +### ใƒ•ใ‚ฉใƒณใƒˆใ‚ตใ‚คใ‚บใฎๅค‰ๆ›ด + +`custom.css` ใ‚’็”จใ„ใฆใƒ•ใ‚ฉใƒณใƒˆใ‚ตใ‚คใ‚บใ‚’ใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใ™ใ‚‹ไพ‹ใงใ™ใ€‚Congoใงใฏใ€ใƒ™ใƒผใ‚นใจใชใ‚‹HTMLใƒ•ใ‚ฉใƒณใƒˆใ‚ตใ‚คใ‚บใซ็”ฑๆฅใ™ใ‚‹ใƒ•ใ‚ฉใƒณใƒˆใ‚ตใ‚คใ‚บใ‚’ใƒ†ใƒผใƒžๅ…จไฝ“ใงไฝฟ็”จใ™ใ‚‹ใŸใ‚ใ€ใƒ•ใ‚ฉใƒณใƒˆใ‚ตใ‚คใ‚บใฎๅค‰ๆ›ดใฏ็ฐกๅ˜ใงใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€Tailwindใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใ‚ตใ‚คใ‚บใ‚’`12pt`ใซ่จญๅฎšใ—ใฆใ„ใพใ™ใŒใ€ใŠๅฅฝใใชๅ€คใซๅค‰ๆ›ดใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +`assets/css/custom.css` ใ‚’็”จๆ„ใ—ใฆไธ‹่จ˜ใฎใ‚ˆใ†ใซ่จ˜่ฟฐใ—ใฆใใ ใ•ใ„: + +```css +/* Increase the default font size */ +html { + font-size: 13pt; +} +``` + +ใ“ใฎ1ใคใฎๅ€คใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ ใ‘ใงใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆไธŠใฎใ™ในใฆใฎใƒ•ใ‚ฉใƒณใƒˆใ‚ตใ‚คใ‚บใŒๆ–ฐใ—ใ„ใ‚ตใ‚คใ‚บใซๅˆใ‚ใ›ใฆ่ชฟๆ•ดใ•ใ‚Œใพใ™ใ€‚ใ—ใŸใŒใฃใฆใ€ๅ…จไฝ“ใฎใƒ•ใ‚ฉใƒณใƒˆใ‚ตใ‚คใ‚บใ‚’ๅคงใใใ™ใ‚‹ใซใฏใ€ๅ€คใ‚’ `12pt` ใ‚ˆใ‚Šๅคงใใใ—ใพใ™ใ€‚ๅŒๆง˜ใซใ€ใƒ•ใ‚ฉใƒณใƒˆใ‚ตใ‚คใ‚บใ‚’ๅฐใ•ใใ™ใ‚‹ใซใฏใ€ๅ€คใ‚’ `12pt` ใ‚ˆใ‚Šๅฐใ•ใใ—ใพใ™ใ€‚ + +## ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใ‹ใ‚‰ๅ†ๆง‹็ฏ‰ + +ๅคงใใชๅค‰ๆ›ดใ‚’ๅŠ ใˆใŸใ„ๅ ดๅˆใฏใ€Tailwind CSSใฎJITใ‚ณใƒณใƒ‘ใ‚คใƒฉใ‚’ๅˆฉ็”จใ—ใ€ใƒ†ใƒผใƒžCSSๅ…จไฝ“ใ‚’ใ‚ผใƒญใ‹ใ‚‰ๅ†ๆง‹็ฏ‰ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ“ใ‚Œใฏใ€Tailwindใฎ่จญๅฎšใ‚’่ชฟๆ•ดใ—ใŸใ‚Šใ€ใƒกใ‚คใƒณใฎใ‚นใ‚ฟใ‚คใƒซใ‚ทใƒผใƒˆใซ่ฟฝๅŠ ใฎTailwindใ‚ฏใƒฉใ‚นใ‚’่ฟฝๅŠ ใ—ใŸใ„ๅ ดๅˆใซไพฟๅˆฉใงใ™ใ€‚ + +{{< alert >}} +**ๆณจ่จ˜:** ๆ‰‹ๅ‹•ใงใƒ†ใƒผใƒžใ‚’ๅ†ๆง‹็ฏ‰ใ™ใ‚‹ใฎใฏไธŠ็ดš่€…ๅ‘ใ‘ใงใ™ใ€‚ +{{< /alert >}} + +ใใ‚Œใงใฏใ€Tailwind CSSใฎๆง‹็ฏ‰ๆ–นๆณ•ใ‚’้ †ใ‚’่ฟฝใฃใฆ่ชฌๆ˜Žใ—ใพใ—ใ‚‡ใ†ใ€‚ + +### Tailwindใฎ่จญๅฎš + +ๅฎŸ้š›ใซไฝฟ็”จใ•ใ‚Œใฆใ„ใ‚‹Tailwindใฎใ‚ฏใƒฉใ‚นใฎใฟใ‚’ๅซใ‚€CSSใƒ•ใ‚กใ‚คใƒซใ‚’็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใซใ€JITใ‚ณใƒณใƒ‘ใ‚คใƒฉใฏใ™ในใฆใฎHTMLใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใจMarkdownใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚นใ‚ญใƒฃใƒณใ—ใฆใ€ใฉใฎใ‚นใ‚ฟใ‚คใƒซใŒๅญ˜ๅœจใ™ใ‚‹ใ‹ใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใพใ™ใ€‚ใ‚ณใƒณใƒ‘ใ‚คใƒฉใฏใ€ใƒ†ใƒผใƒžใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฎใƒซใƒผใƒˆใซๅซใพใ‚Œใ‚‹ `tailwind.config.js` ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ‚็…งใ—ใพใ™: + +```js +// themes/congo/tailwind.config.js + +module.exports = { + content: [ + "./layouts/**/*.html", + "./content/**/*.{html,md}", + "./themes/congo/layouts/**/*.html", + "./themes/congo/content/**/*.{html,md}", + ], + + // and more... +}; +``` + +ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€็‰นๅฎšใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๆง‹้€ ใซๅพ“ใฃใฆใ„ใ‚Œใฐใ€ไฟฎๆญฃใ™ใ‚‹ใ“ใจใชใ็ฐกๅ˜ใซ็‹ฌ่‡ชใฎCSSใƒ•ใ‚กใ‚คใƒซใ‚’็”Ÿๆˆใงใใ‚‹ใ‚ˆใ†ใซใ‚ณใƒณใƒ†ใƒณใƒ„ใƒ‘ใ‚นใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใคใพใ‚Šใ€**Congo ใ‚’ `themes/congo/` ใฎใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใจใ—ใฆใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซๅซใ‚ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚** +ใ‚ˆใฃใฆใ€Hugoใƒขใ‚ธใƒฅใƒผใƒซใ‚’ไฝฟใฃใฆ็ฐกๅ˜ใซใƒ†ใƒผใƒžใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ใ“ใจใฏใงใใšใ€ Gitใ‚ตใƒ–ใƒขใ‚ธใƒฅใƒผใƒซ๏ผˆๆŽจๅฅจ๏ผ‰ใ‹ๆ‰‹ๅ‹•ใ‚คใƒณใ‚นใƒˆใƒผใƒซใฎใฉใกใ‚‰ใ‹ใฎๆ–นๆณ•ใ‚’ๅ–ใ‚‰ใชใ‘ใ‚Œใฐใชใ‚Šใพใ›ใ‚“ใ€‚[ใ‚คใƒณใ‚นใƒˆใƒผใƒซ]({{< ref "installation" >}})ใงใฏใ€ใ“ใ‚Œใ‚‰ใฎๆ–นๆณ•ใฎใ„ใšใ‚Œใ‹ใ‚’ไฝฟใฃใฆใƒ†ใƒผใƒžใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ๆ–นๆณ•ใ‚’่ชฌๆ˜Žใ—ใฆใ„ใพใ™ใ€‚ + +### ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๆง‹้€  + +ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่จญๅฎšใฎๆฉๆตใ‚’ๆŽˆใ‹ใ‚‹ใซใฏใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฏไธ‹่จ˜ใฎใ‚ˆใ†ใชๆง‹้€ ใซใชใฃใฆใ„ใ‚‹ในใใงใ™ใ€‚ + +```shell +. +โ”œโ”€โ”€ assets +โ”‚ โ””โ”€โ”€ css +โ”‚ โ””โ”€โ”€ compiled +โ”‚ โ””โ”€โ”€ main.css # this is the file we will generate +โ”œโ”€โ”€ config # site config +โ”‚ โ””โ”€โ”€ _default +โ”œโ”€โ”€ content # site content +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ projects +โ”‚ โ”‚ โ””โ”€โ”€ _index.md +โ”‚ โ””โ”€โ”€ blog +โ”‚ โ””โ”€โ”€ _index.md +โ”œโ”€โ”€ layouts # custom layouts for your site +โ”‚ โ”œโ”€โ”€ partials +โ”‚ โ”‚ โ””โ”€โ”€ extend-article-link.html +โ”‚ โ”œโ”€โ”€ projects +โ”‚ โ”‚ โ””โ”€โ”€ list.html +โ”‚ โ””โ”€โ”€ shortcodes +โ”‚ โ””โ”€โ”€ disclaimer.html +โ””โ”€โ”€ themes + โ””โ”€โ”€ congo # git submodule or manual theme install +``` + +ใ“ใฎๆง‹้€ ไพ‹ใงใฏใ€็‹ฌ่‡ชใฎใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆŒใคๆ–ฐใ—ใ„ `projects` ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚ฟใ‚คใƒ—ใ‚’ใ€ใ‚ซใ‚นใ‚ฟใƒ ใ‚ทใƒงใƒผใƒˆใ‚ณใƒผใƒ‰ใจๆ‹กๅผตใƒ‘ใƒผใ‚ทใƒฃใƒซใจใจใ‚‚ใซ่ฟฝๅŠ ใ—ใพใ™ใ€‚ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใŒใ“ใฎๆง‹้€ ใซๅพ“ใฃใฆใ„ใ‚Œใฐใ€ๅฟ…่ฆใชใฎใฏ `main.css` ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ†ใ‚ณใƒณใƒ‘ใ‚คใƒซใ™ใ‚‹ใ“ใจใ ใ‘ใงใ™ใ€‚ + +### ไพๅญ˜้–ขไฟ‚ใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ + +ไธŠ่จ˜ใ‚’ๅ‹•ไฝœใ•ใ›ใ‚‹ใซใฏใ€ `themes/congo/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใฆใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎไพๅญ˜้–ขไฟ‚ใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ€‚ใ“ใฎใ‚นใƒ†ใƒƒใƒ—ใซใฏ[npm](https://docs.npmjs.com/cli/v7/configuring-npm/install)ใŒๅฟ…่ฆใงใ™ใ€‚ + +```shell +cd themes/congo +npm install +``` + +### Tailwindใ‚ณใƒณใƒ‘ใ‚คใƒฉใฎๅฎŸ่กŒ + +ไพๅญ˜้–ขไฟ‚ใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซใŒๅฎŒไบ†ใ—ใŸใ‚‰ใ€ใ‚ใจใฏ[Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli)ใ‚’ไฝฟใฃใฆJITใ‚ณใƒณใƒ‘ใ‚คใƒฉใ‚’่ตทๅ‹•ใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒซใƒผใƒˆใซๆˆปใ‚Šใ€ไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใฆใใ ใ•ใ„: + +```shell +cd ../.. +./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit +``` + +ใ“ใฎใ‚ณใƒžใƒณใƒ‰ใฏใƒ‘ใ‚นๆŒ‡ๅฎšใฎ้–ขไฟ‚ใงๅฐ‘ใ—้†œใ„ใงใ™ใŒใ€ๅŸบๆœฌ็š„ใซใฏTailwind CLIใ‚’ๅ‘ผใณๅ‡บใ—ใ€Tailwindใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ€ `main.css` ใฎๅ ดๆ‰€ใ€ใใ—ใฆใ‚ณใƒณใƒ‘ใ‚คใƒซใ•ใ‚ŒใŸCSSใƒ•ใ‚กใ‚คใƒซใ‚’็ฝฎใๅ ดๆ‰€๏ผˆ `assets/css/compiled/` ๏ผ‰ใ‚’ๆธกใ—ใฆใ„ใพใ™ใ€‚ + +Tailwindใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใซใ‚ˆใฃใฆใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ†…ใฎใ™ในใฆใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใจใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ€ใŠใ‚ˆใณใƒ†ใƒผใƒžๅ†…ใฎใ™ในใฆใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’่‡ชๅ‹•็š„ใซ่ตฐๆŸปใ—ใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใซๅฟ…่ฆใชใ™ในใฆใฎCSSใ‚’ๅซใ‚€ๆ–ฐใ—ใ„CSSใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใพใ™ใ€‚Hugoใฏใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ†…ใฎใƒ•ใ‚กใ‚คใƒซใ‚’่‡ชๅ‹•็š„ใซใƒ†ใƒผใƒžใซไป˜ๅฑžใ™ใ‚‹ใ‚‚ใฎใงไธŠๆ›ธใใ—ใพใ™ใ€‚ + +ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๅค‰ๆ›ดใ—ใฆๆ–ฐใ—ใ„Tailwind CSSใ‚นใ‚ฟใ‚คใƒซใŒๅฟ…่ฆใซใชใ‚‹ใŸใณใซใ€ใ‚ณใƒžใƒณใƒ‰ใ‚’ๅ†ๅฎŸ่กŒใ™ใ‚‹ใ ใ‘ใงใ€ๆ–ฐใ—ใ„CSSใƒ•ใ‚กใ‚คใƒซใ‚’็”Ÿๆˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ‚ณใƒžใƒณใƒ‰ใฎๆœ€ๅพŒใซ `-w` ใ‚’่ฟฝๅŠ ใ™ใ‚‹ใจใ€JITใ‚ณใƒณใƒ‘ใ‚คใƒฉใ‚’ใ‚ฆใ‚ฉใƒƒใƒใƒขใƒผใƒ‰ใงๅฎŸ่กŒใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ + +### buildใ‚นใ‚ฏใƒชใƒ—ใƒˆใฎๆบ–ๅ‚™ + +็งใŒใ‚„ใฃใฆใ„ใ‚‹ใ‚ˆใ†ใซใ€ๅฟ…่ฆใชใ‚ณใƒžใƒณใƒ‰ใ‚’ๅซใ‚€ `package.json` ใ‚’ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒซใƒผใƒˆใซ่ฟฝๅŠ ใ—ใฆใ€ๅ†ๆง‹็ฏ‰ใƒ—ใƒญใ‚ปใ‚นใ‚’็ฐกๅ˜ใซใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ + +```js +// package.json + +{ + "name": "my-website", + "version": "1.0.0", + "description": "", + "scripts": { + "server": "hugo server -b http://localhost -p 8000", + "dev": "NODE_ENV=development ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w", + "build": "NODE_ENV=production ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit" + }, + // and more... +} +``` + +ใ“ใ‚Œใงใ€ใƒ‡ใ‚ถใ‚คใƒณใซๅ–ใ‚Šใ‹ใ‹ใ‚ŠใŸใ„ใจใใซ `npm run dev` ใ‚’ๅฎŸ่กŒใ™ใ‚Œใฐใ‚ณใƒณใƒ‘ใ‚คใƒฉใŒใ‚ฆใ‚ฉใƒƒใƒใƒขใƒผใƒ‰ใงๅฎŸ่กŒใ•ใ‚Œใพใ™ใ€‚ใƒ‡ใƒ—ใƒญใ‚คใ™ใ‚‹ๆบ–ๅ‚™ใŒใงใใŸใ‚‰ใ€ `npm run build` ใ‚’ๅฎŸ่กŒใ™ใ‚Œใฐใ€้€šๅธธใฎTailwind CSSใƒ“ใƒซใƒ‰ใŒๅฎŸ่กŒใ•ใ‚Œใพใ™ใ€‚ + +๐Ÿ™‹โ€โ™€๏ธ ใƒ˜ใƒซใƒ—ใŒๅฟ…่ฆใชๅ ดๅˆใฏใ€้ ๆ…ฎใชใ[GitHub Discussions](https://github.com/jpanther/congo/discussions)ใซ่ณชๅ•ใ‚’ๆŠ•็จฟใ—ใฆใใ ใ•ใ„ใ€‚ diff --git a/themes/congo/exampleSite/content/docs/advanced-customisation/index.md b/themes/congo/exampleSite/content/docs/advanced-customisation/index.md new file mode 100644 index 0000000..a126d14 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/advanced-customisation/index.md @@ -0,0 +1,182 @@ +--- +title: "Advanced Customisation" +date: 2020-08-08 +draft: false +description: "Learn how to build Congo manually." +summary: "Congo supports advanced customisations that include modifying the underlying Tailwind configuration, building the theme manually and providing custom CSS." +slug: "advanced-customisation" +tags: ["advanced", "css", "docs"] +--- + +There are many ways you can make advanced changes to Congo. Read below to learn more about what can be customised and the best way of achieving your desired result. + +If you need further advice, post your questions on [GitHub Discussions](https://github.com/jpanther/congo/discussions). + +## Hugo project structure + +Before leaping into it, first a quick note about [Hugo project structure](https://gohugo.io/getting-started/directory-structure/) and best practices for managing your content and theme customisations. + +{{< alert >}} +**In summary:** Never directly edit the theme files. Only make customisations in your Hugo project's sub-directories, not in the themes directory itself. +{{< /alert >}} + +Congo is built to take advantage of all the standard Hugo practices. It is designed to allow all aspects of the theme to be customised and overridden without changing any of the core theme files. This allows for a seamless upgrade experience while giving you total control over the look and feel of your website. + +In order to achieve this, you should never manually adjust any of the theme files directly. Whether you install using Hugo modules, as a git submodule or manually include the theme in your `themes/` directory, you should always leave these files intact. + +The correct way to adjust any theme behaviour is by overriding files using Hugo's powerful [file lookup order](https://gohugo.io/templates/lookup-order/). In summary, the lookup order ensures any files you include in your project directory will automatically take precedence over any theme files. + +For example, if you wanted to override the main article template in Congo, you can simply create your own `layouts/_default/single.html` file and place it in the root of your project. This file will then override the `single.html` from the theme without ever changing the theme itself. This works for any theme files - HTML templates, partials, shortcodes, config files, data, assets, etc. + +As long as you follow this simple practice, you will always be able to update the theme (or test different theme versions) without worrying that you will lose any of your custom changes. + +## Colour schemes + +Congo ships with a number of colour schemes out of the box. To change the basic colour scheme, you can set the `colorScheme` theme parameter. Refer to the [Getting Started]({{< ref "getting-started#colour-schemes" >}}) section to learn more about the built-in schemes. + +In addition to the default schemes, you can also create your own and re-style the entire website to your liking. Schemes are created by by placing a `.css` file in the `assets/css/schemes/` folder. Once the file is created, simply refer to it by name in the theme configuration. + +Congo defines a three-colour palette that is used throughout the theme. The three colours are defined as `neutral`, `primary` and `secondary` variants, each containing ten shades of colour. + +Due to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to [conform to a particular format](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo) by providing the red, green and blue colour values. + +```css +:root { + --color-primary-500: 139, 92, 246; +} +``` + +This example defines a CSS variable for the `primary-500` colour with a red value of `139`, green value of `92` and blue value of `246`. + +Use one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official [Tailwind colour palette reference](https://tailwindcss.com/docs/customizing-colors#color-palette-reference). + +## Overriding the stylesheet + +Sometimes you need to add a custom style to style your own HTML elements. Congo provides for this scenario by allowing you to override the default styles in your own CSS stylesheet. Simply create a `custom.css` file in your project's `assets/css/` folder. + +The `custom.css` file will be minified by Hugo and loaded automatically after all the other theme styles which means anything in your custom file will take precedence over the defaults. + +### Adjusting the font size + +Changing the font size of your website is one example of overriding the default stylesheet. Congo makes this simple as it uses scaled font sizes throughout the theme which are derived from the base HTML font size. By default, Tailwind sets the default size to `12pt`, but it can be changed to whatever value you prefer. + +Create a `custom.css` file using the [instructions above]({{< ref "#overriding-the-stylesheet" >}}) and add the following CSS declaration: + +```css +/* Increase the default font size */ +html { + font-size: 13pt; +} +``` + +Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than `12pt`. Similarly, to decrease the font sizes, make the value less than `12pt`. + +## Building the theme CSS from source + +If you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet. + +{{< alert >}} +**Note:** Building the theme manually is intended for advanced users. +{{< /alert >}} + +Let's step through how building the Tailwind CSS works. + +### Tailwind configuration + +In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the `tailwind.config.js` file which is included in the root of the theme directory: + +```js +// themes/congo/tailwind.config.js + +module.exports = { + content: [ + "./layouts/**/*.html", + "./content/**/*.{html,md}", + "./themes/congo/layouts/**/*.html", + "./themes/congo/content/**/*.{html,md}", + ], + + // and more... +}; +``` + +This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, **you have to include Congo in your project as a subdirectory at `themes/congo/`**. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The [Installation docs]({{< ref "installation" >}}) explain how to install the theme using either of these methods. + +### Project structure + +In order to take advantage of the default configuration, your project should look something like this... + +```shell +. +โ”œโ”€โ”€ assets +โ”‚ โ””โ”€โ”€ css +โ”‚ โ””โ”€โ”€ compiled +โ”‚ โ””โ”€โ”€ main.css # this is the file we will generate +โ”œโ”€โ”€ config # site config +โ”‚ โ””โ”€โ”€ _default +โ”œโ”€โ”€ content # site content +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ projects +โ”‚ โ”‚ โ””โ”€โ”€ _index.md +โ”‚ โ””โ”€โ”€ blog +โ”‚ โ””โ”€โ”€ _index.md +โ”œโ”€โ”€ layouts # custom layouts for your site +โ”‚ โ”œโ”€โ”€ partials +โ”‚ โ”‚ โ””โ”€โ”€ extend-article-link.html +โ”‚ โ”œโ”€โ”€ projects +โ”‚ โ”‚ โ””โ”€โ”€ list.html +โ”‚ โ””โ”€โ”€ shortcodes +โ”‚ โ””โ”€โ”€ disclaimer.html +โ””โ”€โ”€ themes + โ””โ”€โ”€ congo # git submodule or manual theme install +``` + +This example structure adds a new `projects` content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that's required is to recompile the `main.css` file. + +### Install dependencies + +In order for this to work you'll need to change into the `themes/congo/` directory and install the project dependencies. You'll need [npm](https://docs.npmjs.com/cli/v7/configuring-npm/install) on your local machine for this step. + +```shell +cd themes/congo +npm install +``` + +### Run the Tailwind compiler + +With the dependencies installed all that's left is to use [Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli) to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command: + +```shell +cd ../.. +./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit +``` + +It's a bit of an ugly command due to the paths involved but essentially you're calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme's `main.css` file and then where you want the compiled CSS file to be placed (it's going into the `assets/css/compiled/` folder of your Hugo project). + +The config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme. + +Each time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add `-w` to the end of the command to run the JIT compiler in watch mode. + +### Make a build script + +To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a `package.json` to the root of your project which contains the necessary scripts... + +```js +// package.json + +{ + "name": "my-website", + "version": "1.0.0", + "description": "", + "scripts": { + "server": "hugo server -b http://localhost -p 8000", + "dev": "NODE_ENV=development ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w", + "build": "NODE_ENV=production ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit" + }, + // and more... +} +``` + +Now when you want to work on designing your site, you can invoke `npm run dev` and the compiler will run in watch mode. When you're ready to deploy, run `npm run build` and you'll get a clean Tailwind CSS build. + +๐Ÿ™‹โ€โ™€๏ธ If you need help, feel free to ask a question on [GitHub Discussions](https://github.com/jpanther/congo/discussions). diff --git a/themes/congo/exampleSite/content/docs/advanced-customisation/index.zh-Hans.md b/themes/congo/exampleSite/content/docs/advanced-customisation/index.zh-Hans.md new file mode 100644 index 0000000..b8d392d --- /dev/null +++ b/themes/congo/exampleSite/content/docs/advanced-customisation/index.zh-Hans.md @@ -0,0 +1,182 @@ +--- +title: "้ซ˜็บงๅฎšๅˆถ" +date: 2020-08-08 +draft: false +description: "ๅญฆไน ๅฆ‚ไฝ•ๆ‰‹ๅŠจๆž„ๅปบ Congoใ€‚" +summary: "Congo ๆ”ฏๆŒ้ซ˜็บงๅฎšๅˆถ๏ผŒๅŒ…ๆ‹ฌไฟฎๆ”นๅบ•ๅฑ‚็š„ Tailwind ้…็ฝฎ๏ผŒๆ‰‹ๅŠจๆž„ๅปบไธป้ข˜ไปฅๅŠๆไพ›่‡ชๅฎšไน‰ CSSใ€‚" +slug: "advanced-customisation" +tags: ["้ซ˜็บง", "CSS", "ๆ–‡ๆกฃ"] +--- + +ๆœ‰่ฎธๅคšๆ–นๆณ•ๅฏไปฅๅฏน Congo ่ฟ›่กŒ้ซ˜็บงๆ›ดๆ”นใ€‚้˜…่ฏปไปฅไธ‹ๅ†…ๅฎน๏ผŒไบ†่งฃๅฏไปฅๅฎšๅˆถ็š„ๅ†…ๅฎนไปฅๅŠๅฎž็Žฐๆ‰€้œ€็ป“ๆžœ็š„ๆœ€ไฝณๆ–นๅผใ€‚ + +ๅฆ‚ๆžœๆ‚จ้œ€่ฆ่ฟ›ไธ€ๆญฅ็š„ๅปบ่ฎฎ๏ผŒ่ฏทๅœจ [GitHub ่ฎจ่ฎบๅŒบ](https://github.com/jpanther/congo/discussions) ไธŠๅ‘่กจๆ‚จ็š„้—ฎ้ข˜ใ€‚ + +## Hugo ้กน็›ฎ็ป“ๆž„ + +ๅœจๆทฑๅ…ฅไบ†่งฃไน‹ๅ‰๏ผŒ้ฆ–ๅ…ˆ็ฎ€่ฆไป‹็ปไธ€ไธ‹[Hugo ้กน็›ฎ็ป“ๆž„](https://gohugo.io/getting-started/directory-structure/)ๅ’Œ็ฎก็†ๅ†…ๅฎนไปฅๅŠไธป้ข˜ๅฎšๅˆถ็š„ๆœ€ไฝณๅฎž่ทตใ€‚ + +{{< alert >}} +**ๆ€ป็ป“๏ผš**ๆฐธ่ฟœไธ่ฆ็›ดๆŽฅ็ผ–่พ‘ไธป้ข˜ๆ–‡ไปถใ€‚ๅชๅœจ Hugo ้กน็›ฎ็š„ๅญ็›ฎๅฝ•ไธญ่ฟ›่กŒๅฎšๅˆถ๏ผŒ่€Œไธ่ฆๅœจไธป้ข˜็›ฎๅฝ•ๆœฌ่บซ่ฟ›่กŒๅฎšๅˆถใ€‚ +{{< /alert >}} + +Congo ็š„ๆž„ๅปบๆ—จๅœจๅ……ๅˆ†ๅˆฉ็”จๆ‰€ๆœ‰ๆ ‡ๅ‡† Hugo ๅฎž่ทตใ€‚ๅฎƒ่ขซ่ฎพ่ฎกไธบๅ…่ฎธๅฎšๅˆถๅ’Œ่ฆ†็›–ไธป้ข˜็š„ๆ‰€ๆœ‰ๆ–น้ข๏ผŒ่€Œๆ— ้œ€ๆ›ดๆ”นไปปไฝ•ๆ ธๅฟƒไธป้ข˜ๆ–‡ไปถใ€‚่ฟ™ๆ ทไธ€ๆฅ๏ผŒๆ‚จๅฏไปฅๅœจๅฎŒๅ…จๆŽงๅˆถ็ฝ‘็ซ™็š„ๅค–่ง‚ๅ’Œๆ„Ÿ่ง‰็š„ๅŒๆ—ถ๏ผŒ่Žทๅพ—ๆ— ็ผ็š„ๅ‡็บงไฝ“้ชŒใ€‚ + +ไธบไบ†ๅฎž็Žฐ่ฟ™ไธ€็‚น๏ผŒๆ‚จๆฐธ่ฟœไธๅบ”็›ดๆŽฅ่ฐƒๆ•ดไธป้ข˜ๆ–‡ไปถไธญ็š„ไปปไฝ•ๆ–‡ไปถใ€‚ๆ— ่ฎบๆ‚จๆ˜ฏไฝฟ็”จ Hugo ๆจกๅ—ๅฎ‰่ฃ…๏ผŒไฝœไธบ git ๅญๆจกๅ—ๆˆ–ๆ‰‹ๅŠจๅฐ†ไธป้ข˜ๅŒ…ๅซๅœจๆ‚จ็š„ `themes/` ็›ฎๅฝ•ไธญ๏ผŒ้ƒฝๅบ”ๅง‹็ปˆไฟๆŒ่ฟ™ไบ›ๆ–‡ไปถไธๅ˜ใ€‚ + +่ฐƒๆ•ดไปปไฝ•ไธป้ข˜่กŒไธบ็š„ๆญฃ็กฎๆ–นๅผๆ˜ฏไฝฟ็”จ Hugo ๅผบๅคง็š„[ๆ–‡ไปถๆŸฅๆ‰พ้กบๅบ](https://gohugo.io/templates/lookup-order/)ใ€‚ๆ€ปไฝ“่€Œ่จ€๏ผŒๆŸฅๆ‰พ้กบๅบ็กฎไฟๆ‚จๅœจ้กน็›ฎ็›ฎๅฝ•ไธญๅŒ…ๅซ็š„ไปปไฝ•ๆ–‡ไปถๅฐ†่‡ชๅŠจไผ˜ๅ…ˆไบŽไปปไฝ•ไธป้ข˜ๆ–‡ไปถใ€‚ + +ไพ‹ๅฆ‚๏ผŒๅฆ‚ๆžœๆ‚จๆƒณ่ฆ่ฆ†็›– Congo ไธญ็š„ไธปๆ–‡็ซ ๆจกๆฟ๏ผŒๆ‚จๅช้œ€ๅˆ›ๅปบ่‡ชๅทฑ็š„ `layouts/_default/single.html` ๆ–‡ไปถๅนถๅฐ†ๅ…ถๆ”พ็ฝฎๅœจ้กน็›ฎ็š„ๆ น็›ฎๅฝ•ใ€‚่ฏฅๆ–‡ไปถๅฐ†่ฆ†็›–ไธป้ข˜ไธญ็š„ `single.html`๏ผŒ่€Œๆ— ้œ€ๆ›ดๆ”นไธป้ข˜ๆœฌ่บซใ€‚่ฟ™้€‚็”จไบŽไปปไฝ•ไธป้ข˜ๆ–‡ไปถ - HTML ๆจกๆฟใ€ๅฑ€้ƒจใ€็Ÿญไปฃ็ ใ€้…็ฝฎๆ–‡ไปถใ€ๆ•ฐๆฎใ€่ต„ไบง็ญ‰ใ€‚ + +ๅช่ฆ้ตๅพช่ฟ™ไธช็ฎ€ๅ•็š„ๅšๆณ•๏ผŒๆ‚จๅฐฑๅง‹็ปˆ่ƒฝๅคŸๆ›ดๆ–ฐไธป้ข˜๏ผˆๆˆ–ๆต‹่ฏ•ไธๅŒ็š„ไธป้ข˜็‰ˆๆœฌ๏ผ‰๏ผŒ่€Œไธๅฟ…ๆ‹…ๅฟƒไผšไธขๅคฑไปปไฝ•่‡ชๅฎšไน‰ๆ›ดๆ”นใ€‚ + +## ้ขœ่‰ฒๆ–นๆกˆ + +Congo ้ป˜่ฎคๆไพ›ไบ†่ฎธๅคš้ขœ่‰ฒๆ–นๆกˆใ€‚่ฆๆ›ดๆ”นๅŸบๆœฌ็š„้ขœ่‰ฒๆ–นๆกˆ๏ผŒๆ‚จๅฏไปฅ่ฎพ็ฝฎ `colorScheme` ไธป้ข˜ๅ‚ๆ•ฐใ€‚่ฏทๅ‚้˜… [ๅ…ฅ้—จๆŒ‡ๅ—]({{< ref "getting-started#colour-schemes" >}}) ้ƒจๅˆ†๏ผŒไบ†่งฃๅ†…็ฝฎๆ–นๆกˆ็š„ๆ›ดๅคšไฟกๆฏใ€‚ + +้™คไบ†้ป˜่ฎคๆ–นๆกˆไน‹ๅค–๏ผŒๆ‚จ่ฟ˜ๅฏไปฅๅˆ›ๅปบ่‡ชๅทฑ็š„ๆ–นๆกˆ๏ผŒๅนถๆ นๆฎ่‡ชๅทฑ็š„ๅ–œๅฅฝ้‡ๆ–ฐ่ฎพ่ฎกๆ•ดไธช็ฝ‘็ซ™ใ€‚้€š่ฟ‡ๅœจ `assets/css/schemes/` ๆ–‡ไปถๅคนไธญๆ”พ็ฝฎ `.css` ๆ–‡ไปถๆฅๅˆ›ๅปบๆ–นๆกˆใ€‚ๅˆ›ๅปบๆ–‡ไปถๅŽ๏ผŒๅช้œ€ๅœจไธป้ข˜้…็ฝฎไธญๆŒ‰ๅ็งฐๅผ•็”จๅณๅฏใ€‚ + +Congo ๅฎšไน‰ไบ†ไธ€ไธช่ดฏ็ฉฟๆ•ดไธชไธป้ข˜ไฝฟ็”จ็š„ไธ‰็ง้ขœ่‰ฒ็š„่ฐƒ่‰ฒๆฟใ€‚่ฟ™ไธ‰็ง้ขœ่‰ฒๅˆ†ๅˆซ่ขซๅฎšไน‰ไธบ `neutral`ใ€`primary` ๅ’Œ `secondary` ๅ˜ไฝ“๏ผŒๆฏ็ง้ขœ่‰ฒๅŒ…ๅซๅไธช่‰ฒ่ฐƒใ€‚ + +็”ฑไบŽ Tailwind CSS 3.0 ไฝฟ็”จไธ้€ๆ˜Žๅบฆ่ฎก็ฎ—้ขœ่‰ฒๅ€ผ็š„ๆ–นๅผ๏ผŒๆ–นๆกˆไธญๆŒ‡ๅฎš็š„้ขœ่‰ฒ้œ€่ฆ[็ฌฆๅˆ็‰นๅฎšๆ ผๅผ](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo)๏ผŒๅณๆไพ›็บข่‰ฒใ€็ปฟ่‰ฒๅ’Œ่“่‰ฒ้ขœ่‰ฒๅ€ผใ€‚ + +```css +:root { + --color-primary-500: 139, 92, 246; +} +``` + +ๆญค็คบไพ‹ไธบ `primary-500` ้ขœ่‰ฒๅฎšไน‰ไบ†ไธ€ไธช CSS ๅ˜้‡๏ผŒๅ…ถ็บข่‰ฒๅ€ผไธบ `139`๏ผŒ็ปฟ่‰ฒๅ€ผไธบ `92`๏ผŒ่“่‰ฒๅ€ผไธบ `246`ใ€‚ + +ไฝฟ็”จ็Žฐๆœ‰็š„ไธป้ข˜ๆ ทๅผ่กจไฝœไธบๆจกๆฟใ€‚ๆ‚จๅฏไปฅ่‡ชๅฎšไน‰่‡ชๅทฑ็š„้ขœ่‰ฒ๏ผŒไฝ†ๆ˜ฏไธบไบ†ไธ€ไบ›็ตๆ„Ÿ๏ผŒ่ฏทๆŸฅ็œ‹ๅฎ˜ๆ–น็š„ [Tailwind ้ขœ่‰ฒ่ฐƒ่‰ฒๆฟๅ‚่€ƒ](https://tailwindcss.com/docs/customizing-colors#color-palette-reference)ใ€‚ + +## ่ฆ†็›–ๆ ทๅผ่กจ + +ๆœ‰ๆ—ถๆ‚จ้œ€่ฆๆทปๅŠ ่‡ชๅฎšไน‰ๆ ทๅผไปฅไธบ่‡ชๅทฑ็š„ HTML ๅ…ƒ็ด ่ฎพ็ฝฎๆ ทๅผใ€‚Congo ๆไพ›ไบ†ๅ…่ฎธๆ‚จๅœจ่‡ชๅทฑ็š„ CSS ๆ ทๅผ่กจไธญ่ฆ†็›–้ป˜่ฎคๆ ทๅผ็š„ๅœบๆ™ฏใ€‚ๅช้œ€ๅœจ้กน็›ฎ็š„ `assets/css/` ๆ–‡ไปถๅคนไธญๅˆ›ๅปบไธ€ไธช `custom.css` ๆ–‡ไปถใ€‚ + +`custom.css` ๆ–‡ไปถๅฐ†็”ฑ Hugo ่ฟ›่กŒๆœ€ๅฐๅŒ–๏ผŒๅนถๅœจๆ‰€ๆœ‰ๅ…ถไป–ไธป้ข˜ๆ ทๅผไน‹ๅŽ่‡ชๅŠจๅŠ ่ฝฝ๏ผŒ่ฟ™ๆ„ๅ‘ณ็€่‡ชๅฎšไน‰ๆ–‡ไปถไธญ็š„ไปปไฝ•ๅ†…ๅฎน้ƒฝๅฐ†่ฆ†็›–้ป˜่ฎคๅ€ผใ€‚ + +### ่ฐƒๆ•ดๅญ—ไฝ“ๅคงๅฐ + +ๆ›ดๆ”น็ฝ‘็ซ™็š„ๅญ—ไฝ“ๅคงๅฐๆ˜ฏ่ฆ†็›–้ป˜่ฎคๆ ทๅผ่กจ็š„ไธ€ไธช็คบไพ‹ใ€‚Congo ไฝฟๆญคๅ˜ๅพ—็ฎ€ๅ•๏ผŒๅ› ไธบๅฎƒๅœจๆ•ดไธชไธป้ข˜ไธญไฝฟ็”จไบ†ไปŽๅŸบๆœฌ HTML ๅญ—ไฝ“ๅคงๅฐๆดพ็”Ÿ็š„็ผฉๆ”พๅญ—ไฝ“ๅคงๅฐใ€‚้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒTailwind ๅฐ†้ป˜่ฎคๅคงๅฐ่ฎพ็ฝฎไธบ `12pt`๏ผŒไฝ†ๅฏไปฅๆ›ดๆ”นไธบๆ‚จๅ–œๆฌข็š„ไปปไฝ•ๅ€ผใ€‚ + +ไฝฟ็”จไธŠ่ฟฐ[่ฏดๆ˜Ž]({{< ref "#overriding-the-stylesheet" >}})ๅˆ›ๅปบไธ€ไธช `custom.css` ๆ–‡ไปถ๏ผŒๅนถๆทปๅŠ ไปฅไธ‹ CSS ๅฃฐๆ˜Ž๏ผš + +```css +/* Increase the default font size */ +html { + font-size: 13pt; +} +``` + +ๅช้œ€ๆ›ดๆ”นๆญคไธ€ไธชๅ€ผ๏ผŒๆ‚จ็ฝ‘็ซ™ไธŠ็š„ๆ‰€ๆœ‰ๅญ—ไฝ“ๅคงๅฐๅฐฑไผš่ฐƒๆ•ดไธบๅŒน้…่ฟ™ไธชๆ–ฐๅคงๅฐใ€‚ๅ› ๆญค๏ผŒ่ฆๅขžๅŠ ไฝฟ็”จ็š„ๆ•ดไฝ“ๅญ—ไฝ“ๅคงๅฐ๏ผŒ่ฏทๅฐ†ๅ€ผ่ฎพ็ฝฎไธบๅคงไบŽ `12pt`ใ€‚ๅŒๆ ท๏ผŒ่ฆๅ‡ๅฐๅญ—ไฝ“ๅคงๅฐ๏ผŒ่ฏทๅฐ†ๅ€ผ่ฎพ็ฝฎไธบๅฐไบŽ `12pt`ใ€‚ + +## ไปŽๆบไปฃ็ ๆž„ๅปบไธป้ข˜ CSS + +ๅฆ‚ๆžœๆ‚จๆƒณ่ฟ›่กŒ้‡ๅคงๆ›ดๆ”น๏ผŒๅฏไปฅๅˆฉ็”จ Tailwind CSS ็š„ JIT ็ผ–่ฏ‘ๅ™จไปŽๅคดๅผ€ๅง‹้‡ๆ–ฐๆž„ๅปบๆ•ดไธชไธป้ข˜ CSSใ€‚ๅฆ‚ๆžœๆ‚จๆƒณ่ฆ่ฐƒๆ•ด Tailwind ้…็ฝฎๆˆ–ๅ‘ไธปๆ ทๅผ่กจๆทปๅŠ ้ขๅค–็š„ Tailwind ็ฑป๏ผŒ่ฟ™ๅฐ†้žๅธธๆœ‰็”จใ€‚ + +{{< alert >}} +**ๆณจๆ„๏ผš** ๆ‰‹ๅŠจๆž„ๅปบไธป้ข˜ไป…้€‚็”จไบŽ้ซ˜็บง็”จๆˆทใ€‚ +{{< /alert >}} + +่ฎฉๆˆ‘ไปฌ้€ๆญฅไบ†่งฃๆž„ๅปบ Tailwind CSS ็š„่ฟ‡็จ‹ใ€‚ + +### Tailwind ้…็ฝฎ + +ไธบไบ†็”Ÿๆˆไธ€ไธชไป…ๅŒ…ๅซๅฎž้™…ไฝฟ็”จ็š„ Tailwind ็ฑป็š„ CSS ๆ–‡ไปถ๏ผŒJIT ็ผ–่ฏ‘ๅ™จ้œ€่ฆๆ‰ซๆๆ‰€ๆœ‰ HTML ๆจกๆฟๅ’Œ Markdown ๅ†…ๅฎนๆ–‡ไปถ๏ผŒไปฅๆฃ€ๆŸฅๆ ‡่ฎฐไธญๅญ˜ๅœจๅ“ชไบ›ๆ ทๅผใ€‚็ผ–่ฏ‘ๅ™จ้€š่ฟ‡ๆŸฅ็œ‹ไธป้ข˜็›ฎๅฝ•ๆ น็›ฎๅฝ•ไธญๅŒ…ๅซ็š„ `tailwind.config.js` ๆ–‡ไปถๆฅๆ‰ง่กŒๆญคๆ“ไฝœ๏ผš + +```js +// themes/congo/tailwind.config.js + +module.exports = { + content: [ + "./layouts/**/*.html", + "./content/**/*.{html,md}", + "./themes/congo/layouts/**/*.html", + "./themes/congo/content/**/*.{html,md}", + ], + + // and more... +}; +``` + +่ฟ™ไธช้ป˜่ฎค้…็ฝฎๅทฒ็ปๅŒ…ๅซไบ†่ฟ™ไบ›ๅ†…ๅฎน่ทฏๅพ„๏ผŒไปฅไพฟๆ‚จๅฏไปฅ่ฝปๆพ็”Ÿๆˆ่‡ชๅทฑ็š„ CSS ๆ–‡ไปถ๏ผŒ่€Œๆ— ้œ€ไฟฎๆ”นๅฎƒ๏ผŒๅช่ฆๆ‚จ้ตๅพช็‰นๅฎš็š„้กน็›ฎ็ป“ๆž„ใ€‚ๆขๅฅ่ฏ่ฏด๏ผŒ**ๆ‚จๅฟ…้กปๅฐ† Congo ไฝœไธบๅญ็›ฎๅฝ•ๅŒ…ๅซๅœจ้กน็›ฎไธญ๏ผŒๅณ `themes/congo/`**ใ€‚่ฟ™ๆ„ๅ‘ณ็€ๆ‚จไธ่ƒฝ่ฝปๆพไฝฟ็”จ Hugo ๆจกๅ—ๆฅๅฎ‰่ฃ…ไธป้ข˜๏ผŒ่€Œๅฟ…้กป้€‰ๆ‹ฉ git ๅญๆจกๅ—๏ผˆๆŽจ่๏ผ‰ๆˆ–ๆ‰‹ๅŠจๅฎ‰่ฃ…่ทฏ็บฟใ€‚[ๅฎ‰่ฃ…ๆ–‡ๆกฃ]({{< ref "installation" >}})่งฃ้‡Šไบ†ๅฆ‚ไฝ•ไฝฟ็”จ่ฟ™ไธค็งๆ–นๆณ•ไน‹ไธ€ๅฎ‰่ฃ…ไธป้ข˜ใ€‚ + +### ้กน็›ฎ็ป“ๆž„ + +ไธบไบ†ๅ……ๅˆ†ๅˆฉ็”จ้ป˜่ฎค้…็ฝฎ๏ผŒๆ‚จ็š„้กน็›ฎ็ป“ๆž„ๅบ”่ฏฅ้•ฟๅพ—ๅƒไธ‹้ข่ฟ™ไธชๆ ทๅญ... + +```shell +. +โ”œโ”€โ”€ assets +โ”‚ โ””โ”€โ”€ css +โ”‚ โ””โ”€โ”€ compiled +โ”‚ โ””โ”€โ”€ main.css # this is the file we will generate +โ”œโ”€โ”€ config # site config +โ”‚ โ””โ”€โ”€ _default +โ”œโ”€โ”€ content # site content +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ projects +โ”‚ โ”‚ โ””โ”€โ”€ _index.md +โ”‚ โ””โ”€โ”€ blog +โ”‚ โ””โ”€โ”€ _index.md +โ”œโ”€โ”€ layouts # custom layouts for your site +โ”‚ โ”œโ”€โ”€ partials +โ”‚ โ”‚ โ””โ”€โ”€ extend-article-link.html +โ”‚ โ”œโ”€โ”€ projects +โ”‚ โ”‚ โ””โ”€โ”€ list.html +โ”‚ โ””โ”€โ”€ shortcodes +โ”‚ โ””โ”€โ”€ disclaimer.html +โ””โ”€โ”€ themes + โ””โ”€โ”€ congo # git submodule or manual theme install +``` + +่ฟ™ไธชไพ‹ๅญ็š„็ป“ๆž„ๆทปๅŠ ไบ†ไธ€ไธชๆ–ฐ็š„ `projects` ๅ†…ๅฎน็ฑปๅž‹๏ผŒๅ…ทๆœ‰่‡ชๅทฑ็š„่‡ชๅฎšไน‰ๅธƒๅฑ€๏ผŒไปฅๅŠไธ€ไธช่‡ชๅฎšไน‰็Ÿญไปฃ็ ๅ’Œๆ‰ฉๅฑ•้ƒจๅˆ†ใ€‚ๅช่ฆ้กน็›ฎ้ตๅพช่ฟ™ไธช็ป“ๆž„๏ผŒๅ”ฏไธ€้œ€่ฆๅš็š„ๅฐฑๆ˜ฏ้‡ๆ–ฐ็ผ–่ฏ‘ `main.css` ๆ–‡ไปถใ€‚ + +### ๅฎ‰่ฃ…ไพ่ต–้กน + +ไธบไบ†ไฝฟ่ฟ™ไธชๅทฅไฝœ๏ผŒไฝ ้œ€่ฆๅˆ‡ๆขๅˆฐ `themes/congo/` ็›ฎๅฝ•ๅนถๅฎ‰่ฃ…้กน็›ฎ็š„ไพ่ต–้กนใ€‚ๅฏนไบŽ่ฟ™ไธ€ๆญฅ้ชค๏ผŒไฝ ็š„ๆœฌๅœฐๆœบๅ™จไธŠ้œ€่ฆ [npm](https://docs.npmjs.com/cli/v7/configuring-npm/install)ใ€‚ + +```shell +cd themes/congo +npm install +``` + +### ่ฟ่กŒ Tailwind ็ผ–่ฏ‘ๅ™จ + +ๅœจๅฎ‰่ฃ…ไบ†ไพ่ต–้กนไน‹ๅŽ๏ผŒๅ”ฏไธ€้œ€่ฆๅš็š„ๅฐฑๆ˜ฏไฝฟ็”จ [Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli) ่ฐƒ็”จ JIT ็ผ–่ฏ‘ๅ™จใ€‚่ฟ”ๅ›žๅˆฐไฝ ็š„ Hugo ้กน็›ฎ็š„ๆ น็›ฎๅฝ•๏ผŒๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผš + +```shell +cd ../.. +./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit +``` + +็”ฑไบŽๆถ‰ๅŠๅˆฐ่ทฏๅพ„๏ผŒ่ฟ™ๆ˜ฏไธ€ไธชๆœ‰็‚นไธ‘้™‹็š„ๅ‘ฝไปค๏ผŒไฝ†ๅŸบๆœฌไธŠไฝ ๆ˜ฏๅœจ่ฐƒ็”จ Tailwind CLI ๅนถไผ ้€’ Tailwind ้…็ฝฎๆ–‡ไปถ็š„ไฝ็ฝฎ๏ผˆๆˆ‘ไปฌไธŠ้ข็œ‹ๅˆฐ็š„ๆ–‡ไปถ๏ผ‰๏ผŒไธป้ข˜็š„ `main.css` ๆ–‡ไปถ็š„ไฝ็ฝฎ๏ผŒไปฅๅŠไฝ ๆƒณ่ฆๆ”พ็ฝฎ็ผ–่ฏ‘ๅŽ็š„ CSS ๆ–‡ไปถ็š„ไฝ็ฝฎ๏ผˆๅฎƒๅฐ†ๆ”พๅœจไฝ ็š„ Hugo ้กน็›ฎ็š„ `assets/css/compiled/` ๆ–‡ไปถๅคนไธญ๏ผ‰ใ€‚ + +้…็ฝฎๆ–‡ไปถๅฐ†่‡ชๅŠจๆฃ€ๆŸฅไฝ ็š„้กน็›ฎไธญ็š„ๆ‰€ๆœ‰ๅ†…ๅฎนๅ’Œๅธƒๅฑ€๏ผŒไปฅๅŠไธป้ข˜ไธญ็š„ๆ‰€ๆœ‰ๅ†…ๅฎน๏ผŒๅนถๆž„ๅปบไธ€ไธชๆ–ฐ็š„ CSS ๆ–‡ไปถ๏ผŒๅ…ถไธญๅŒ…ๅซไฝ ็š„็ฝ‘็ซ™ๆ‰€้œ€็š„ๆ‰€ๆœ‰ CSSใ€‚็”ฑไบŽ Hugo ๅค„็†ๆ–‡ไปถๅฑ‚ๆฌก็ป“ๆž„็š„ๆ–นๅผ๏ผŒ่ฟ™ไธชๆ–‡ไปถๅœจไฝ ็š„้กน็›ฎไธญ็Žฐๅœจๅฐ†่‡ชๅŠจ่ฆ†็›–ไธป้ข˜่‡ชๅธฆ็š„ๆ–‡ไปถใ€‚ + +ๆฏๅฝ“ไฝ ๆ›ดๆ”นๅธƒๅฑ€ๅนถ้œ€่ฆๆ–ฐ็š„ Tailwind CSS ๆ ทๅผๆ—ถ๏ผŒๅช้œ€้‡ๆ–ฐ่ฟ่กŒ่ฏฅๅ‘ฝไปคๅนถ็”Ÿๆˆๆ–ฐ็š„ CSS ๆ–‡ไปถใ€‚ไฝ ไนŸๅฏไปฅๅœจๅ‘ฝไปค็š„ๆœซๅฐพๆทปๅŠ  `-w` ไปฅๅœจ็›‘่ง†ๆจกๅผไธ‹่ฟ่กŒ JIT ็ผ–่ฏ‘ๅ™จใ€‚ + +### ๅˆ›ๅปบๆž„ๅปบ่„šๆœฌ + +ไธบไบ†ๅฎŒๅ…จๅฎŒๆˆ่ฟ™ไธช่งฃๅ†ณๆ–นๆกˆ๏ผŒไฝ ๅฏไปฅ้€š่ฟ‡ไธบ่ฟ™ไบ›ๅ‘ฝไปคๆทปๅŠ ๅˆซๅ๏ผŒๆˆ–่€…ๅƒๆˆ‘ไธ€ๆ ท๏ผŒๅœจไฝ ็š„้กน็›ฎๆ น็›ฎๅฝ•ๆทปๅŠ ไธ€ไธชๅŒ…ๅซๅฟ…่ฆ่„šๆœฌ็š„ `package.json` ๆ–‡ไปถ๏ผŒๆฅ็ฎ€ๅŒ–ๆ•ดไธช่ฟ‡็จ‹... + +```js +// package.json + +{ + "name": "my-website", + "version": "1.0.0", + "description": "", + "scripts": { + "server": "hugo server -b http://localhost -p 8000", + "dev": "NODE_ENV=development ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w", + "build": "NODE_ENV=production ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit" + }, + // and more... +} +``` + +็Žฐๅœจ๏ผŒๅฝ“ไฝ ๆƒณ่ฆ่ฎพ่ฎกไฝ ็š„็ฝ‘็ซ™ๆ—ถ๏ผŒไฝ ๅฏไปฅ่ฐƒ็”จ `npm run dev`๏ผŒ็ผ–่ฏ‘ๅ™จๅฐ†ๅœจ็›‘่ง†ๆจกๅผไธ‹่ฟ่กŒใ€‚ๅฝ“ไฝ ๅ‡†ๅค‡้ƒจ็ฝฒๆ—ถ๏ผŒ่ฟ่กŒ `npm run build`๏ผŒไฝ ๅฐ†ๅพ—ๅˆฐไธ€ไธชๅนฒๅ‡€็š„ Tailwind CSS ๆž„ๅปบใ€‚ + +๐Ÿ™‹โ€โ™€๏ธ ๅฆ‚ๆžœไฝ ้œ€่ฆๅธฎๅŠฉ๏ผŒ่ฏท้šๆ—ถๅœจ [GitHub Discussions](https://github.com/jpanther/congo/discussions) ไธŠๆ้—ฎใ€‚ diff --git a/themes/congo/exampleSite/content/docs/advanced-customisation/thumb-static-website.svg b/themes/congo/exampleSite/content/docs/advanced-customisation/thumb-static-website.svg new file mode 100644 index 0000000..23b1caf --- /dev/null +++ b/themes/congo/exampleSite/content/docs/advanced-customisation/thumb-static-website.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/exampleSite/content/docs/configuration/index.ja.md b/themes/congo/exampleSite/content/docs/configuration/index.ja.md new file mode 100644 index 0000000..dc8826a --- /dev/null +++ b/themes/congo/exampleSite/content/docs/configuration/index.ja.md @@ -0,0 +1,188 @@ +--- +title: "ๅŸบๆœฌ่จญๅฎš" +date: 2020-08-14 +draft: false +description: "Congoใงๅˆฉ็”จๅฏ่ƒฝใชใ™ในใฆใฎ่จญๅฎš" +summary: "Congoใงๅˆฉ็”จๅฏ่ƒฝใชใ™ในใฆใฎใ‚ตใ‚คใƒˆใ€่จ€่ชžใ€ใƒ†ใƒผใƒž่จญๅฎšใจใ€ใใ‚Œใ‚‰ใ‚’ไฝฟ็”จใ—ใฆใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ๆ–นๆณ•ใ‚’ใ”่ฆงใใ ใ•ใ„ใ€‚" +slug: "configuration" +tags: ["config", "docs"] +--- + +Congoใฏ้ซ˜ๅบฆใซใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บๅฏ่ƒฝใชใƒ†ใƒผใƒžใงใ€ๆœ€ๆ–ฐใฎHugoใฎๆฉŸ่ƒฝใฎใ„ใใคใ‹ใ‚’ไฝฟ็”จใ—ใฆใ€่จญๅฎšๆ–นๆณ•ใ‚’็ฐก็ด ๅŒ–ใ—ใฆใ„ใพใ™ใ€‚ + +ใ“ใฎใƒ†ใƒผใƒžใซใฏใ€ๅŸบๆœฌ็š„ใชใƒ–ใƒญใ‚ฐใพใŸใฏ้™็š„ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใ‚’็ซ‹ใกไธŠใ’ใฆๅฎŸ่กŒใงใใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่จญๅฎšใŒๅŒๆขฑใ•ใ‚Œใฆใ„ใพใ™ใ€‚ + +> ๅŒๆขฑใ•ใ‚Œใฆใ„ใ‚‹่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฏTOMLใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใงๆไพ›ใ•ใ‚Œใฆใ„ใพใ™ใ€‚่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’YAMLใ‚„JSONใซๅค‰ๆ›ใ—ใŸใ„ๅ ดๅˆใฏใ”่‡ช็”ฑใซใฉใ†ใžใ€‚ + +ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒ†ใƒผใƒž่จญๅฎšใฏๅ„ใƒ•ใ‚กใ‚คใƒซใซๆ–‡ๆ›ธๅŒ–ใ•ใ‚Œใฆใ„ใ‚‹ใฎใงใ€ใƒ‹ใƒผใ‚บใซๅˆใ‚ใ›ใฆ่‡ช็”ฑใซ่จญๅฎšใ‚’่ชฟๆ•ดใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +{{< alert >}} +[ใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ‰‹้ †]({{< ref "/docs/installation#set-up-theme-configuration-files" >}})ใง่ชฌๆ˜Žใ•ใ‚Œใฆใ„ใ‚‹ใ‚ˆใ†ใซใ€Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎ `config/_default/` ใซใ‚ใ‚‹ใƒ•ใ‚กใ‚คใƒซใ‚’ไฟฎๆญฃใ—ใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆใซใ‚ใ‚‹ `config.toml` ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ‰Š้™คใ™ใ‚‹ใ“ใจใงใ€ใƒ†ใƒผใƒžใฎ่จญๅฎšใ‚’่ชฟๆ•ดใ—ใพใ™ใ€‚ +{{< /alert >}} + +## ใ‚ตใ‚คใƒˆ่จญๅฎš + +Hugoใฎๆจ™ๆบ–็š„ใช่จญๅฎšๅค‰ๆ•ฐใฏใƒ†ใƒผใƒžๅ…จไฝ“ใ‚’้€šใ—ใฆๅฐŠ้‡ใ•ใ‚Œใพใ™ใŒใ€ๆœ€่‰ฏใฎใ‚จใ‚ฏใ‚นใƒšใƒชใ‚จใƒณใ‚นใฎใŸใ‚ใซ่จญๅฎšใ™ในใ็‰นๅˆฅใชใ‚‚ใฎใ‚‚ใ‚ใ‚Šใพใ™ใ€‚ + +ใ‚ตใ‚คใƒˆใฎ่จญๅฎšใฏ `config/_default/config.toml` ใƒ•ใ‚กใ‚คใƒซใง็ฎก็†ใ•ใ‚Œใพใ™ใ€‚ไธ‹ใฎ่กจใฏCongoใŒๅˆฉ็”จใ™ใ‚‹ใ™ในใฆใฎ่จญๅฎšใฎๆฆ‚่ฆใงใ™ใ€‚ + +ใ“ใฎ่กจใงๆไพ›ใ•ใ‚Œใ‚‹ๅค‰ๆ•ฐๅใฏใ€TOMLๆง‹้€ ใ‚’็ฐก็•ฅๅŒ–ใ™ใ‚‹ใŸใ‚ใซใƒ‰ใƒƒใƒˆ่จ˜ๆณ•ใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ใ“ใจใซๆณจๆ„ใ—ใฆใใ ใ•ใ„๏ผˆใคใพใ‚Šใ€ `outputs.home` ใฏ `[outputs] home` ใ‚’ๆŒ‡ใ—ใพใ™๏ผ‰ใ€‚ + + +|Name|Default|Description| +|---|---|---| +|`theme`|`"congo"`|Hugo Modulesใ‚’ไฝฟ็”จใ™ใ‚‹ๅ ดๅˆใ€ใ“ใฎ่จญๅฎšๅ€คใฏๅ‰Š้™คใ—ใฆใใ ใ•ใ„ใ€‚ไป–ใฎใ™ในใฆใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซใ‚ฟใ‚คใƒ—ใงใฏใ€ใƒ†ใƒผใƒžใ‚’ๆฉŸ่ƒฝใ•ใ›ใ‚‹ใŸใ‚ใซ `congo` ใซ่จญๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚| +|`baseURL`|_Not set_|ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใƒซใƒผใƒˆใธใฎURLใ€‚| +|`defaultContentLanguage`|`"en"`|ใ“ใฎๅ€คใฏใƒ†ใƒผใƒžใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใจใ‚ณใƒณใƒ†ใƒณใƒ„ใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่จ€่ชžใ‚’ๆฑบๅฎšใ—ใพใ™ใ€‚ใ‚ตใƒใƒผใƒˆใ•ใ‚Œใ‚‹่จ€่ชžใ‚ณใƒผใƒ‰ใซใคใ„ใฆใฏใ€ไธ‹่จ˜ใฎ[่จ€่ชžใจๅ›ฝ้š›ๅŒ–](#่จ€่ชžใจๅ›ฝ้š›ๅŒ–)ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`enableRobotsTXT`|`true`|ๆœ‰ๅŠนใซใ™ใ‚‹ใจใ€ใ‚ตใ‚คใƒˆใƒซใƒผใƒˆใซ `robots.txt` ใƒ•ใ‚กใ‚คใƒซใŒไฝœๆˆใ•ใ‚Œใ€ๆคœ็ดขใ‚จใƒณใ‚ธใƒณใŒใ‚ตใ‚คใƒˆๅ…จไฝ“ใ‚’ใ‚ฏใƒญใƒผใƒซใงใใ‚‹ใ‚ˆใ†ใซใชใ‚Šใพใ™ใ€‚ใ‚ใ‚‰ใ‹ใ˜ใ‚็”จๆ„ใ•ใ‚Œใฆใ„ใ‚‹ `robots.txt` ใ‚’ๅˆฉ็”จใ—ใŸใ„ๅ ดๅˆใฏใ€`false` ใซ่จญๅฎšใ—ใฆ `static` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใƒ•ใ‚กใ‚คใƒซใ‚’็ฝฎใ„ใฆใใ ใ•ใ„ใ€‚ๅฎŒๅ…จใซใ‚ณใƒณใƒˆใƒญใƒผใƒซใ—ใŸใ„ๅ ดๅˆใฏใ€[ใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆ]({{< ref "content-examples" >}})ใ‚’ๆŒ‡ๅฎšใ—ใฆใ“ใฎใƒ•ใ‚กใ‚คใƒซใ‚’็”Ÿๆˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚| +|`pagination.pagerSize`|`10`|่จ˜ไบ‹ไธ€่ฆงใฎๅ„ใƒšใƒผใ‚ธใซๆŽฒ่ผ‰ใ•ใ‚Œใ‚‹่จ˜ไบ‹ใฎๆ•ฐใ€‚| +|`summaryLength`|`0`|่จ˜ไบ‹ใฎ่ฆ็ด„ใŒ[ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผ]({{< ref "front-matter" >}})ใงๆไพ›ใ•ใ‚Œใฆใ„ใชใ„ๅ ดๅˆใซใ€่จ˜ไบ‹ใฎ่ฆ็ด„ใ‚’็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใซไฝฟใ‚ใ‚Œใ‚‹ๅ˜่ชžใฎๆ•ฐใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆๅ€ค `0` ใฏๆœ€ๅˆใฎๆ–‡็ซ ใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚ใ“ใฎๅ€คใฏ่ฆ็ด„ใŒ้ž่กจ็คบใฎๅ ดๅˆใซใฏๅฝฑ้Ÿฟใ—ใพใ›ใ‚“ใ€‚| +|`outputs.home`|`["HTML", "RSS", "JSON"]`|็”Ÿๆˆใ•ใ‚Œใ‚‹ๅ‡บๅŠ›ใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใ€‚Congoใงใฏใ€ใ™ในใฆใฎใƒ†ใƒผใƒžใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใŒๆญฃใ—ใๅ‹•ไฝœใ™ใ‚‹ใŸใ‚ใซใ€HTMLใ€RSSใ€JSONใŒๅฟ…่ฆใงใ™ใ€‚| +|`permalinks`|_Not set_|ใƒ‘ใƒผใƒžใƒชใƒณใ‚ฏใฎ่จญๅฎšใฏ[Hugo docs](https://gohugo.io/content-management/urls/#permalinks)ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`taxonomies`|_Not set_|Taxonomiesใซใคใ„ใฆใฏใ€[ใ‚ณใƒณใƒ†ใƒณใƒ„ใฎๆ•ด็†]({{< ref "getting-started" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| + + +## ่จ€่ชžใจๅ›ฝ้š›ๅŒ– + +CongoใฏๅฎŒๅ…จใชๅคš่จ€่ชžใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆ็”จใซๆœ€้ฉๅŒ–ใ•ใ‚ŒใฆใŠใ‚Šใ€ใƒ†ใƒผใƒžใฎใ‚ขใ‚ปใƒƒใƒˆใฏใ™ใใซ่ค‡ๆ•ฐใฎ่จ€่ชžใซ็ฟป่จณใ•ใ‚Œใพใ™ใ€‚่จ€่ชž่จญๅฎšใซใ‚ˆใ‚Šใ€่ค‡ๆ•ฐใƒใƒผใ‚ธใƒงใƒณใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’็”Ÿๆˆใ—ใ€่จชๅ•่€…ใฎๆฏๅ›ฝ่ชžใงใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ•ใ‚ŒใŸใ‚จใ‚ฏใ‚นใƒšใƒชใ‚จใƒณใ‚นใ‚’ๆไพ›ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +Congoใฏ็พๅœจใ€ไปฅไธ‹ใฎ่จ€่ชžใซๅฏพๅฟœใ—ใฆใ„ใพใ™: + +| Language | Code | +| --------------------- | --------- | +| **English (default)** | `en` | +| Arabic | `ar` | +| Bengali | `bn` | +| Bulgarian | `bg` | +| Chinese - Simplified | `zh-Hans` | +| Chinese - Traditional | `zh-Hant` | +| Czech | `cs` | +| Dutch | `nl` | +| Finnish | `fi` | +| French | `fr` | +| German | `de` | +| Hebrew | `he` | +| Hungarian | `hu` | +| Indonesian | `id` | +| Italian | `it` | +| Japanese | `ja` | +| Korean | `ko` | +| Norwegian - Bokmรฅl | `nb` | +| Polish | `pl` | +| Portuguese (Brazil) | `pt-br` | +| Portuguese (Portugal) | `pt-pt` | +| Romanian | `ro` | +| Russian | `ru` | +| Slovak | `sk` | +| Spanish (Spain) | `es` | +| Swedish | `sv` | +| Tamil | `ta` | +| Turkish | `tr` | +| Ukrainian | `uk` | +| Vietnamese | `vi` | + +็ฟป่จณๆ–‡ๅญ—ๅˆ—ใ‚’ๅซใ‚€ใ‚ซใ‚นใ‚ฟใƒ ใƒ•ใ‚กใ‚คใƒซใ‚’ `i18n/[code].yaml` ใซไฝœๆˆใ™ใ‚‹ใ“ใจใงใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎ็ฟป่จณใ‚’ใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใงใใพใ™ใ€‚ใ“ใฎใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใฃใฆๆ–ฐใ—ใ„่จ€่ชžใ‚’่ฟฝๅŠ ใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ๆ–ฐใ—ใ„็ฟป่จณใ‚’ใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใจๅ…ฑๆœ‰ใ—ใŸใ„ๅ ดๅˆใ€[Pull Request](https://github.com/jpanther/congo/pulls)ใ‚’ไฝœใฃใฆใใ ใ•ใ„ใ€‚ + +### ่จญๅฎš + +ๅฏ่ƒฝใช้™ใ‚ŠๆŸ”่ปŸใซๅฏพๅฟœใ™ใ‚‹ใŸใ‚ใซใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎ่จ€่ชžใ”ใจใซ่จ€่ชž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€Congoใฏ `config/_default/languages.en.toml` ใซ่‹ฑ่ชžใฎ่จ€่ชž่จญๅฎšใ‚’ๅซใ‚“ใงใ„ใพใ™ใ€‚ + +่‹ฑ่ชžไปฅๅค–ใฎ่จ€่ชžใงใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใ‚’ไฝœๆˆใ—ใŸใ„ๅ ดๅˆใฏใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒ•ใ‚กใ‚คใƒซใ‚’ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใจใ—ใฆไฝฟ็”จใ—ใŸใ‚Šใ€ใƒ•ใ‚กใ‚คใƒซๅใ‚’ๅค‰ๆ›ดใ—ใŸใ‚Šใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใƒ•ใ‚กใ‚คใƒซๅใฏ `languages.[language-code].toml` ใจใ„ใ†ๅฝขๅผใซใ—ใฆใใ ใ•ใ„ใ€‚ + +{{< alert >}} +**ๆณจ่จ˜:** [ใ‚ตใ‚คใƒˆ่จญๅฎš](#ใ‚ตใ‚คใƒˆ่จญๅฎš)ใฎ `defaultContentLanguage` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใŒใ€่จ€่ชž่จญๅฎšใƒ•ใ‚กใ‚คใƒซๅใฎ `[language-code]` ใจไธ€่‡ดใ—ใฆใ„ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ +{{< /alert >}} + + +|Name|Default|Description| +|---|---|---| +|`languageCode`|`"en"`|ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฎ่จ€่ชžใ‚ณใƒผใƒ‰ใ€‚ใƒˆใƒƒใƒ—ใƒฌใƒ™ใƒซ่จ€่ชž (ไพ‹ `en`)ใพใŸใฏใ‚ตใƒ–ๅค‰ๆ•ฐ (ไพ‹ `en-AU`)ใงใ€ใƒ•ใ‚กใ‚คใƒซๅใฎ `[language-code]` ใจไธ€่‡ดใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚| +|`languageName`|`"English"`|่จ€่ชžๅใ€‚| +|`languageDirection`|`"ltr"`|RTL่จ€่ชžใ‹ใฉใ†ใ‹ใ€‚ `"rtl"` ใซ่จญๅฎšใ™ใ‚‹ใจใ€ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ๅณใ‹ใ‚‰ๅทฆใซใƒชใƒ•ใƒญใƒผใ™ใ‚‹ใ€‚CongoใฏRTL่จ€่ชžใจLTR่จ€่ชžใฎๅŒๆ™‚ไฝฟ็”จใ‚’ๅฎŒๅ…จใซใ‚ตใƒใƒผใƒˆใ—ใฆใŠใ‚Šใ€ๅ‹•็š„ใซไธกๆ–นใฎ่จ€่ชžใซ่ชฟๆ•ดใ—ใพใ™ใ€‚| +|`weight`|`1`|ๅคš่จ€่ชžใ‚ตใ‚คใƒˆใ‚’ๆง‹็ฏ‰ใ™ใ‚‹้š›ใฎๅ„ชๅ…ˆ้ †ๅบใ€‚| +|`title`|`"Congo"`|ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใ‚ฟใ‚คใƒˆใƒซใ€‚ใ‚ตใ‚คใƒˆใฎใƒ˜ใƒƒใƒ€ใƒผใจใƒ•ใƒƒใ‚ฟใƒผใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚| +|`copyright`|_Not set_|ใ‚ตใ‚คใƒˆใฎใƒ•ใƒƒใ‚ฟใƒผใซ่กจ็คบใ™ใ‚‹่‘—ไฝœๆจฉใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ๅซใ‚€Markdownๆ–‡ๅญ—ๅˆ—ใ€‚ไฝ•ใ‚‚ๆŒ‡ๅฎšใ•ใ‚Œใชใ„ๅ ดๅˆใ€Congoใฏ `title` ใ‚’ไฝฟใฃใฆ่‡ชๅ‹•็š„ใซใ‚ณใƒ”ใƒผใƒฉใ‚คใƒˆๆ–‡ๅญ—ๅˆ—ใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚| +|`params.dateFormat`|`"2 January 2006"`|ๆ—ฅไป˜ใฎๆ›ธๅผใ€‚่จฑๅฎนใ•ใ‚Œใ‚‹ๆ›ธๅผใซใคใ„ใฆใฏใ€[Hugo docs](https://gohugo.io/functions/format/#gos-layout-string)ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`params.mainSections`|_Not set_|ๆœ€่ฟ‘ใฎ่จ˜ไบ‹ใƒชใ‚นใƒˆใซ่กจ็คบใ™ใ‚‹ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ€‚ๆŒ‡ๅฎšใ•ใ‚Œใฆใ„ใชใ„ๅ ดๅˆใฏใ€่จ˜ไบ‹ใฎๆ•ฐใŒๆœ€ใ‚‚ๅคšใ„ใ‚ปใ‚ฏใ‚ทใƒงใƒณใŒไฝฟใ‚ใ‚Œใพใ™ใ€‚| +|`params.description`|_Not set_|ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎ่ชฌๆ˜Žใ€‚ใ“ใ‚Œใฏใ‚ตใ‚คใƒˆใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใซไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚| +|`params.author.name`|_Not set_|่‘—่€…ใฎๅๅ‰ใ€‚ใ“ใ‚Œใฏ่จ˜ไบ‹ใฎใƒ•ใƒƒใ‚ฟใƒผใจใ€ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใƒฌใ‚คใ‚ขใ‚ฆใƒˆใŒไฝฟ็”จใ•ใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใซใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚| +|`params.author.image`|_Not set_|่‘—่€…ใฎ็”ปๅƒใƒ•ใ‚กใ‚คใƒซใธใฎใƒ‘ใ‚นใ€‚็”ปๅƒใฏ็ธฆๆจชๆฏ”1:1ใงใ€ `assets/` ใซ็ฝฎใใ“ใจใ€‚| +|`params.author.headline`|_Not set_|่‘—่€…ใฎ่ฆ‹ๅ‡บใ—ใ‚’ๅซใ‚€Markdownๆ–‡ๅญ—ๅˆ—ใ€‚ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใฎใƒˆใƒƒใƒ—ใƒšใƒผใ‚ธใง่‘—่€…ใฎๅๅ‰ใฎไธ‹ใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚| +|`params.author.bio`|_Not set_|่‘—่€…ใฎ็ตŒๆญดใ‚’ๅซใ‚€Markdownๆ–‡ๅญ—ๅˆ—ใ€‚่จ˜ไบ‹ใฎใƒ•ใƒƒใ‚ฟใƒผใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚| +|`params.author.links`|_Not set_|่‘—่€…ใฎ่ฉณ็ดฐใจใจใ‚‚ใซ่กจ็คบใ™ใ‚‹ใƒชใƒณใ‚ฏใ€‚่จญๅฎšใƒ•ใ‚กใ‚คใƒซใซใฏใƒชใƒณใ‚ฏใฎไพ‹ใŒๅซใพใ‚ŒใฆใŠใ‚Šใ€ใ‚ณใƒกใƒณใƒˆใ‚’ๅค–ใ™ใ ใ‘ใงๆœ‰ๅŠนใซใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใƒชใƒณใ‚ฏใŒ่กจ็คบใ•ใ‚Œใ‚‹้ †็•ชใฏใ€้…ๅˆ—ใซ่กจ็คบใ•ใ‚Œใ‚‹้ †็•ชใซใ‚ˆใฃใฆๆฑบใพใ‚Šใพใ™ใ€‚ `assets/icons/` ใซๅฏพๅฟœใ™ใ‚‹SVGใ‚ขใ‚คใ‚ณใƒณใ‚’็”จๆ„ใ™ใ‚‹ใ“ใจใงใ€ใ‚ซใ‚นใ‚ฟใƒ ใƒชใƒณใ‚ฏใ‚’่ฟฝๅŠ ใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚| + + +### ใƒกใƒ‹ใƒฅใƒผ + +Congoใฏ่จ€่ชžๅˆฅใƒกใƒ‹ใƒฅใƒผ่จญๅฎšใ‚‚ใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใ‚‹ใ€‚ใƒกใƒ‹ใƒฅใƒผ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฏใ€่จ€่ชžใƒ•ใ‚กใ‚คใƒซใจๅŒใ˜ๅ‘ฝๅๅฝขๅผใซๅพ“ใฃใฆใ„ใพใ™ใ€‚ใƒ•ใ‚กใ‚คใƒซๅใซ่จ€่ชžใ‚ณใƒผใƒ‰ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใ ใ‘ใงใ€ใใฎใƒ•ใ‚กใ‚คใƒซใŒใฉใฎ่จ€่ชžใซ้–ข้€ฃใ™ใ‚‹ใ‹ใ‚’Hugoใซไผใˆใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +ใƒกใƒ‹ใƒฅใƒผ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฏ `menus.[language-code].toml` ใจใ„ใ†ๅฝขๅผใงๅ‘ฝๅใ•ใ‚Œใพใ™ใ€‚ `[language-code]` ใŒ่จญๅฎšใจไธ€่‡ดใ—ใฆใ„ใ‚‹ใ“ใจใ‚’ๅธธใซ็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ + +[ใฏใ˜ใ‚ใซ]({{< ref "getting-started#ใƒกใƒ‹ใƒฅใƒผ" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใงใ€ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฎๆง‹้€ ใซใคใ„ใฆ่ฉณใ—ใ่ชฌๆ˜Žใ—ใฆใ„ใพใ™ใ€‚ใพใŸใ€[Hugo menu docs](https://gohugo.io/content-management/menus/)ใซใ‚‚่จญๅฎšไพ‹ใŒใ‚ใ‚Šใพใ™ใ€‚ + +## ใƒ†ใƒผใƒžใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผ + +Congoใฏใƒ†ใƒผใƒžใฎๆฉŸ่ƒฝใ‚’ๅˆถๅพกใ™ใ‚‹ๅคšๆ•ฐใฎ่จญๅฎšใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ๆไพ›ใ—ใพใ™ใ€‚ไธ‹ใฎ่กจใฏ `config/_default/params.toml` ใƒ•ใ‚กใ‚คใƒซใงๅˆฉ็”จๅฏ่ƒฝใชใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฎๆฆ‚่ฆใงใ™ใ€‚ + +ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฎๅคšใใฏใ€ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใงๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใงใ€่จ˜ไบ‹ใ”ใจใซไธŠๆ›ธใใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚่ฉณใ—ใใฏใ€[ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผ]({{< ref "front-matter" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚ + + +|Name|Default|Description| +|---|---|---| +|`colorScheme`|`"congo"`|ไฝฟ็”จใ™ใ‚‹้…่‰ฒใ€‚ๆœ‰ๅŠนใชๅ€คใฏ `congo` (ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ), `avocado`, `cherry`, `fire`, `ocean`, `sapphire`, `slate` ใงใ™ใ€‚่ฉณใ—ใใฏ [ใ‚ซใƒฉใƒผใ‚นใ‚ญใƒผใƒ ]({{< ref "getting-started#ใ‚ซใƒฉใƒผใ‚นใ‚ญใƒผใƒ " >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`defaultThemeColor`|`"#FFFFFF"`|ใพใ ็ฟป่จณใ•ใ‚Œใฆใ„ใพใ›ใ‚“ใ€‚| +|`defaultAppearance`|`"light"`|ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒ†ใƒผใƒžๅค–่ฆณใ€ `light` ใพใŸใฏ `dark` ใฎใ„ใšใ‚Œใ‹ใ€‚| +|`autoSwitchAppearance`|`true`|ใƒ†ใƒผใƒžใฎๅค–่ฆณใ‚’่จชๅ•่€…ใฎใ‚ชใƒšใƒฌใƒผใƒ†ใ‚ฃใƒณใ‚ฐใ‚ทใ‚นใƒ†ใƒ ใฎ่จญๅฎšใซๅŸบใฅใ„ใฆ่‡ชๅ‹•็š„ใซๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹ใ‹ใฉใ†ใ‹ใ€‚ๅธธใซ `defaultAppearance` ใ‚’ไฝฟใ†ใ‚ˆใ†ใซใ™ใ‚‹ใซใฏ `false` ใ‚’่จญๅฎšใ—ใพใ™ใ€‚| +|`enableSearch`|`false`|ใ‚ตใ‚คใƒˆๅ†…ๆคœ็ดขใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚ๆคœ็ดขๆฉŸ่ƒฝใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏ `true` ใ‚’่จญๅฎšใ—ใพใ™ใ€‚ๆคœ็ดขๆฉŸ่ƒฝใฏใ€[ใ‚ตใ‚คใƒˆ่จญๅฎš](#ใ‚ตใ‚คใƒˆ่จญๅฎš)ใฎ `outputs.home` ใŒๆญฃใ—ใ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹ใ‹ใฉใ†ใ‹ใซไพๅญ˜ใ™ใ‚‹ใ“ใจใซๆณจๆ„ใ—ใฆใใ ใ•ใ„ใ€‚| +|`enableCodeCopy`|`false`|`` ใƒ–ใƒญใƒƒใ‚ฏใซๅฏพใ—ใฆใ‚ฏใƒชใƒƒใƒ—ใƒœใƒผใƒ‰ใธใฎใ‚ณใƒ”ใƒผใƒœใ‚ฟใƒณใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚ `highlight.noClasses` ใŒ `false` ใซ่จญๅฎšใ•ใ‚Œใฆใ„ใชใ‘ใ‚Œใฐใ€ใ‚ณใƒผใƒ‰ใ‚ณใƒ”ใƒผใฏๆญฃใ—ใๆฉŸ่ƒฝใ—ใพใ›ใ‚“ใ€‚[ใใฎไป–ใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซ](#ใใฎไป–ใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซ)ใซใคใ„ใฆใฏไปฅไธ‹ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`enableImageLazyLoading`|`true`|ใƒ–ใƒฉใ‚ฆใ‚ถใŒ้…ๅปถใƒญใƒผใƒ‰ใ™ใ‚‹ใ‚ˆใ†ใซ็”ปๅƒใ‚’ใƒžใƒผใ‚ฏใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`robots`|_Not set_|ใƒญใƒœใƒƒใƒˆใŒใ‚ใชใŸใฎใ‚ตใ‚คใƒˆใ‚’ใฉใฎใ‚ˆใ†ใซๆ‰ฑใ†ในใใ‹ใ‚’็คบใ™ๆ–‡ๅญ—ๅˆ—ใ€‚่จญๅฎšใ•ใ‚ŒใŸๅ ดๅˆใ€ `` ใซๅ‡บๅŠ›ใ•ใ‚Œใพใ™ใ€‚ๆœ‰ๅŠนใชๅ€คใซใคใ„ใฆใฏ[Googleใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives)ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`fingerprintAlgorithm`|`"sha256"`|`assets` ใซใƒ•ใ‚ฃใƒณใ‚ฌใƒผใƒ—ใƒชใƒณใƒˆใ‚’่กŒใ†้š›ใฎใƒใƒƒใ‚ทใƒฅใ‚ขใƒซใ‚ดใƒชใ‚บใƒ ใ€‚ๆœ‰ๅŠนใชใ‚ชใƒ—ใ‚ทใƒงใƒณใฏ `md5`ใ€`sha256`ใ€`sha384` ใŠใ‚ˆใณ `sha512` ใงใ™ใ€‚| +|`header.layout`|`"basic"`|ใƒ˜ใƒƒใƒ€ใƒผใจใƒกใƒ‹ใƒฅใƒผใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ€‚ๆœ‰ๅŠนใชๅ€คใฏ `basic`ใ€`hamburger`ใ€`hybrid`ใพใŸใฏ`custom`ใงใ™ใ€‚ `custom` ใซ่จญๅฎšใ—ใŸๅ ดๅˆใฏใ€ `/layouts/partials/header/custom.html` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใฆ็‹ฌ่‡ชใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚| +|`header.logo`|_Not set_|`assets/` ๅ†…ใฎใƒญใ‚ดใƒ•ใ‚กใ‚คใƒซใธใฎ็›ธๅฏพใƒ‘ใ‚นใ€‚ใƒญใ‚ดใƒ•ใ‚กใ‚คใƒซใฏ2ๅ€ใฎ่งฃๅƒๅบฆใงๆไพ›ใ•ใ‚Œใ€ไปปๆ„ใฎ็”ปๅƒใ‚ตใ‚คใ‚บใซๅฏพๅฟœใ—ใฆใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚| +|`header.logoDark`|_Not set_|`dark` ใƒขใƒผใƒ‰ๆ™‚ใซไฝฟ็”จใ•ใ‚Œใ‚‹ใƒญใ‚ดใƒ•ใ‚กใ‚คใƒซใธใฎ็›ธๅฏพใƒ‘ใ‚นใ€‚| +|`header.showTitle`|`true`|ใ‚ตใ‚คใƒˆใฎใ‚ฟใ‚คใƒˆใƒซใ‚’ใƒ˜ใƒƒใƒ€ใƒผใซ่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`footer.showCopyright`|`true`|ใ‚ตใ‚คใƒˆใƒ•ใƒƒใ‚ฟใƒผใซใ‚ณใƒ”ใƒผใƒฉใ‚คใƒˆๆ–‡ๅญ—ๅˆ—ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚[่จ€่ชžใจๅ›ฝ้š›ๅŒ–](#่จ€่ชžใจๅ›ฝ้š›ๅŒ–)ใฎ `copyright` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไฝฟใฃใฆๆ–‡ๅญ—ๅˆ—่‡ชไฝ“ใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใงใใพใ™ใ€‚| +|`footer.showThemeAttribution`|`true`|"Powered by Hugo & Congo" ใจใ„ใฃใŸๅธฐๅฑž่กจ็คบใ‚’ใƒ•ใƒƒใ‚ฟใƒผใซ่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚ใ“ใฎ่กจ็คบใ‚’็„กๅŠนใซใ™ใ‚‹ๅ ดๅˆใฏใ€ใ‚ตใ‚คใƒˆไธŠใฎไป–ใฎๅ ดๆ‰€๏ผˆไพ‹ใˆใฐใ€ใ‚ขใƒใ‚ฆใƒˆใƒšใƒผใ‚ธใชใฉ๏ผ‰ใงใƒ†ใƒผใƒžใฎๅธฐๅฑžใ‚’่กจ็คบใ™ใ‚‹ใ“ใจใ‚’ๆคœ่จŽใ—ใฆใใ ใ•ใ„ใ€‚| +|`footer.showAppearanceSwitcher`|`false`|ใƒ•ใƒƒใ‚ฟใƒผใซๅค–่ฆณใ‚นใ‚คใƒƒใƒใƒฃใƒผใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚่จชๅ•่€…ใฎ่จญๅฎšใ‚’ไฟๆŒใ™ใ‚‹ใŸใ‚ใซใƒ–ใƒฉใ‚ฆใ‚ถใฎใƒญใƒผใ‚ซใƒซใ‚นใƒˆใƒฌใƒผใ‚ธใŒไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚| +|`footer.showScrollToTop`|`true`|`true` ใซ่จญๅฎšใ™ใ‚‹ใจใ€ๆœ€ไธŠ้ƒจใซใ‚นใ‚ฏใƒญใƒผใƒซใ™ใ‚‹็ŸขๅฐใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚| +|`homepage.layout`|`"page"`|ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ€‚ๆœ‰ๅŠนใชๅ€คใฏ `page`, `profile` ใพใŸใฏ `custom` ใงใ™ใ€‚ `custom` ใซ่จญๅฎšใ—ใŸๅ ดๅˆใฏใ€ `/layouts/partials/home/custom.html` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใฆใ€็‹ฌ่‡ชใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚่ฉณใ—ใใฏ[ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆ]({{< ref "homepage-layout" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`homepage.showRecent`|`false`|ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใซๆœ€่ฟ‘ใฎ่จ˜ไบ‹ใƒชใ‚นใƒˆใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`homepage.recentLimit`|`5`|`homepage.showRecent` ใŒ `true` ใฎๅ ดๅˆใซ่กจ็คบใ™ใ‚‹ๆœ€่ฟ‘ใฎ่จ˜ไบ‹ใฎๆœ€ๅคงๆ•ฐใ€‚| +|`article.showDate`|`true`|่จ˜ไบ‹ใŒไฝœๆˆใ•ใ‚ŒใŸๆ—ฅไป˜ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showDateUpdated`|`false`|่จ˜ไบ‹ใŒๆ›ดๆ–ฐใ•ใ‚ŒใŸๆ—ฅไป˜ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showAuthor`|`true`|่จ˜ไบ‹ใƒ•ใƒƒใ‚ฟใƒผใซ่‘—่€…ๆฌ„ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showBreadcrumbs`|`false`|่จ˜ไบ‹ใฎใƒ˜ใƒƒใƒ€ใƒผใซใƒ‘ใƒณใใšใƒชใ‚นใƒˆใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showDraftLabel`|`true`|`--buildDrafts` ใงใƒ“ใƒซใƒ‰ใ—ใŸใจใใซใ€่จ˜ไบ‹ใฎๆจชใซไธ‹ๆ›ธใใ‚คใƒณใ‚ธใ‚ฑใƒผใ‚ฟใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showEdit`|`false`|่จ˜ไบ‹ใฎๅ†…ๅฎนใ‚’็ทจ้›†ใ™ใ‚‹ใŸใ‚ใฎใƒชใƒณใ‚ฏใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.editURL`|_Not set_|`article.showEdit` ใŒใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–ใชๅ ดๅˆใฎ็ทจ้›†ใƒชใƒณใ‚ฏใฎURLใ€‚| +|`article.editAppendPath`|`true`|`article.editURL`ใง่จญๅฎšใ•ใ‚ŒใŸURLใซ็พๅœจใฎ่จ˜ไบ‹ใธใฎใƒ‘ใ‚นใ‚’่ฟฝๅŠ ใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showHeadingAnchors`|`true`|่ฆ‹ๅ‡บใ—ใ‚ขใƒณใ‚ซใƒผใƒชใƒณใ‚ฏใ‚’่จ˜ไบ‹ๅ†…ใฎ่ฆ‹ๅ‡บใ—ใจไธ€็ท’ใซ่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showPagination`|`true`|่จ˜ไบ‹ใฎใƒ•ใƒƒใ‚ฟใƒผใซๆฌก/ๅ‰ใฎ่จ˜ไบ‹ใƒชใƒณใ‚ฏใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.invertPagination`|`false`|ๆฌกใฎ่จ˜ไบ‹/ๅ‰ใฎ่จ˜ไบ‹ใƒชใƒณใ‚ฏใฎๅ‘ใใ‚’ๅ่ปขใ•ใ›ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showReadingTime`|`true`|่จ˜ไบ‹ใฎไบˆๆƒณ่ชญไบ†ๆ™‚้–“ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showTableOfContents`|`false`|่จ˜ไบ‹ใซ็›ฎๆฌกใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showTaxonomies`|`false`|ใ“ใฎ่จ˜ไบ‹ใซ้–ข้€ฃใ™ใ‚‹Taxonomiesใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showWordCount`|`false`|่จ˜ไบ‹ใฎๅ˜่ชžๆ•ฐใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.showComments`|`false`|[ใ‚ณใƒกใƒณใƒˆ]({{< ref "partials#ใ‚ณใƒกใƒณใƒˆ" >}})ใ‚’่จ˜ไบ‹ใƒ•ใƒƒใ‚ฟใƒผใฎๅพŒใซๅซใ‚ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`article.sharingLinks`|_Not set_|ๅ„่จ˜ไบ‹ใฎๆœ€ๅพŒใซๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚ `false` ใซใ™ใ‚‹ใจๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใฏ่กจ็คบใ•ใ‚Œใพใ›ใ‚“ใ€‚| +|`list.showBreadcrumbs`|`false`|ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใฎใƒ˜ใƒƒใƒ€ใƒผใซใƒ‘ใƒณใใšใƒชใ‚นใƒˆใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`list.showTableOfContents`|`false`|ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใซ็›ฎๆฌกใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`list.showTaxonomies`|`false`|ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใซ้–ข้€ฃใ™ใ‚‹Taxonomiesใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`list.showSummary`|`false`|ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใซ่จ˜ไบ‹ใฎ่ฆ็ด„ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚ใ‚‚ใ—[ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผ]({{< ref "front-matter" >}})ใง่ฆ็ด„ใŒๆไพ›ใ•ใ‚Œใฆใ„ใชใ„ๅ ดๅˆใ€[ใ‚ตใ‚คใƒˆ่จญๅฎš](#ใ‚ตใ‚คใƒˆ่จญๅฎš)ใฎ `summaryLength` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไฝฟใฃใฆ่ฆ็ด„ใŒ่‡ชๅ‹•็”Ÿๆˆใ•ใ‚Œใพใ™ใ€‚| +|`list.groupByYear`|`true`|ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใง่จ˜ไบ‹ใ‚’ๅนดใ”ใจใซใ‚ฐใƒซใƒผใƒ—ๅŒ–ใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`list.paginationWidth`|`1`|ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใ‚’ๅˆ‡ใ‚Š่ฉฐใ‚ใ‚‹้š›ใซใ€็พๅœจใฎใƒšใƒผใ‚ธใฎไธกๅดใซใ„ใใคใฎใƒšใƒผใ‚ธใƒใƒผใ‚ทใƒงใƒณใƒชใƒณใ‚ฏใ‚’ๅ‡บๅŠ›ใ™ใ‚‹ใ‹ใ€‚ `1` ใฎๅ ดๅˆใ€็พๅœจใฎใƒšใƒผใ‚ธใฎไธกๅดใซ1ใคใฎใƒชใƒณใ‚ฏใ‚’ๅ‡บๅŠ›ใ—ใพใ™ใ€‚ _ๆœ€ๅˆใฎใƒšใƒผใ‚ธ_ ใจ _ๆœ€ๅพŒใฎใƒšใƒผใ‚ธ_ ใธใฎใƒชใƒณใ‚ฏใฏๅธธใซ่กจ็คบใ•ใ‚Œใ€ใ“ใฎๅ€คใซ่ฟฝๅŠ ใ•ใ‚Œใพใ™ใ€‚| +|`sitemap.excludedKinds`|`["taxonomy", "term"]`|็”Ÿๆˆใ•ใ‚Œใ‚‹ `/sitemap.xml` ใ‹ใ‚‰้™คๅค–ใ•ใ‚Œใ‚‹ในใใ‚ณใƒณใƒ†ใƒณใƒ„ใฎ็จฎ้กžใ€‚่จฑๅฎนใ•ใ‚Œใ‚‹ๅ€คใซใคใ„ใฆใฏ[Hugo docs](https://gohugo.io/templates/section-templates/#page-kinds)ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`taxonomy.showTermCount`|`true`|Taxonomiesใฎใƒชใ‚นใƒˆใซTermใ”ใจใฎ่จ˜ไบ‹ๆ•ฐใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`fathomAnalytics.site`|_Not set_|Fathom Analyticsใซใ‚ˆใฃใฆ็”Ÿๆˆใ•ใ‚ŒใŸใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใ‚ตใ‚คใƒˆใ‚ณใƒผใƒ‰ใ€‚่ฉณ็ดฐใฏ[ใ‚ขใƒŠใƒชใƒ†ใ‚ฃใ‚ฏใ‚น]({{< ref "partials#ใ‚ขใƒŠใƒชใƒ†ใ‚ฃใ‚ฏใ‚น" >}})ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`verification.google`|_Not set_|ใ‚ตใ‚คใƒˆใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใซๅซใ‚ใ‚‹GoogleใŒๆไพ›ใ™ใ‚‹ใ‚ตใ‚คใƒˆๆคœ่จผๆ–‡ๅญ—ๅˆ—ใ€‚| +|`verification.bing`|_Not set_|ใ‚ตใ‚คใƒˆใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใซๅซใ‚ใ‚‹BingใŒๆไพ›ใ™ใ‚‹ใ‚ตใ‚คใƒˆๆคœ่จผๆ–‡ๅญ—ๅˆ—ใ€‚| +|`verification.pinterest`|_Not set_|ใ‚ตใ‚คใƒˆใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใซๅซใ‚ใ‚‹PinterestใŒๆไพ›ใ™ใ‚‹ใ‚ตใ‚คใƒˆๆคœ่จผๆ–‡ๅญ—ๅˆ—ใ€‚| +|`verification.yandex`|_Not set_|ใ‚ตใ‚คใƒˆใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใซๅซใ‚ใ‚‹YandexใŒๆไพ›ใ™ใ‚‹ใ‚ตใ‚คใƒˆๆคœ่จผๆ–‡ๅญ—ๅˆ—ใ€‚| + + +## ใใฎไป–ใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซ + +ใ“ใฎใƒ†ใƒผใƒžใซใฏ `markup.toml` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚‚ๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ใ“ใฎใƒ•ใ‚กใ‚คใƒซใซใฏใ„ใใคใ‹ใฎ้‡่ฆใชใƒ‘ใƒฉใƒกใƒผใ‚ฟใŒๅซใพใ‚ŒใฆใŠใ‚Šใ€Congoใงๆง‹็ฏ‰ใ•ใ‚ŒใŸใ‚ตใ‚คใƒˆใ‚’็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใซHugoใŒๆญฃใ—ใ่จญๅฎšใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใ—ใพใ™ใ€‚ + +ใ“ใฎใƒ•ใ‚กใ‚คใƒซใŒconfigใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซๅญ˜ๅœจใ—ใ€ๅฟ…่ฆใชๅ€คใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใ‚’ๅธธใซ็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ใ“ใ‚Œใ‚’่กŒใ‚ใชใ„ใจใ€็‰นๅฎšใฎๆฉŸ่ƒฝใŒๆญฃใ—ใๅ‹•ไฝœใ—ใชใ‹ใฃใŸใ‚Šใ€ๆ„ๅ›ณใ—ใชใ„ๅ‹•ไฝœใซใชใฃใŸใ‚Šใ™ใ‚‹ๅฏ่ƒฝๆ€งใŒใ‚ใ‚Šใพใ™ใ€‚ diff --git a/themes/congo/exampleSite/content/docs/configuration/index.md b/themes/congo/exampleSite/content/docs/configuration/index.md new file mode 100644 index 0000000..532e7ce --- /dev/null +++ b/themes/congo/exampleSite/content/docs/configuration/index.md @@ -0,0 +1,196 @@ +--- +title: "Configuration" +date: 2020-08-14 +draft: false +description: "All the configuration variables available in Congo." +summary: "Discover all the site, language and theme configurations that are available in Congo and how they can be used to customise your project." +slug: "configuration" +tags: ["config", "docs"] +--- + +Congo is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured. + +The theme ships with a default configuration that gets you up and running with a basic blog or static website. + +> Configuration files bundled with the theme are provided in TOML format as this is the default Hugo syntax. Feel free to convert your config to YAML or JSON if you wish. + +The default theme configuration is documented in each file so you can freely adjust the settings to meet your needs. + +{{< alert >}} +As outlined in the [installation instructions]({{< ref "/docs/installation#set-up-theme-configuration-files" >}}), you should adjust your theme configuration by modifying the files in the `config/_default/` folder of your Hugo project and delete the `hugo.toml` file in your project root. +{{< /alert >}} + +## Site configuration + +Standard Hugo configuration variables are respected throughout the theme, however there are some specific things that should be configured for the best experience. + +The site configuration is managed through the `config/_default/hugo.toml` file. The table below outlines all the settings that the Congo takes advantage of. + +Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. `outputs.home` refers to `[outputs] home`). + + +|Name|Default|Description| +|---|---|---| +|`theme`|`"congo"`|When using Hugo Modules this config value should be removed. For all other installation types, this must be set to `congo` for the theme to function.| +|`baseURL`|_Not set_|The URL to the root of the website.| +|`defaultContentLanguage`|`"en"`|This value determines the default language of theme components and content. Refer to the [language and i18n](#language-and-i18n) section below for supported language codes.| +|`enableRobotsTXT`|`true`|When enabled, a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. If you prefer to provide your own pre-made `robots.txt`, set to `false` and place your file in the `static` directory. For complete control, you may provide a [custom layout]({{< ref "content-examples#custom-layouts" >}}) to generate this file.| +|`pagination.pagerSize`|`10`|The number of articles listed on each page of the article listing.| +|`summaryLength`|`0`|The number of words that are used to generate the article summary when one is not provided in the [front matter]({{< ref "front-matter" >}}). A value of `0` will use the first sentence. This value has no effect when summaries are hidden.| +|`outputs.home`|`["HTML", "RSS", "JSON"]`|The output formats that are generated for the site. Congo requires HTML, RSS and JSON for all theme components to work correctly.| +|`permalinks`|_Not set_|Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration.| +|`taxonomies`|_Not set_|Refer to the [Organising content]({{< ref "getting-started#organising-content" >}}) section for taxonomy configuration.| + + +## Language and i18n + +Congo is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language. + +The theme currently supports the following languages out of the box: + +| Language | Code | +| --------------------- | --------- | +| **English (default)** | `en` | +| Arabic | `ar` | +| Bengali | `bn` | +| Bulgarian | `bg` | +| Chinese - Simplified | `zh-Hans` | +| Chinese - Traditional | `zh-Hant` | +| Czech | `cs` | +| Dutch | `nl` | +| Finnish | `fi` | +| French | `fr` | +| German | `de` | +| Hebrew | `he` | +| Hungarian | `hu` | +| Indonesian | `id` | +| Italian | `it` | +| Japanese | `ja` | +| Korean | `ko` | +| Norwegian - Bokmรฅl | `nb` | +| Polish | `pl` | +| Portuguese (Brazil) | `pt-br` | +| Portuguese (Portugal) | `pt-pt` | +| Romanian | `ro` | +| Russian | `ru` | +| Slovak | `sk` | +| Spanish (Spain) | `es` | +| Swedish | `sv` | +| Tamil | `ta` | +| Turkish | `tr` | +| Ukrainian | `uk` | +| Vietnamese | `vi` | + +The default translations can be overridden by creating a custom file in `i18n/[code].yaml` that contains the translation strings. You can also use this method to add new languages. If you'd like to share a new translation with the community, please [open a pull request](https://github.com/jpanther/congo/pulls). + +### Configuration + +In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Congo includes an English language configuration at `config/_default/languages.en.toml`. + +The default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format `languages.[language-code].toml`. + +{{< alert >}} +**Note:** Ensure the `defaultContentLanguage` parameter in the [site configuration](#site-configuration) matches the language code in your language config filename. +{{< /alert >}} + + +|Name|Default|Description| +|---|---|---| +|`languageCode`|`"en"`|The Hugo language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`) and should match the language code in the filename.| +|`languageName`|`"English"`|The name of the language.| +|`languageDirection`|`"ltr"`|Whether or not this is an RTL language. Set to `"rtl"` to reflow content from right-to-left. Congo fully supports using RTL and LTR languages at the same time and will dynamically adjust to both.| +|`weight`|`1`|The weight determines the order of languages when building multilingual sites.| +|`title`|`"Congo"`|The title of the website. This will be displayed in the site header and footer.| +|`copyright`|_Not set_|A Markdown string containing the copyright message to be displayed in the site footer. If none is provided, Congo will automatically generate a copyright string using the site `title`.| +|`params.dateFormat`|`"2 January 2006"`|How dates are formatted in this language. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats.| +|`params.mainSections`|_Not set_|The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used.| +|`params.description`|_Not set_|The website description. This will be used in the site metadata.| +|`params.author.name`|_Not set_|The author's name. This will be displayed in article footers, and on the homepage when the profile layout is used.| +|`params.author.image`|_Not set_|Path to the image file of the author. The image should be a 1:1 aspect ratio and placed in the site's `assets/` folder.| +|`params.author.headline`|_Not set_|A Markdown string containing the author's headline. It will be displayed on the profile homepage under the author's name.| +|`params.author.bio`|_Not set_|A Markdown string containing the author's bio. It will be displayed in article footers.| +|`params.author.links`|_Not set_|The links to display alongside the author's details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in `assets/icons/`.| + + +### Menus + +Congo also supports language-specific menu configurations. Menu config files follow the same naming format as the languages file. Simply provide the language code in the file name to tell Hugo which language the file relates to. + +Menu config files are named with the format `menus.[language-code].toml`. Always ensure that the language code used in the menus configuration matches the languages configuration. + +The [Getting Started]({{< ref "getting-started#menus" >}}) section explains more about the structure of this file. You can also refer to the [Hugo menu docs](https://gohugo.io/content-management/menus/) for more configuration examples. + +## Theme parameters + +Congo provides a large number of configuration parameters that control how the theme functions. The table below outlines every available parameter in the `config/_default/params.toml` file. + +Many of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the [Front Matter]({{< ref "front-matter" >}}) section for further details. + + +|Name|Default|Description| +|---|---|---| +|`colorScheme`|`"congo"`|The theme colour scheme to use. Valid values are `congo` (default), `avocado`, `cherry`, `fire`, `ocean`, `sapphire` and `slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details.| +|`defaultThemeColor`|`"#FFFFFF"`|The original value (before any scripts modify it) to use for the `theme-color` meta tag. The meta tag will be changed based on the theme (`light` or `dark`) but it is useful for services that source the original value this tag to display an accent color (e.g. Discord)| +|`defaultAppearance`|`"light"`|The default theme appearance, either `light` or `dark`.| +|`autoSwitchAppearance`|`true`|Whether the theme appearance automatically switches based upon the visitor's operating system preference. Set to `false` to force the site to always use the `defaultAppearance`.| +|`enableSearch`|`false`|Whether site search is enabled. Set to `true` to enable search functionality. Note that the search feature depends on the `outputs.home` setting in the [site configuration](#site-configuration) being set correctly.| +|`enableCodeCopy`|`false`|Whether copy-to-clipboard buttons are enabled for `` blocks. The `highlight.noClasses` parameter must be set to `false` for code copy to function correctly. Read more about [other configuration files](#other-configuration-files) below.| +|`enableImageLazyLoading`|`true`|Whether images should be marked for lazy loading by the browser.| +|`enableImageWebp`|`true`|Whether images should be output in the more performant WebP format.| +|`enableQuicklink`|`true`|Whether the [Quicklink](https://getquick.link/) library should be included in the site. Quicklink prefetches links based upon the user's viewport and leads to faster page navigation.| +|`robots`|_Not set_|String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.| +|`fingerprintAlgorithm`|`"sha256"`|String that indicates which hashing algorithm is used when fingerprinting assets. Valid options include `md5`, `sha256`, `sha384` and `sha512`.| +|`header.layout`|`"basic"`|The layout of the page header and menu. Valid values are `basic`, `hamburger`, `hybrid` or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/header/custom.html` file.| +|`header.logo`|_Not set_|The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions.| +|`header.logoDark`|_Not set_|As per the `header.logo` parameter, however this image is used whenever dark mode is active.| +|`header.showTitle`|`true`|Whether the site title is displayed in the header.| +|`footer.showCopyright`|`true`|Whether or not to show the copyright string in the site footer. Note that the string itself can be customised using the `copyright` parameter in the [languages configuration](#language-and-i18n).| +|`footer.showThemeAttribution`|`true`|Whether or not to show the "powered by" theme attribution in the site footer. If you choose to disable this message, please consider attributing the theme somewhere else on your site (for example, on your about page).| +|`footer.showAppearanceSwitcher`|`false`|Whether or not to show the appearance switcher in the site footer. The browser's local storage is used to persist the visitor's preference.| +|`footer.showScrollToTop`|`true`|When set to `true` the scroll to top arrow is displayed.| +|`homepage.layout`|`"page"`|The layout of the homepage. Valid values are `page`, `profile` or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/home/custom.html` file. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details.| +|`homepage.showRecent`|`false`|Whether or not to display the recent articles list on the homepage.| +|`homepage.recentLimit`|`5`|The maximum number of recent articles to display when `homepage.showRecent` is `true`.| +|`article.showDate`|`true`|Whether or not article dates are displayed.| +|`article.showDateUpdated`|`false`|Whether or not the dates articles were updated are displayed.| +|`article.showAuthor`|`true`|Whether or not the author box is displayed in the article footer.| +|`article.showBreadcrumbs`|`false`|Whether or not breadcrumbs are displayed in the article header.| +|`article.showDraftLabel`|`true`|Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`.| +|`article.showEdit`|`false`|Whether or not the link to edit the article content should be displayed.| +|`article.editURL`|_Not set_|When `article.showEdit` is active, the URL for the edit link.| +|`article.editAppendPath`|`true`|When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`.| +|`article.showHeadingAnchors`|`true`|Whether or not heading anchor links are displayed alongside headings within articles.| +|`article.showPagination`|`true`|Whether or not the next/previous article links are displayed in the article footer.| +|`article.invertPagination`|`false`|Whether or not to flip the direction of the next/previous article links.| +|`article.showReadingTime`|`true`|Whether or not article reading times are displayed.| +|`article.showTableOfContents`|`false`|Whether or not the table of contents is displayed on articles.| +|`article.showTaxonomies`|`false`|Whether or not the taxonomies related to this article are displayed.| +|`article.showWordCount`|`false`|Whether or not article word counts are displayed.| +|`article.showComments`|`false`|Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer.| +|`article.sharingLinks`|_Not set_|An array of sharing links to display at the end of each article. Valid options include `facebook`, `x-twitter`, `mastodon`, `pinterest`, `reddit`, `linkedin`, `email`, `threads`, `telegram`, `line`, `weibo`, `xing` and `bluesky`. When not provided, or set to `false`, no links will be displayed.| +|`list.showBreadcrumbs`|`false`|Whether or not breadcrumbs are displayed in the header on list pages.| +|`list.showTableOfContents`|`false`|Whether or not the table of contents is displayed on list pages.| +|`list.showTaxonomies`|`false`|Whether or not the taxonomies related to this article are displayed on list pages.| +|`list.showSummary`|`false`|Whether or not article summaries are displayed on list pages. If a summary is not provided in the [front matter]({{< ref "front-matter" >}}), one will be auto generated using the `summaryLength` parameter in the [site configuration](#site-configuration).| +|`list.groupByYear`|`true`|Whether or not articles are grouped by year on list pages.| +|`list.paginationWidth`|`1`|How many pagination links to output either side of the current page when the page list needs to be truncated. A width of `1` will output one link either side of the current page when the list needs to be truncated. Links to the current, first and last pages are always displayed and are in addition to this value.| +|`sitemap.excludedKinds`|`["taxonomy", "term"]`|Kinds of content that should be excluded from the generated `/sitemap.xml` file. Refer to the [Hugo docs](https://gohugo.io/templates/section-templates/#page-kinds) for acceptable values.| +|`taxonomy.showTermCount`|`true`|Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing.| +|`fathomAnalytics.site`|_Not set_|The site code generated by Fathom Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.| +|`plausibleAnalytics.domain`|_Not set_|Enter the domain of the website you want to track. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.| +|`plausibleAnalytics.event`|_Not set_|Plausible api event proxied URL. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.| +|`plausibleAnalytics.script`|_Not set_|Plausible analysis script proxied URL. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.| +|`umamiAnalytics.site`|_Not set_|The tracking code generated by Umami Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.| +|`umamiAnalytics.region`|`eu`|Select the Umami Analytics server region to connect to. The value is a string that can be either `eu` or `us`.| +|`umamiAnalytics.script`|_Not set_|Custom script URL for Umami Analytics. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.| +|`verification.google`|_Not set_|The site verification string provided by Google to be included in the site metadata.| +|`verification.bing`|_Not set_|The site verification string provided by Bing to be included in the site metadata.| +|`verification.pinterest`|_Not set_|The site verification string provided by Pinterest to be included in the site metadata.| +|`verification.yandex`|_Not set_|The site verification string provided by Yandex to be included in the site metadata.| + + +## Other configuration files + +The theme also includes a `markup.toml` configuration file. This file contains some important parameters that ensure that Hugo is correctly configured to generate sites built with Congo. + +Always ensure this file is present in the config directory and that the required values are set. Failure to do so may cause certain features to function incorrectly and could result in unintended behaviour. diff --git a/themes/congo/exampleSite/content/docs/configuration/index.zh-Hans.md b/themes/congo/exampleSite/content/docs/configuration/index.zh-Hans.md new file mode 100644 index 0000000..005bd08 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/configuration/index.zh-Hans.md @@ -0,0 +1,192 @@ +--- +title: "ๅŸบๆœฌ้…็ฝฎ" +date: 2020-08-14 +draft: false +description: "Congoไธญๆ‰€ๆœ‰ๅฏไฝฟ็”จ็š„่ฎพๅฎšๅ˜้‡" +summary: "ๆŽข็ดขไธ€ไธ‹ Congo ไธญๆ‰€ๆœ‰็š„็ซ™็‚นใ€่ฏญ่จ€ๅ’Œไธป้ข˜้…็ฝฎๅ˜้‡๏ผŒไปฅๅŠๅฆ‚ไฝ•็”จไบŽ่‡ชๅฎšไน‰ไฝ ็š„้กน็›ฎใ€‚" +slug: "configuration" +tags: ["config", "docs"] +--- + +Congo ๆ˜ฏไธ€ไธช้ซ˜ๅบฆๅฏๅฎšๅˆถ็š„ไธป้ข˜๏ผŒๅˆฉ็”จไธ€ไบ›ๆœ€ๆ–ฐ็š„ Hugo ็‰นๆ€งๆฅ็ฎ€ๅŒ–้…็ฝฎ่ฟ‡็จ‹ใ€‚ + +่ฏฅไธป้ข˜้™„ๅธฆไบ†ไธ€ไธช้ป˜่ฎค้…็ฝฎ๏ผŒ่ฎฉไฝ ๅฏไปฅๅฟซ้€ŸๅฏๅŠจไธ€ไธชๅŸบๆœฌ็š„ๅšๅฎขๆˆ–้™ๆ€็ฝ‘็ซ™ใ€‚ + +> ไธป้ข˜้™„ๅธฆ็š„้…็ฝฎๆ–‡ไปถ้‡‡็”จ TOML ๆ ผๅผ๏ผŒๅ› ไธบ่ฟ™ๆ˜ฏ Hugo ็š„้ป˜่ฎค่ฏญๆณ•ใ€‚ๅฆ‚ๆžœไฝ ๆ„ฟๆ„๏ผŒๅฏไปฅๅฐ†้…็ฝฎ่ฝฌๆขไธบ YAML ๆˆ– JSONใ€‚ + +ๆฏไธชๆ–‡ไปถไธญ้ƒฝๆœ‰้ป˜่ฎคไธป้ข˜้…็ฝฎ็š„ๆ–‡ๆกฃ๏ผŒๅ› ๆญคไฝ ๅฏไปฅ่‡ช็”ฑ่ฐƒๆ•ด่ฎพ็ฝฎไปฅๆปก่ถณไฝ ็š„้œ€ๆฑ‚ใ€‚ + +{{< alert >}} +ๆญฃๅฆ‚ๅœจ[ๅฎ‰่ฃ…่ฏดๆ˜Ž]({{< ref "/docs/installation#set-up-theme-configuration-files" >}})ไธญๆ‰€่ฟฐ๏ผŒไฝ ๅบ”่ฏฅ้€š่ฟ‡ไฟฎๆ”น Hugo ้กน็›ฎ็š„ `config/_default/` ๆ–‡ไปถๅคนไธญ็š„ๆ–‡ไปถๆฅ่ฐƒๆ•ดไธป้ข˜้…็ฝฎ๏ผŒๅนถๅˆ ้™ค้กน็›ฎๆ น็›ฎๅฝ•ไธญ็š„ `config.toml` ๆ–‡ไปถใ€‚ +{{< /alert >}} + +## ็ฝ‘็ซ™้…็ฝฎ + +Congoไธป้ข˜ๅ…จ้ข้ตๅพชๆ ‡ๅ‡† Hugo ้…็ฝฎๅ˜้‡๏ผŒไฝ†ๆ˜ฏๆœ‰ไธ€ไบ›็‰นๅฎš็š„้…็ฝฎ้กน้œ€่ฆ่ฟ›่กŒ่ฎพ็ฝฎไปฅ่Žทๅพ—ๆœ€ไฝณไฝ“้ชŒใ€‚ + +็ฝ‘็ซ™้…็ฝฎ้€š่ฟ‡ `config/_default/config.toml` ๆ–‡ไปถ็ฎก็†ใ€‚ไธ‹่กจๆฆ‚่ฟฐไบ† Congo ไธป้ข˜ๆ‰€ไฝฟ็”จ็š„ๆ‰€ๆœ‰่ฎพ็ฝฎใ€‚ + +่ฏทๆณจๆ„๏ผŒๆญค่กจไธญๆไพ›็š„ๅ˜้‡ๅไฝฟ็”จ็‚น่กจ็คบๆณ•ๆฅ็ฎ€ๅŒ– TOML ๆ•ฐๆฎ็ป“ๆž„๏ผˆๅณ `outputs.home` ๆŒ‡็š„ๆ˜ฏ `[outputs] home`๏ผ‰ใ€‚ + + +|ๅ็งฐ|้ป˜่ฎคๅ€ผ|ๆ่ฟฐ| +|---|---|---| +|`theme`|`"congo"`|ไฝฟ็”จ Hugo ๆจกๅ—ๆ–นๆณ•ๅฎ‰่ฃ…ๆ—ถ๏ผŒๅบ”ๅˆ ้™คๆญค้…็ฝฎๅ€ผใ€‚ๅฏนไบŽๆ‰€ๆœ‰ๅ…ถไป–ๅฎ‰่ฃ…็ฑปๅž‹๏ผŒๅฟ…้กปๅฐ†ๅ…ถ่ฎพ็ฝฎไธบ `congo`๏ผŒไปฅไฝฟไธป้ข˜ๆญฃๅธธ่ฟ่กŒใ€‚| +|`baseURL`|_ๆœช่ฎพ็ฝฎ_|็ฝ‘็ซ™ๆ น็›ฎๅฝ•็š„ URLใ€‚| +|`defaultContentLanguage`|`"en"`|ๆญคๅ€ผ็กฎๅฎšไธป้ข˜็ป„ไปถๅ’Œๅ†…ๅฎน็š„้ป˜่ฎค่ฏญ่จ€ใ€‚ๆœ‰ๅ…ณๅ—ๆ”ฏๆŒ็š„่ฏญ่จ€ไปฃ็ ๏ผŒ่ฏทๅ‚้˜…ไธ‹้ข็š„[่ฏญ่จ€ๅ’Œๅ›ฝ้™…ๅŒ–](#language-and-i18n)้ƒจๅˆ†ใ€‚| +|`enableRobotsTXT`|`true`|ๅฏ็”จๆ—ถ๏ผŒๅœจ็ซ™็‚นๆ น็›ฎๅฝ•ๅฐ†ๅˆ›ๅปบไธ€ไธช `robots.txt` ๆ–‡ไปถ๏ผŒๅ…่ฎธๆœ็ดขๅผ•ๆ“Ž็ˆฌๅ–ๆ•ดไธช็ซ™็‚นใ€‚ๅฆ‚ๆžœไฝ ๆ›ดๅ–œๆฌขๆไพ›่‡ชๅทฑๅˆถไฝœ็š„ `robots.txt`๏ผŒ่ฏท่ฎพ็ฝฎไธบ `false` ๅนถๅฐ†ๆ–‡ไปถๆ”พ็ฝฎๅœจ `static` ็›ฎๅฝ•ไธญใ€‚ไธบไบ†ๅฎŒๅ…จๆŽงๅˆถ๏ผŒไฝ ๅฏไปฅๆไพ›ไธ€ไธช[่‡ชๅฎšไน‰ๅธƒๅฑ€]({{< ref "content-examples#custom-layouts" >}})ๆฅ็”Ÿๆˆๆญคๆ–‡ไปถใ€‚| +|`paginate`|`10`|ๅœจๆ–‡็ซ ๅˆ—่กจไธญๆฏ้กตๅˆ—ๅ‡บ็š„ๆ–‡็ซ ๆ•ฐใ€‚| +|`summaryLength`|`0`|ๅœจ[front matter]({{< ref "front-matter" >}})ไธญๆœชๆไพ›ๆ‘˜่ฆๆ—ถ๏ผŒ็”จไบŽ็”Ÿๆˆๆ–‡็ซ ๆ‘˜่ฆ็š„ๅญ—ๆ•ฐใ€‚ๅ€ผไธบ `0` ๅฐ†ไฝฟ็”จ็ฌฌไธ€ๅฅใ€‚ๅฝ“ๆ‘˜่ฆ่ขซ้š่—ๆ—ถ๏ผŒๆญคๅ€ผๆ— ๆ•ˆใ€‚| +|`outputs.home`|`["HTML", "RSS", "JSON"]`|็”Ÿๆˆ็ซ™็‚น็š„่พ“ๅ‡บๆ ผๅผใ€‚Congo ้œ€่ฆ HTMLใ€RSS ๅ’Œ JSON ๆ‰่ƒฝไฝฟๆ‰€ๆœ‰ไธป้ข˜็ป„ไปถๆญฃๅธธๅทฅไฝœใ€‚| +|`permalinks`|_ๆœช่ฎพ็ฝฎ_|ๆœ‰ๅ…ณๅ›บๅฎš้“พๆŽฅ้…็ฝฎ๏ผŒ่ฏทๅ‚้˜…[Hugoๆ–‡ๆกฃ](https://gohugo.io/content-management/urls/#permalinks)ใ€‚| +|`taxonomies`|_ๆœช่ฎพ็ฝฎ_|ๆœ‰ๅ…ณๅˆ†็ฑปๆณ•้…็ฝฎ๏ผŒ่ฏทๅ‚้˜…[็ป„็ป‡ๅ†…ๅฎน]({{< ref "getting-started#organising-content" >}})้ƒจๅˆ†ใ€‚| + + +## ่ฏญ่จ€ๅ’Œๅ›ฝ้™…ๅŒ– + +Congo ้’ˆๅฏนๅฎŒๆ•ด็š„ๅคš่ฏญ่จ€็ฝ‘็ซ™่ฟ›่กŒไบ†ไผ˜ๅŒ–๏ผŒๅนถไธ”ไธป้ข˜assetsไธญๅทฒ็ป้ป˜่ฎค็ฟป่ฏ‘ๆˆๅคš็ง่ฏญ่จ€ใ€‚่ฏญ่จ€้…็ฝฎๅ…่ฎธๆ‚จ็”Ÿๆˆๅคšไธช็‰ˆๆœฌ็š„ๅ†…ๅฎน๏ผŒไปฅไธบ่ฎฟ้—ฎ่€…ๆไพ›ๅœจๅ…ถๆฏ่ฏญไธญ็š„ๅฎšๅˆถไฝ“้ชŒใ€‚ + +่ฏฅไธป้ข˜็›ฎๅ‰ๆ”ฏๆŒไปฅไธ‹่ฏญ่จ€๏ผš + +| ่ฏญ่จ€ | ไปฃ็  | +| --------------------- | --------- | +| **English (default)** | `en` | +| Arabic | `ar` | +| Bengali | `bn` | +| Bulgarian | `bg` | +| Chinese - Simplified | `zh-Hans` | +| Chinese - Traditional | `zh-Hant` | +| Czech | `cs` | +| Dutch | `nl` | +| Finnish | `fi` | +| French | `fr` | +| German | `de` | +| Hebrew | `he` | +| Hungarian | `hu` | +| Indonesian | `id` | +| Italian | `it` | +| Japanese | `ja` | +| Korean | `ko` | +| Norwegian - Bokmรฅl | `nb` | +| Polish | `pl` | +| Portuguese (Brazil) | `pt-br` | +| Portuguese (Portugal) | `pt-pt` | +| Romanian | `ro` | +| Russian | `ru` | +| Slovak | `sk` | +| Spanish (Spain) | `es` | +| Swedish | `sv` | +| Tamil | `ta` | +| Turkish | `tr` | +| Ukrainian | `uk` | +| Vietnamese | `vi` | + +้ป˜่ฎค็ฟป่ฏ‘ๅฏไปฅ้€š่ฟ‡ๅœจ `i18n/[code].yaml` ไธญๅˆ›ๅปบ่‡ชๅฎšไน‰ๆ–‡ไปถๆฅ่ฆ†็›–๏ผŒๅ…ถไธญๅŒ…ๅซ็ฟป่ฏ‘ๅญ—็ฌฆไธฒใ€‚ๆ‚จ่ฟ˜ๅฏไปฅไฝฟ็”จๆญคๆ–นๆณ•ๆทปๅŠ ๆ–ฐ่ฏญ่จ€ใ€‚ๅฆ‚ๆžœๆ‚จๅธŒๆœ›ไธŽ็คพๅŒบๅˆ†ไบซๆ–ฐ็š„็ฟป่ฏ‘๏ผŒ่ฏท[Pull Request](https://github.com/jpanther/congo/pulls)ใ€‚ + +### ้…็ฝฎ + +ไธบไบ†ๅฐฝๅฏ่ƒฝ็ตๆดป๏ผŒ้œ€่ฆไธบ็ฝ‘็ซ™ไธŠ็š„ๆฏ็ง่ฏญ่จ€ๅˆ›ๅปบไธ€ไธช่ฏญ่จ€้…็ฝฎๆ–‡ไปถใ€‚้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒCongo ๅœจ `config/_default/languages.en.toml` ไธญๅŒ…ๅซ่‹ฑ่ฏญ่ฏญ่จ€้…็ฝฎใ€‚ + +้ป˜่ฎคๆ–‡ไปถๅฏไปฅ็”จไฝœๅˆ›ๅปบๅ…ถไป–่ฏญ่จ€็š„ๆจกๆฟ๏ผŒๆˆ–่€…ๅฆ‚ๆžœๅธŒๆœ›ไฝฟ็”จ่‹ฑ่ฏญไปฅๅค–็š„่ฏญ่จ€็ผ–ๅ†™็ฝ‘็ซ™๏ผŒๅˆ™ๅฏไปฅ้‡ๅ‘ฝๅใ€‚ๅช้œ€ไฝฟ็”จๆ ผๅผ `languages.[language-code].toml` ๅ‘ฝๅๆ–‡ไปถใ€‚ + +{{< alert >}} +**ๆณจๆ„๏ผš** ็กฎไฟ[็ฝ‘็ซ™้…็ฝฎ](#site-configuration)ไธญ็š„ `defaultContentLanguage` ๅ‚ๆ•ฐไธŽ่ฏญ่จ€้…็ฝฎๆ–‡ไปถๅไธญ็š„่ฏญ่จ€ไปฃ็ ๅŒน้…ใ€‚ +{{< /alert >}} + + +|ๅ็งฐ|้ป˜่ฎคๅ€ผ|ๆ่ฟฐ| +|---|---|---| +|`languageCode`|`"en"`|ๆญคๆ–‡ไปถ็š„ Hugo ่ฏญ่จ€ไปฃ็ ใ€‚ๅฎƒๅฏไปฅๆ˜ฏ้กถ็บง่ฏญ่จ€๏ผˆๅณ `en`๏ผ‰ๆˆ–ๅญๅ˜ไฝ“๏ผˆๅณ `en-AU`๏ผ‰๏ผŒๅนถๅบ”ไธŽๆ–‡ไปถๅไธญ็š„่ฏญ่จ€ไปฃ็ ๅŒน้…ใ€‚| +|`languageName`|`"English"`|่ฏญ่จ€็š„ๅ็งฐใ€‚| +|`languageDirection`|`"ltr"`|่ฟ™ๆ˜ฏๅฆๆ˜ฏ RTL ่ฏญ่จ€ใ€‚่ฎพ็ฝฎไธบ `"rtl"` ไปฅไปŽๅณๅˆฐๅทฆ้‡ๆ–ฐๆŽ’ๅˆ—ๅ†…ๅฎนใ€‚Congo ๅฎŒๅ…จๆ”ฏๆŒๅŒๆ—ถไฝฟ็”จ RTL ๅ’Œ LTR ่ฏญ่จ€๏ผŒๅนถไผšๅŠจๆ€่ฐƒๆ•ดๅˆฐไธค่€…ใ€‚| +|`weight`|`1`|ๆž„ๅปบๅคš่ฏญ่จ€็ซ™็‚นๆ—ถ่ฏญ่จ€็š„้กบๅบ็š„ๆƒ้‡ใ€‚| +|`title`|`"Congo"`|็ฝ‘็ซ™็š„ๆ ‡้ข˜ใ€‚่ฟ™ๅฐ†ๆ˜พ็คบๅœจ็ซ™็‚นๆ ‡้ข˜ๅ’Œ้กต่„šไธญใ€‚| +|`copyright`|_ๆœช่ฎพ็ฝฎ_|ๅŒ…ๅซ่ฆๆ˜พ็คบๅœจ็ซ™็‚น้กต่„šไธญ็š„็‰ˆๆƒๆถˆๆฏ็š„ Markdown ๅญ—็ฌฆไธฒใ€‚ๅฆ‚ๆžœๆœชๆไพ›๏ผŒๅˆ™ Congo ๅฐ†ไฝฟ็”จ็ซ™็‚น `title` ่‡ชๅŠจ็”Ÿๆˆ็‰ˆๆƒๅญ—็ฌฆไธฒใ€‚| +|`params.dateFormat`|`"2 January 2006"`|ๆญค่ฏญ่จ€ไธญๆ—ฅๆœŸ็š„ๆ ผๅผใ€‚ๆœ‰ๅ…ณๅฏๆŽฅๅ—ๆ ผๅผ๏ผŒ่ฏทๅ‚้˜…[Hugoๆ–‡ๆกฃ](https://gohugo.io/functions/format/#gos-layout-string)ใ€‚| +|`params.mainSections`|_ๆœช่ฎพ็ฝฎ_|ๆ˜พ็คบๅœจๆœ€ๆ–ฐๆ–‡็ซ ๅˆ—่กจไธญ็š„้ƒจๅˆ†ใ€‚ๅฆ‚ๆžœๆœชๆไพ›๏ผŒๅˆ™ไฝฟ็”จๆ–‡็ซ ๆ•ฐๆœ€ๅคš็š„้ƒจๅˆ†ใ€‚| +|`params.description`|_ๆœช่ฎพ็ฝฎ_|็ฝ‘็ซ™ๆ่ฟฐใ€‚่ฟ™ๅฐ†็”จไบŽ็ซ™็‚นๅ…ƒๆ•ฐๆฎใ€‚| +|`author.name`|_ๆœช่ฎพ็ฝฎ_|ไฝœ่€…็š„ๅง“ๅใ€‚่ฟ™ๅฐ†ๆ˜พ็คบๅœจๆ–‡็ซ ้กต่„šๅ’Œไฝฟ็”จ้…็ฝฎๆ–‡ไปถๅธƒๅฑ€ๆ—ถๅœจไธป้กตไธŠใ€‚| +|`author.image`|_ๆœช่ฎพ็ฝฎ_|ไฝœ่€…็š„ๅ›พๅƒๆ–‡ไปถ่ทฏๅพ„ใ€‚ๅ›พๅƒๅบ”ไธบ1:1็š„ๅฎฝ้ซ˜ๆฏ”๏ผŒๅนถๆ”พ็ฝฎๅœจ็ซ™็‚น็š„ `assets/` ๆ–‡ไปถๅคนไธญใ€‚| +|`author.headline`|_ๆœช่ฎพ็ฝฎ_|ๅŒ…ๅซไฝœ่€…ๅคด่ก”็š„ Markdown ๅญ—็ฌฆไธฒใ€‚ๅฎƒๅฐ†ๆ˜พ็คบๅœจไธป้กตไธŠไฝœ่€…ๅง“ๅไธ‹ๆ–นใ€‚| +|`author.bio`|_ๆœช่ฎพ็ฝฎ_|ๅŒ…ๅซไฝœ่€…็ฎ€ไป‹็š„ Markdown ๅญ—็ฌฆไธฒใ€‚ๅฎƒๅฐ†ๆ˜พ็คบๅœจๆ–‡็ซ ้กต่„šไธญใ€‚| +|`author.links`|_ๆœช่ฎพ็ฝฎ_|่ฆๆ˜พ็คบๅœจไฝœ่€…่ฏฆ็ป†ไฟกๆฏๆ—่พน็š„้“พๆŽฅใ€‚้…็ฝฎๆ–‡ไปถๅŒ…ๅซๅฏไปฅๅ–ๆถˆๆณจ้‡Šไปฅๅฏ็”จ็š„็คบไพ‹้“พๆŽฅใ€‚ๆ˜พ็คบ้“พๆŽฅ็š„้กบๅบ็”ฑๅฎƒไปฌๅœจๆ•ฐ็ป„ไธญๅ‡บ็Žฐ็š„้กบๅบ็กฎๅฎšใ€‚ๅฏไปฅ้€š่ฟ‡ๅœจ `assets/icons/` ไธญๆไพ›็›ธๅบ”็š„ SVG ๅ›พๆ ‡่ต„ไบงๆฅๆทปๅŠ ่‡ชๅฎšไน‰้“พๆŽฅใ€‚| + + +### ่œๅ• + +Congo ่ฟ˜ๆ”ฏๆŒ่ฏญ่จ€็‰นๅฎš็š„่œๅ•้…็ฝฎใ€‚่œๅ•้…็ฝฎๆ–‡ไปถ้ตๅพชไธŽ่ฏญ่จ€ๆ–‡ไปถ็›ธๅŒ็š„ๅ‘ฝๅๆ ผๅผใ€‚ๅช้œ€ๅœจๆ–‡ไปถๅไธญๆไพ›่ฏญ่จ€ไปฃ็ ๏ผŒไปฅๅ‘Š่ฏ‰ Hugo ่ฏฅๆ–‡ไปถไธŽๅ“ช็ง่ฏญ่จ€็›ธๅ…ณใ€‚ + +่œๅ•้…็ฝฎๆ–‡ไปถ็š„ๅ‘ฝๅๆ ผๅผไธบ `menus.[language-code].toml`ใ€‚ๅง‹็ปˆ็กฎไฟ่œๅ•้…็ฝฎไธญไฝฟ็”จ็š„่ฏญ่จ€ไปฃ็ ไธŽ่ฏญ่จ€้…็ฝฎ็›ธๅŒน้…ใ€‚ + +[ๅฟซ้€Ÿๅผ€ๅง‹]({{< ref "getting-started#menus" >}})้ƒจๅˆ†ๆ›ด่ฏฆ็ป†ๅœฐ่งฃ้‡Šไบ†ๆญคๆ–‡ไปถ็š„็ป“ๆž„ใ€‚ๆ‚จ่ฟ˜ๅฏไปฅๅ‚่€ƒ[Hugo ่œๅ•ๆ–‡ๆกฃ](https://gohugo.io/content-management/menus/)ไปฅ่Žทๅ–ๆ›ดๅคš้…็ฝฎ็คบไพ‹ใ€‚ + +## ไธป้ข˜ๅ‚ๆ•ฐ + +Congo ๆไพ›ไบ†ๅคง้‡็š„้…็ฝฎๅ‚ๆ•ฐ๏ผŒ็”จไบŽๆŽงๅˆถไธป้ข˜็š„ๅŠŸ่ƒฝใ€‚ไธ‹่กจๆฆ‚่ฟฐไบ† `config/_default/params.toml` ๆ–‡ไปถไธญ็š„ๆฏไธชๅฏ็”จๅ‚ๆ•ฐใ€‚ + +่ฟ™้‡Œ็š„่ฎธๅคšๆ–‡็ซ ้ป˜่ฎคๅ€ผๅฏไปฅ้€š่ฟ‡ๅœจ front matter ไธญๆŒ‡ๅฎšๆฅ่ฆ†็›–ๆฏ็ฏ‡ๆ–‡็ซ ็š„้ป˜่ฎคๅ€ผใ€‚ๆœ‰ๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[Front Matter]({{< ref "front-matter" >}})้ƒจๅˆ†ใ€‚ + + +|ๅ็งฐ|้ป˜่ฎคๅ€ผ|ๆ่ฟฐ| +|---|---|---| +|`colorScheme`|`"congo"`|่ฆไฝฟ็”จ็š„ไธป้ข˜้ขœ่‰ฒๆ–นๆกˆใ€‚ๆœ‰ๆ•ˆๅ€ผไธบ `congo`๏ผˆ้ป˜่ฎค๏ผ‰ใ€`avocado`ใ€`cherry`ใ€`fire`ใ€`ocean`ใ€`sapphire` ๅ’Œ `slate`ใ€‚ๆœ‰ๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[้ขœ่‰ฒๆ–นๆกˆ]({{< ref "getting-started#้ขœ่‰ฒๆ–นๆกˆ" >}})้ƒจๅˆ†ใ€‚| +|`defaultThemeColor`|`"#FFFFFF`|`theme-color` meta ๆ ‡็ญพ็š„ๅŽŸๅ€ผ๏ผˆๅœจ่„šๆœฌไฟฎๆ”นๅฎƒไน‹ๅ‰๏ผ‰ใ€‚meta ๆ ‡็ญพไผšๆ นๆฎๆ‰€้€‰ไธป้ข˜่€Œๅ˜ๅŒ–๏ผˆ`light` ๆˆ– `dark`๏ผ‰๏ผŒไฝ†ๆ˜ฏไธ€ไบ›่ฝฏไปถ๏ผˆไพ‹ๅฆ‚ Discord๏ผ‰ไผšไฝฟ็”จ่ฏฅๆ ‡็ญพ็š„ๅŽŸๅ€ผๆฅๆ˜พ็คบไธป้ข˜่‰ฒใ€‚| +|`defaultAppearance`|`"light"`|้ป˜่ฎค็š„ไธป้ข˜ๅค–่ง‚๏ผŒๅฏไปฅๆ˜ฏ `light` ๆˆ– `dark`ใ€‚| +|`autoSwitchAppearance`|`true`|ไธป้ข˜ๅค–่ง‚ๆ˜ฏๅฆๆ นๆฎ่ฎฟ้—ฎ่€…็š„ๆ“ไฝœ็ณป็ปŸ้ฆ–้€‰้กน่‡ชๅŠจๅˆ‡ๆขใ€‚่ฎพ็ฝฎไธบ `false` ไปฅๅง‹็ปˆไฝฟ็”จ `defaultAppearance`ใ€‚| +|`enableSearch`|`false`|ๆ˜ฏๅฆๅฏ็”จ็ซ™ๅ†…ๆœ็ดขใ€‚่ฎพ็ฝฎไธบ `true` ไปฅๅฏ็”จๆœ็ดขๅŠŸ่ƒฝใ€‚่ฏทๆณจๆ„๏ผŒๆœ็ดขๅŠŸ่ƒฝๅ–ๅ†ณไบŽ [็ซ™็‚น้…็ฝฎ](#site-configuration) ไธญ็š„ `outputs.home` ่ฎพ็ฝฎๆญฃ็กฎใ€‚| +|`enableCodeCopy`|`false`|ๆ˜ฏๅฆๅฏ็”จ `` ๅ—็š„ๅคๅˆถๅˆฐๅ‰ช่ดดๆฟๆŒ‰้’ฎใ€‚`highlight.noClasses` ๅ‚ๆ•ฐๅฟ…้กป่ฎพ็ฝฎไธบ `false`๏ผŒไปฅไฝฟไปฃ็ ๅคๅˆถๆญฃๅธธๅทฅไฝœใ€‚ๆœ‰ๅ…ณ[ๅ…ถไป–้…็ฝฎๆ–‡ไปถ](#other-configuration-files)็š„่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏท้˜…่ฏปไธ‹ๆ–‡ใ€‚| +|`enableImageLazyLoading`|`true`|ๆ˜ฏๅฆๅฐ†ๅ›พๅƒๆ ‡่ฎฐไธบๆต่งˆๅ™จ็š„ๅปถ่ฟŸๅŠ ่ฝฝใ€‚| +|`robots`|_ๆœช่ฎพ็ฝฎ_|ๆŒ‡็คบๆœบๅ™จไบบๅฆ‚ไฝ•ๅค„็†ๆ‚จ็š„็ซ™็‚น็š„ๅญ—็ฌฆไธฒใ€‚ๅฆ‚ๆžœ่ฎพ็ฝฎ๏ผŒๅฐ†ๅœจ้กต้ขๅคด้ƒจ่พ“ๅ‡บใ€‚ๆœ‰ๅ…ณๆœ‰ๆ•ˆๅ€ผ๏ผŒ่ฏทๅ‚้˜…[Google ๆ–‡ๆกฃ](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives)ใ€‚| +|`fingerprintAlgorithm`|`"sha256"`|ๆŒ‡็คบๅœจๅฏนassets่ฟ›่กŒๆŒ‡็บน่ฏ†ๅˆซๆ—ถไฝฟ็”จ็š„ๅ“ˆๅธŒ็ฎ—ๆณ•ใ€‚ๆœ‰ๆ•ˆ้€‰้กนๅŒ…ๆ‹ฌ `md5`ใ€`sha256`ใ€`sha384` ๅ’Œ `sha512`ใ€‚| +|`header.layout`|`"basic"`|้กต้ขๅคด้ƒจๅ’Œ่œๅ•็š„ๅธƒๅฑ€ใ€‚ๆœ‰ๆ•ˆๅ€ผไธบ `basic`ใ€`hamburger`ใ€`hybrid` ๆˆ– `custom`ใ€‚ๅฝ“่ฎพ็ฝฎไธบ `custom` ๆ—ถ๏ผŒๆ‚จๅฟ…้กป้€š่ฟ‡ๅˆ›ๅปบ `/layouts/partials/header/custom.html` ๆ–‡ไปถๆไพ›่‡ชๅทฑ็š„ๅธƒๅฑ€ใ€‚| +|`header.logo`|_ๆœช่ฎพ็ฝฎ_|็ซ™็‚นๅพฝๆ ‡ๆ–‡ไปถๅœจ `assets/` ๆ–‡ไปถๅคนๅ†…็š„็›ธๅฏน่ทฏๅพ„ใ€‚ๅพฝๆ ‡ๆ–‡ไปถๅบ”ไปฅ 2x ๅˆ†่พจ็އๆไพ›๏ผŒๅนถๆ”ฏๆŒไปปไฝ•ๅ›พๅƒๅฐบๅฏธใ€‚| +|`header.logoDark`|_ๆœช่ฎพ็ฝฎ_|ไธŽ `header.logo` ๅ‚ๆ•ฐ็›ธๅŒ๏ผŒไฝ†ๆญคๅ›พๅƒๅœจๅฏ็”จๆทฑ่‰ฒๆจกๅผๆ—ถไฝฟ็”จใ€‚| +|`header.showTitle`|`true`|ๆ˜ฏๅฆๅœจ้กต็œ‰ไธญๆ˜พ็คบ็ซ™็‚นๆ ‡้ข˜ใ€‚| +|`footer.showCopyright`|`true`|ๆ˜ฏๅฆๅœจ็ซ™็‚น้กต่„šๆ˜พ็คบ็‰ˆๆƒๅญ—็ฌฆไธฒใ€‚่ฏทๆณจๆ„๏ผŒๅฏไปฅไฝฟ็”จ[่ฏญ่จ€้…็ฝฎ](#language-and-i18n)ไธญ็š„ `copyright` ๅ‚ๆ•ฐ่‡ชๅฎšไน‰ๅญ—็ฌฆไธฒใ€‚| +|`footer.showThemeAttribution`|`true`|ๆ˜ฏๅฆๅœจ็ซ™็‚น้กต่„šๆ˜พ็คบ "็”ฑ...ๅผบๅŠ›้ฉฑๅŠจ" ็š„ไธป้ข˜ๅฝ’ๅฑžใ€‚ๅฆ‚ๆžœ้€‰ๆ‹ฉ็ฆ็”จๆญคๆถˆๆฏ๏ผŒ่ฏท่€ƒ่™‘ๅœจ็ซ™็‚น็š„ๅ…ถไป–ๅœฐๆ–น๏ผˆไพ‹ๅฆ‚ๅ…ณไบŽ้กต้ข๏ผ‰ๅ†™ไธŠไธป้ข˜ๅฝ’ๅฑžใ€‚| +|`footer.showAppearanceSwitcher`|`false`|ๆ˜ฏๅฆๅœจ็ซ™็‚น้กต่„šๆ˜พ็คบๅค–่ง‚ๅˆ‡ๆขๅ™จใ€‚ไฝฟ็”จๆต่งˆๅ™จ็š„ๆœฌๅœฐๅญ˜ๅ‚จๆฅไฟ็•™่ฎฟ้—ฎ่€…็š„้ฆ–้€‰้กนใ€‚| +|`footer.showScrollToTop`|`true`|่ฎพ็ฝฎไธบ `true` ๆ—ถ๏ผŒๅฐ†ๆ˜พ็คบ่ฟ”ๅ›ž้กถ้ƒจ็ฎญๅคดใ€‚| +|`homepage.layout`|`"page"`|ไธป้กต็š„ๅธƒๅฑ€ใ€‚ๆœ‰ๆ•ˆๅ€ผไธบ `page`ใ€`profile` ๆˆ– `custom`ใ€‚ๅฝ“่ฎพ็ฝฎไธบ `custom` ๆ—ถ๏ผŒๆ‚จๅฟ…้กป้€š่ฟ‡ๅˆ›ๅปบ `/layouts/partials/home/custom.html` ๆ–‡ไปถๆไพ›่‡ชๅทฑ็š„ๅธƒๅฑ€ใ€‚ๆœ‰ๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[ไธป้กตๅธƒๅฑ€]({{< ref "homepage-layout" >}})้ƒจๅˆ†ใ€‚| +|`homepage.showRecent`|`false`|ๆ˜ฏๅฆๅœจไธป้กตไธŠๆ˜พ็คบๆœ€่ฟ‘็š„ๆ–‡็ซ ๅˆ—่กจใ€‚| +|`homepage.recentLimit`|`5`|ๅฝ“ `homepage.showRecent` ไธบ `true` ๆ—ถ๏ผŒๆ˜พ็คบ็š„ๆœ€ๅคงๆœ€่ฟ‘ๆ–‡็ซ ๆ•ฐใ€‚| +|`article.showDate`|`true`|ๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ๆ—ฅๆœŸใ€‚| +|`article.showDateUpdated`|`false`|ๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ๆ›ดๆ–ฐๆ—ฅๆœŸใ€‚| +|`article.showAuthor`|`true`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ้กต่„šๆ˜พ็คบไฝœ่€…ๆก†ใ€‚| +|`article.showBreadcrumbs`|`false`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ๅคด้ƒจๆ˜พ็คบ้ขๅŒ…ๅฑ‘ใ€‚| +|`article.showDraftLabel`|`true`|ๅœจไฝฟ็”จ `--buildDrafts` ๆž„ๅปบ็ซ™็‚นๆ—ถ๏ผŒๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ๆ—่พน็š„่‰็จฟๆ ‡็ญพใ€‚| +|`article.showEdit`|`false`|ๆ˜ฏๅฆๆ˜พ็คบ็ผ–่พ‘ๆ–‡็ซ ๅ†…ๅฎน็š„้“พๆŽฅใ€‚| +|`article.editURL`|_ๆœช่ฎพ็ฝฎ_|ๅฝ“ `article.showEdit` ๆฟ€ๆดปๆ—ถ๏ผŒ็ผ–่พ‘้“พๆŽฅ็š„ URLใ€‚| +|`article.editAppendPath`|`true`|ๅฝ“ `article.showEdit` ๆฟ€ๆดปๆ—ถ๏ผŒๆ˜ฏๅฆๅฐ†ๅฝ“ๅ‰ๆ–‡็ซ ็š„่ทฏๅพ„้™„ๅŠ ๅˆฐ่ฎพ็ฝฎไธบ `article.editURL` ็š„ URLใ€‚| +|`article.showHeadingAnchors`|`true`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ๅ†…็š„ๆ ‡้ข˜ๆ—่พนๆ˜พ็คบ้”š้“พๆŽฅใ€‚| +|`article.showPagination`|`true`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ้กต่„šๆ˜พ็คบไธ‹ไธ€็ฏ‡/ไธŠไธ€็ฏ‡ๆ–‡็ซ ็š„้“พๆŽฅใ€‚| +|`article.invertPagination`|`false`|ๆ˜ฏๅฆ็ฟป่ฝฌไธ‹ไธ€็ฏ‡/ไธŠไธ€็ฏ‡ๆ–‡็ซ ้“พๆŽฅ็š„ๆ–นๅ‘ใ€‚| +|`article.showReadingTime`|`true`|ๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ้˜…่ฏปๆ—ถ้—ดใ€‚| +|`article.showTableOfContents`|`false`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ไธŠๆ˜พ็คบ็›ฎๅฝ•ใ€‚| +|`article.showTaxonomies`|`false`|ๆ˜ฏๅฆๅœจไธŽๆ–‡็ซ ็›ธๅ…ณ็š„ๅˆ†็ฑปๆณ•ไธŠๆ˜พ็คบใ€‚| +|`article.showWordCount`|`false`|ๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ๅญ—ๆ•ฐใ€‚| +|`article.showComments`|`false`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ้กต่„šไน‹ๅŽๅŒ…ๅซ[comments partial]({{< ref "partials#comments" >}})ใ€‚| +|`article.sharingLinks`|_ๆœช่ฎพ็ฝฎ_|่ฆๅœจๆฏ็ฏ‡ๆ–‡็ซ ๆœซๅฐพๆ˜พ็คบ็š„ๅˆ†ไบซ้“พๆŽฅใ€‚ๅฆ‚ๆžœๆœชๆไพ›ๆˆ–่ฎพ็ฝฎไธบ `false`๏ผŒๅˆ™ไธไผšๆ˜พ็คบไปปไฝ•้“พๆŽฅใ€‚| +|`list.showBreadcrumbs`|`false`|ๆ˜ฏๅฆๅœจๅˆ—่กจ้กต้ข็š„้กต็œ‰ไธญๆ˜พ็คบ้ขๅŒ…ๅฑ‘ใ€‚| +|`list.showTableOfContents`|`false`|ๆ˜ฏๅฆๅœจๅˆ—่กจ้กต้ขไธŠๆ˜พ็คบ็›ฎๅฝ•ใ€‚| +|`list.showTaxonomies`|`false`|ๆ˜ฏๅฆๅœจๅˆ—่กจ้กต้ขไธŠๆ˜พ็คบไธŽๆญคๆ–‡็ซ ็›ธๅ…ณ็š„ๅˆ†็ฑปๆณ•ใ€‚| +|`list.showSummary`|`false`|ๆ˜ฏๅฆๅœจๅˆ—่กจ้กต้ขไธŠๆ˜พ็คบๆ–‡็ซ ๆ‘˜่ฆใ€‚ๅฆ‚ๆžœๅœจ[Front Matter]({{< ref "front-matter" >}})ไธญๆœชๆไพ›ๆ‘˜่ฆ๏ผŒๅˆ™ๅฐ†ไฝฟ็”จ[็ซ™็‚น้…็ฝฎ](#site-configuration)ไธญ็š„ `summaryLength` ๅ‚ๆ•ฐ่‡ชๅŠจ็”Ÿๆˆไธ€ไธชๆ‘˜่ฆใ€‚| +|`list.groupByYear`|`true`|ๆ˜ฏๅฆๅœจๅˆ—่กจ้กต้ขไธŠๆŒ‰ๅนดไปฝๅฏนๆ–‡็ซ ่ฟ›่กŒๅˆ†็ป„ใ€‚| +|`list.paginationWidth`|`1`|ๅœจ้œ€่ฆๆˆชๆ–ญ้กต้ขๅˆ—่กจๆ—ถ๏ผŒ่พ“ๅ‡บๅฝ“ๅ‰้กต้ขไธคไพง็š„ๅˆ†้กต้“พๆŽฅๆ•ฐใ€‚ๅฎฝๅบฆไธบ `1` ๅฐ†ๅœจ้œ€่ฆๆˆชๆ–ญๅˆ—่กจๆ—ถ่พ“ๅ‡บๅฝ“ๅ‰้กต้ขไธคไพง็š„ไธ€ไธช้“พๆŽฅใ€‚ๅฝ“ๅ‰ใ€็ฌฌไธ€ไธชๅ’Œๆœ€ๅŽไธ€ไธช้กต้ข็š„้“พๆŽฅๅง‹็ปˆไผšๆ˜พ็คบ๏ผŒๅนถไธ”ๆ˜ฏๅœจๆญคๅ€ผไน‹ๅค–็š„้“พๆŽฅใ€‚| +|`sitemap.excludedKinds`|`["taxonomy", "term"]`|ๅบ”ไปŽ็”Ÿๆˆ็š„ `/sitemap.xml` ๆ–‡ไปถไธญๆŽ’้™ค็š„ๅ†…ๅฎน็ฑปๅž‹ใ€‚ๆœ‰ๅ…ณๅฏๆŽฅๅ—็š„ๅ€ผ๏ผŒ่ฏทๅ‚้˜…[Hugo ๆ–‡ๆกฃ](https://gohugo.io/templates/section-templates/#page-kinds)ใ€‚| +|`taxonomy.showTermCount`|`true`|ๆ˜ฏๅฆๅœจๅˆ†็ฑปๆณ•ๅˆ—่กจไธŠๆ˜พ็คบๅˆ†็ฑปๆœฏ่ฏญๅ†…ๆ–‡็ซ ็š„ๆ•ฐ้‡ใ€‚| +|`fathomAnalytics.site`|_ๆœช่ฎพ็ฝฎ_|็”ฑ Fathom Analytics ไธบ็ฝ‘็ซ™็”Ÿๆˆ็š„็ซ™็‚นไปฃ็ ใ€‚ๆœ‰ๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[ๅˆ†ๆžๆ–‡ๆกฃ]({{< ref "partials#analytics" >}})ใ€‚| +|`fathomAnalytics.domain`|_ๆœช่ฎพ็ฝฎ_|ๅฆ‚ๆžœๅœจ Fathom Analytics ไธญไฝฟ็”จ่‡ชๅฎšไน‰ๅŸŸ๏ผŒ่ฏทๅœจๆญคๆไพ›ไปฅไปŽ่‡ชๅฎšไน‰ๅŸŸๆไพ› `script.js`ใ€‚| +|`plausibleAnalytics.domain`|_ๆœช่ฎพ็ฝฎ_|่พ“ๅ…ฅ่ฆ่ทŸ่ธช็š„็ฝ‘็ซ™็š„ๅŸŸใ€‚ๆœ‰ๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[ๅˆ†ๆžๆ–‡ๆกฃ]({{< ref "partials#analytics" >}})ใ€‚| +|`plausibleAnalytics.event`|_ๆœช่ฎพ็ฝฎ_|ๅฏๅฏปๅ€ Plausible api ไบ‹ไปถ็š„ URLใ€‚ๆœ‰ๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[ๅˆ†ๆžๆ–‡ๆกฃ]({{< ref "partials#analytics" >}})ใ€‚| +|`plausibleAnalytics.script`|_ๆœช่ฎพ็ฝฎ_|ๅฏๅฏปๅ€ Plausible ๅˆ†ๆž่„šๆœฌ็š„ URLใ€‚ๆœ‰ๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[ๅˆ†ๆžๆ–‡ๆกฃ]({{< ref "partials#analytics" >}})ใ€‚| +|`verification.google`|_ๆœช่ฎพ็ฝฎ_|็”ฑ Google ๆไพ›็š„่ฆๅŒ…ๅซๅœจ็ซ™็‚นๅ…ƒๆ•ฐๆฎไธญ็š„็ซ™็‚น้ชŒ่ฏๅญ—็ฌฆไธฒใ€‚| +|`verification.bing`|_ๆœช่ฎพ็ฝฎ_|็”ฑ Bing ๆไพ›็š„่ฆๅŒ…ๅซๅœจ็ซ™็‚นๅ…ƒๆ•ฐๆฎไธญ็š„็ซ™็‚น้ชŒ่ฏๅญ—็ฌฆไธฒใ€‚| +|`verification.pinterest`|_ๆœช่ฎพ็ฝฎ_|็”ฑ Pinterest ๆไพ›็š„่ฆๅŒ…ๅซๅœจ็ซ™็‚นๅ…ƒๆ•ฐๆฎไธญ็š„็ซ™็‚น้ชŒ่ฏๅญ—็ฌฆไธฒใ€‚| +|`verification.yandex`|_ๆœช่ฎพ็ฝฎ_|็”ฑ Yandex ๆไพ›็š„่ฆๅŒ…ๅซๅœจ็ซ™็‚นๅ…ƒๆ•ฐๆฎไธญ็š„็ซ™็‚น้ชŒ่ฏๅญ—็ฌฆไธฒใ€‚| + + +## ๅ…ถไป–้…็ฝฎๆ–‡ไปถ + +ไธป้ข˜่ฟ˜ๅŒ…ๆ‹ฌไธ€ไธช `markup.toml` ้…็ฝฎๆ–‡ไปถใ€‚่ฏฅๆ–‡ไปถๅŒ…ๅซไธ€ไบ›้‡่ฆ็š„ๅ‚ๆ•ฐ๏ผŒ็กฎไฟ Hugo ๆญฃ็กฎ้…็ฝฎไปฅ็”Ÿๆˆไฝฟ็”จ Congo ๆž„ๅปบ็š„็ซ™็‚นใ€‚ + +ๅง‹็ปˆ็กฎไฟๆญคๆ–‡ไปถๅญ˜ๅœจไบŽ้…็ฝฎ็›ฎๅฝ•ไธญ๏ผŒๅนถ่ฎพ็ฝฎๆ‰€้œ€็š„ๅ€ผใ€‚ๅฆๅˆ™๏ผŒๅฏ่ƒฝๅฏผ่‡ดๆŸไบ›ๅŠŸ่ƒฝไธๆญฃ็กฎๅœฐ่ฟ่กŒ๏ผŒๅนถๅฏ่ƒฝๅฏผ่‡ดๆ„ๅค–็š„่กŒไธบใ€‚ diff --git a/themes/congo/exampleSite/content/docs/configuration/thumb-setup.svg b/themes/congo/exampleSite/content/docs/configuration/thumb-setup.svg new file mode 100644 index 0000000..4a35b78 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/configuration/thumb-setup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/exampleSite/content/docs/content-examples/index.ja.md b/themes/congo/exampleSite/content/docs/content-examples/index.ja.md new file mode 100644 index 0000000..ceac023 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/content-examples/index.ja.md @@ -0,0 +1,317 @@ +--- +title: "ใ‚ณใƒณใƒ†ใƒณใƒ„ใฎไพ‹" +date: 2020-08-09 +draft: false +description: "ใ‚ณใƒณใƒ†ใƒณใƒ„ใŒใฉใฎใ‚ˆใ†ใซไฝœๆˆใ•ใ‚Œใ€ๆง‹ๆˆใ•ใ‚Œใ‚‹ในใใ‹ใ‚’็คบใ™ใ„ใใคใ‹ใฎไพ‹" +summary: "ใ‚ณใƒณใƒ†ใƒณใƒ„ใŒใฉใฎใ‚ˆใ†ใซๆง‹ๆˆใ•ใ‚Œใ‚‹ในใใ‹ใ‚’็คบใ™ใ„ใใคใ‹ใฎไพ‹ใงใ™ใ€‚" +slug: "content-examples" +tags: ["content", "example"] +--- + +ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’้ †็•ชใซ่ชญใ‚“ใงใใŸใฎใชใ‚‰ใ€Congoใงๅˆฉ็”จๅฏ่ƒฝใชๆฉŸ่ƒฝใจ่จญๅฎšใซใคใ„ใฆใฏใ™ในใฆ็Ÿฅใฃใฆใ„ใ‚‹ใฏใšใงใ™ใ€‚ใ“ใฎใƒšใƒผใ‚ธใงใฏใ€ใใ‚Œใ‚‰ใ‚’ใพใจใ‚ใฆใ€ใ‚ใชใŸใŒHugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงไฝฟใ„ใŸใใชใ‚‹ใ‚ˆใ†ใชไพ‹ใ‚’ใ„ใใคใ‹็ดนไป‹ใ—ใพใ™ใ€‚ + +{{< alert >}} +**ใƒ’ใƒณใƒˆ:** ใ‚‚ใ—ใ‚ใชใŸใŒHugoใซๆ…ฃใ‚Œใฆใ„ใชใ„ใฎใงใ‚ใ‚Œใฐใ€[Hugo docs](https://gohugo.io/content-management/page-bundles/)ใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใ€ใƒšใƒผใ‚ธใƒใƒณใƒ‰ใƒซใจใƒชใ‚ฝใƒผใ‚นใฎๆฆ‚ๅฟตใซใคใ„ใฆๅญฆใ‚“ใงใใ ใ•ใ„ใ€‚ +{{< /alert >}} + +ใ“ใฎใƒšใƒผใ‚ธใง็ดนไป‹ใ™ใ‚‹ไพ‹ใฏใ•ใพใ–ใพใชใ‚ทใƒŠใƒชใ‚ชใซ้ฉ็”จใงใใพใ™ใŒใ€ๅ€‹ใ€…ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใง็‰นๅฎšใฎใ‚ณใƒณใƒ†ใƒณใƒ„้ …็›ฎใ‚’ใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใ™ใ‚‹ๆ–นๆณ•ใซใคใ„ใฆใ€ใ„ใใคใ‹ใฎใ‚ขใ‚คใƒ‡ใ‚ขใŒๅพ—ใ‚‰ใ‚Œใ‚‹ใ“ใจใ‚’้ก˜ใฃใฆใ„ใพใ™ใ€‚ + +## ใƒ–ใƒฉใƒณใƒใƒšใƒผใ‚ธ + +Hugoใฎใƒ–ใƒฉใƒณใƒใƒšใƒผใ‚ธใƒใƒณใƒ‰ใƒซใฏใ€ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใ€ใ‚ปใ‚ฏใ‚ทใƒงใƒณใƒชใ‚นใƒˆใ€Taxonomyใƒšใƒผใ‚ธใฎใ‚ˆใ†ใช้ …็›ฎใ‚’ใ‚ซใƒใƒผใ—ใฆใ„ใพใ™ใ€‚ใƒ–ใƒฉใƒณใƒใƒใƒณใƒ‰ใƒซใซใคใ„ใฆ่ฆšใˆใฆใŠใในใ้‡่ฆใชใ“ใจใฏใ€ใ“ใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚ฟใ‚คใƒ—ใฎใƒ•ใ‚กใ‚คใƒซๅใฏ **`_index.md`** ใงใ‚ใ‚‹ใจใ„ใ†ใ“ใจใงใ™ใ€‚ + +Congoใฏใƒ–ใƒฉใƒณใƒใƒšใƒผใ‚ธใงๆŒ‡ๅฎšใ•ใ‚ŒใŸใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใ‚’ๅฐŠ้‡ใ—ใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่จญๅฎšใ‚’ไธŠๆ›ธใใ—ใพใ™ใ€‚ไพ‹ใˆใฐใ€ใƒ–ใƒฉใƒณใƒใƒšใƒผใ‚ธใง `title` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’่จญๅฎšใ™ใ‚‹ใจใ€ใƒšใƒผใ‚ธใ‚ฟใ‚คใƒˆใƒซใ‚’ไธŠๆ›ธใใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +### ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธ + +| | | +| ------------ | -------------------- | +| **Layout:** | `layouts/index.html` | +| **Content:** | `content/_index.md` | + +Congoใฎใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใฏใ€ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆ่จญๅฎšใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใซใ‚ˆใฃใฆๅŒ…ๆ‹ฌ็š„ใชใƒ‡ใ‚ถใ‚คใƒณใŒๅˆถๅพกใ•ใ‚Œใ‚‹ใจใ„ใ†็‚นใง็‰นๅˆฅใงใ™ใ€‚ใ“ใ‚Œใซใคใ„ใฆใฏ[ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆ]({{< ref "homepage-layout" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใง่ฉณใ—ใ่ชฌๆ˜Žใ—ใฆใ„ใพใ™ใ€‚ + +ใ“ใฎใƒšใƒผใ‚ธใซใ‚ซใ‚นใ‚ฟใƒ ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’่ฟฝๅŠ ใ—ใŸใ„ๅ ดๅˆใฏใ€ `content/_index.md` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ใ“ใฎใƒ•ใ‚กใ‚คใƒซใซใ‚ใ‚‹ใ‚‚ใฎใฏใ™ในใฆใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใซๅซใพใ‚Œใพใ™ใ€‚ + +**ไพ‹:** + +```yaml +--- +title: "Congoใธใ‚ˆใ†ใ“ใ๏ผ" +description: "ใ“ใ‚Œใฏใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใซใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’่ฟฝๅŠ ใ™ใ‚‹ใƒ‡ใƒขใงใ™" +--- +็งใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใธใ‚ˆใ†ใ“ใ๏ผ็ซ‹ใกๅฏ„ใฃใฆใใ‚Œใฆๆœฌๅฝ“ใซๅฌ‰ใ—ใ„ใงใ™ใ€‚ +``` + +_ใ“ใฎไพ‹ใงใฏใ€ใ‚ซใ‚นใ‚ฟใƒ ใ‚ฟใ‚คใƒˆใƒซใ‚’่จญๅฎšใ—ใ€ใƒšใƒผใ‚ธๆœฌๆ–‡ใซใ„ใใคใ‹ใฎ่ฟฝๅŠ ใƒ†ใ‚ญใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใพใ™ใ€‚ใ‚ทใƒงใƒผใƒˆใ‚ณใƒผใƒ‰ใ€็”ปๅƒใ€ใƒชใƒณใ‚ฏใ‚’ๅซใ‚ใ€ใฉใฎใ‚ˆใ†ใชMarkdownใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใฎใƒ†ใ‚ญใ‚นใƒˆใงใ‚‚ๆง‹ใ„ใพใ›ใ‚“ใ€‚_ + +### ใƒชใ‚นใƒˆใƒšใƒผใ‚ธ + +| | | +| ------------ | ---------------------------- | +| **Layout:** | `layouts/_default/list.html` | +| **Content:** | `content/../_index.md` | + +ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใฏใ€ใ‚ปใ‚ฏใ‚ทใƒงใƒณๅ†…ใฎใ™ในใฆใฎใƒšใƒผใ‚ธใ‚’ใ‚ฐใƒซใƒผใƒ—ๅŒ–ใ—ใ€่จชๅ•่€…ใŒๅ„ใƒšใƒผใ‚ธใซๅˆฐ้”ใ™ใ‚‹ใŸใ‚ใฎๆ–นๆณ•ใ‚’ๆไพ›ใ—ใพใ™ใ€‚ใƒ–ใƒญใ‚ฐใ‚„ใƒใƒผใƒˆใƒ•ใ‚ฉใƒชใ‚ชใฏใ€่จ˜ไบ‹ใ‚„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ใ‚ฐใƒซใƒผใƒ—ๅŒ–ใ—ใŸใƒชใ‚นใƒˆใƒšใƒผใ‚ธใฎไพ‹ใงใ™ใ€‚ + +ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใฎไฝœๆˆใฏใ€ `content` ๅ†…ใซใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ไฝœๆˆใ™ใ‚‹ใฎใจๅŒใ˜ใใ‚‰ใ„็ฐกๅ˜ใงใ™ใ€‚ไพ‹ใˆใฐใ€"Projects"ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ไฝœๆˆใ™ใ‚‹ใซใฏใ€ `content/projects/` ใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ใใ—ใฆใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ”ใจใซMarkdownใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ + +ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใƒชใ‚นใƒˆใƒšใƒผใ‚ธใŒ็”Ÿๆˆใ•ใ‚Œใพใ™ใŒใ€ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ใŸใ‚ใซใ€ใ“ใฎๆ–ฐใ—ใ„ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ`_index.md`ใƒšใƒผใ‚ธใ‚‚ไฝœๆˆใ—ใฆใใ ใ•ใ„ใ€‚ + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ projects + โ”œโ”€โ”€ _index.md # /projects + โ”œโ”€โ”€ first-project.md # /projects/first-project + โ””โ”€โ”€ another-project + โ”œโ”€โ”€ index.md # /projects/another-project + โ””โ”€โ”€ project.jpg +``` + +Hugoใฏใ€ `content/projects` ๅ†…ใฎใƒšใƒผใ‚ธใฎURLใ‚’้ฉๅฎœ็”Ÿๆˆใ—ใพใ™ใ€‚ + +ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใจๅŒใ˜ใ‚ˆใ†ใซใ€ `_index.md` ใƒ•ใ‚กใ‚คใƒซใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใฏ็”Ÿๆˆใ•ใ‚ŒใŸใƒชใ‚นใƒˆใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใซๅ‡บๅŠ›ใ•ใ‚Œใพใ™ใ€‚Congoใฏใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใฎใ™ในใฆใฎใƒšใƒผใ‚ธใ‚’ใƒชใ‚นใƒˆใ—ใพใ™ใ€‚ + +**ไพ‹:** + +```yaml +--- +title: "Projects" +description: "็งใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซใคใ„ใฆ" +cascade: + showReadingTime: false +--- +ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใซใฏใ€็งใŒ็พๅœจๅ–ใ‚Š็ต„ใ‚“ใงใ„ใ‚‹ใ™ในใฆใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใŒๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ +``` + +_ใ“ใฎไพ‹ใงใฏใ€็‰นๅˆฅใช `cascade` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไฝฟใฃใฆใ€ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณๅ†…ใฎใ‚ตใƒ–ใƒšใƒผใ‚ธใฎ่ชญๆ›ธๆ™‚้–“ใ‚’้ž่กจ็คบใซใ—ใฆใ„ใพใ™ใ€‚ใ“ใ†ใ™ใ‚‹ใ“ใจใงใ€ใฉใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒšใƒผใ‚ธใงใ‚‚่ชญๆ›ธๆ™‚้–“ใŒ่กจ็คบใ•ใ‚Œใชใใชใ‚Šใพใ™ใ€‚ใ“ใ‚Œใฏใ€ๅ€‹ใ€…ใฎใƒšใƒผใ‚ธใซใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒ†ใƒผใƒžใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ๅซใ‚ใชใใฆใ‚‚ใ€ใ‚ปใ‚ฏใ‚ทใƒงใƒณๅ…จไฝ“ใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒ†ใƒผใƒžใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไธŠๆ›ธใใ™ใ‚‹ใ“ใจใŒใงใใ‚‹็ด ๆ™ดใ‚‰ใ—ใ„ๆ–นๆณ•ใงใ™ใ€‚_ + +ใ“ใฎใ‚ตใ‚คใƒˆใฎ[ใ‚ตใƒณใƒ—ใƒซ]({{< ref "samples" >}})ใฏใƒชใ‚นใƒˆใƒšใƒผใ‚ธใฎไธ€ไพ‹ใงใ™ใ€‚ + +### Taxonomyใƒšใƒผใ‚ธ + +| | | +| ---------------- | -------------------------------- | +| **List layout:** | `layouts/_default/taxonomy.html` | +| **Term layout:** | `layouts/_default/term.html` | +| **Content:** | `content/../_index.md` | + +Taxonomyใƒšใƒผใ‚ธใซใฏใ€Taxonomyใฎใƒชใ‚นใƒˆใจTaxonomyใฎTermใจใ„ใ†2ใคใฎๅฝขๅผใŒใ‚ใ‚Šใพใ™ใ€‚ใƒชใ‚นใƒˆใฏTaxonomyๅ†…ใฎๅ„Termใฎใƒชใ‚นใƒˆใ‚’่กจ็คบใ—ใ€TermใฏๆŒ‡ๅฎšใ•ใ‚ŒใŸTermใซ้–ข้€ฃใ™ใ‚‹ใƒšใƒผใ‚ธใฎใƒชใ‚นใƒˆใ‚’่กจ็คบใ—ใพใ™ใ€‚ + +Termใฏๅฐ‘ใ—ๆททไนฑใ—ใ‚„ใ™ใ„ใฎใงใ€`animals` ใจใ„ใ†Taxonomyใ‚’ไฝฟใฃใฆไพ‹ใ‚’ๆŽขใฃใฆใฟใพใ—ใ‚‡ใ†ใ€‚ + +ใพใšใ€HugoใงTaxonomyใ‚’ไฝฟใ†ใซใฏ่จญๅฎšใŒๅฟ…่ฆใงใ™ใ€‚ `config/_default/taxonomies.toml` ใซ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใ€Taxonomyใฎๅๅ‰ใ‚’ๅฎš็พฉใ—ใพใ™ใ€‚ + +```toml +# config/_default/taxonomies.toml + +animal = "animals" +``` + +HugoใฏTaxonomyใ‚’ๅ˜ๆ•ฐๅฝขใจ่ค‡ๆ•ฐๅฝขใงใƒชใ‚นใƒˆใ™ใ‚‹ใ“ใจใ‚’ๆƒณๅฎšใ—ใฆใ„ใ‚‹ใฎใงใ€ๅ˜ๆ•ฐๅฝขใฎ `animal` ใจ่ค‡ๆ•ฐๅฝขใฎ `animals` ใ‚’่ฟฝๅŠ ใ—ใฆใ€ไพ‹ใฎTaxonomyใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ + +ใ“ใ‚Œใง `animals` TaxonomyใŒๅญ˜ๅœจใ™ใ‚‹ใ“ใจใซใชใฃใŸใฎใงใ€ๅ€‹ใ€…ใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใซ่ฟฝๅŠ ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใซๆŒฟๅ…ฅใ™ใ‚‹ใ ใ‘ใงใ™: + +```yaml +--- +title: "ใƒฉใ‚คใ‚ชใƒณใฎๅทฃใธ" +description: "ไปŠ้€ฑใฏใƒฉใ‚คใ‚ชใƒณใซใคใ„ใฆๅญฆใณใพใ™" +animals: ["lion", "cat"] +--- +``` + +ใ“ใ‚Œใง `animals` Taxonomyใฎไธญใซ `lion` ใจ `cat` ใจใ„ใ†TermใŒใงใใŸใ“ใจใซใชใ‚Šใพใ™ใ€‚ + +ใ“ใฎๆ™‚็‚นใงใฏๆ˜Žใ‚‰ใ‹ใงใฏใ‚ใ‚Šใพใ›ใ‚“ใŒใ€Hugoใฏใ“ใฎๆ–ฐใ—ใ„Taxonomyใƒชใ‚นใƒˆใจTermใฎใƒšใƒผใ‚ธใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€ใƒชใ‚นใƒˆใฏ `/animals/` ใซใ€Termใƒšใƒผใ‚ธใฏ `/animals/lion/` ใจ `/animals/cat/` ใซใชใ‚Šใพใ™ใ€‚ + +ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใฏTaxonomyใซๅซใพใ‚Œใ‚‹ใ™ในใฆใฎTermใ‚’ใƒชใ‚นใƒˆใ‚ขใƒƒใƒ—ใ—ใพใ™ใ€‚ใ“ใฎไพ‹ใงใฏใ€ `/animals/` ใซ็งปๅ‹•ใ™ใ‚‹ใจใ€ `lion` ใจ `cat` ใฎใƒชใƒณใ‚ฏใŒใ‚ใ‚‹ใƒšใƒผใ‚ธใŒ่กจ็คบใ•ใ‚Œใ€่จชๅ•่€…ใฏใใ‚Œใžใ‚ŒใฎTermใƒšใƒผใ‚ธใซ็งปๅ‹•ใงใใพใ™ใ€‚ + +Termใƒšใƒผใ‚ธใฏใใฎTermใŒๅซใพใ‚Œใ‚‹ใ™ในใฆใฎใƒšใƒผใ‚ธใ‚’ใƒชใ‚นใƒˆใ‚ขใƒƒใƒ—ใ—ใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฎTermใƒชใ‚นใƒˆใฏๅŸบๆœฌ็š„ใซ้€šๅธธใฎ[ใƒชใ‚นใƒˆใƒšใƒผใ‚ธ](#ใƒชใ‚นใƒˆใƒšใƒผใ‚ธ)ใจใปใจใ‚“ใฉๅŒใ˜ใ‚ˆใ†ใซๅ‹•ไฝœใ—ใพใ™ใ€‚ + +Taxonomyใƒšใƒผใ‚ธใซใ‚ซใ‚นใ‚ฟใƒ ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’่ฟฝๅŠ ใ™ใ‚‹ใซใฏใ€Taxonomyๅใ‚’ใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใจใ—ใฆใ€ `content` ๅ†…ใซ `_index.md` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ animals + โ”œโ”€โ”€ _index.md # /animals + โ””โ”€โ”€ lion + โ””โ”€โ”€ _index.md # /animals/lion +``` + +ใ“ใ‚Œใ‚‰ใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใƒ•ใ‚กใ‚คใƒซใซใ‚ใ‚‹ใ‚‚ใฎใฏ็”Ÿๆˆใ•ใ‚ŒใŸTaxonomyใƒšใƒผใ‚ธใซ้…็ฝฎใ•ใ‚Œใพใ™ใ€‚ไป–ใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใจๅŒใ˜ใ‚ˆใ†ใซใ€ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใ‚’ไธŠๆ›ธใใ™ใ‚‹ใŸใ‚ใซไฝฟใ†ใ“ใจใŒใงใใพใ™ใ€‚ใ“ใฎใ‚ˆใ†ใซใ€ `lion` ใจใ„ใ†ๅๅ‰ใฎใ‚ฟใ‚ฐใŒใ‚ใฃใฆใ‚‚ใ€ `title` ใ‚’"Lion"ใซไธŠๆ›ธใใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +ใ“ใ‚ŒใŒๅฎŸ้š›ใซใฉใฎใ‚ˆใ†ใซ่ฆ‹ใˆใ‚‹ใ‹ใฏใ€ใ“ใฎใ‚ตใ‚คใƒˆใฎ[Tags]({{< ref "tags" >}})ใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„ใ€‚ + +## ใƒชใƒผใƒ•ใƒšใƒผใ‚ธ + +| | | +| ------------------------- | ------------------------------- | +| **Layout:** | `layouts/_default/single.html` | +| **Content (standalone):** | `content/../page-name.md` | +| **Content (bundled):** | `content/../page-name/index.md` | + +Hugoใฎใƒชใƒผใƒ•ใƒšใƒผใ‚ธใฏๅŸบๆœฌ็š„ใซๆจ™ๆบ–็š„ใชใ‚ณใƒณใƒ†ใƒณใƒ„ใƒšใƒผใ‚ธใงใ™ใ€‚ใ‚ตใƒ–ใƒšใƒผใ‚ธใ‚’ๅซใพใชใ„ใƒšใƒผใ‚ธใจใ—ใฆๅฎš็พฉใ•ใ‚Œใพใ™ใ€‚ไพ‹ใˆใฐใ€ใ‚ขใƒใ‚ฆใƒˆใƒšใƒผใ‚ธใ‚„ใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใƒ–ใƒญใ‚ฐใ‚ปใ‚ฏใ‚ทใƒงใƒณใซใ‚ใ‚‹ๅ€‹ใ€…ใฎใƒ–ใƒญใ‚ฐ่จ˜ไบ‹ใชใฉใงใ™ใ€‚ + +ใƒชใƒผใƒ•ใƒšใƒผใ‚ธใซใคใ„ใฆ่ฆšใˆใฆใŠใในใๆœ€ใ‚‚้‡่ฆใชใ“ใจใฏใ€ใƒ–ใƒฉใƒณใƒใƒšใƒผใ‚ธใจใฏ็•ฐใชใ‚Šใ€ใƒชใƒผใƒ•ใƒšใƒผใ‚ธใฏใ‚ขใƒณใƒ€ใƒผใ‚นใ‚ณใ‚ขใชใ—ใง `index.md` ใจๅๅ‰ใ‚’ใคใ‘ใ‚‹ในใใจใ„ใ†ใ“ใจใงใ™ใ€‚ใƒชใƒผใƒ•ใƒšใƒผใ‚ธใฏใพใŸใ€ใ‚ปใ‚ฏใ‚ทใƒงใƒณใฎใƒˆใƒƒใƒ—ใƒฌใƒ™ใƒซใซใพใจใ‚ใฆไธ€ๆ„ใชๅๅ‰ใ‚’ใคใ‘ใ‚‹ใ“ใจใŒใงใใ‚‹ใจใ„ใ†็‚นใง็‰นๅˆฅใงใ™ใ€‚ + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ blog + โ”œโ”€โ”€ first-post.md # /blog/first-post + โ”œโ”€โ”€ second-post.md # /blog/second-post + โ””โ”€โ”€ third-post + โ”œโ”€โ”€ index.md # /blog/third-post + โ””โ”€โ”€ image.jpg +``` + +็”ปๅƒใชใฉใ‚’ใƒšใƒผใ‚ธใซๅซใ‚ใ‚‹ๅ ดๅˆใ€ใƒšใƒผใ‚ธใƒใƒณใƒ‰ใƒซใ‚’ไฝฟ็”จใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใƒšใƒผใ‚ธใƒใƒณใƒ‰ใƒซใฏ `index.md` ใƒ•ใ‚กใ‚คใƒซใ‚’ๅซใ‚€ใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ไฝฟใฃใฆไฝœๆˆใ—ใพใ™ใ€‚ใ‚ทใƒงใƒผใƒˆใ‚ณใƒผใƒ‰ใ‚„ใใฎไป–ใฎใƒ†ใƒผใƒžใƒญใ‚ธใƒƒใ‚ฏใฎๅคšใใฏใ€ใƒชใ‚ฝใƒผใ‚นใŒใƒšใƒผใ‚ธใจไธ€็ท’ใซใƒใƒณใƒ‰ใƒซใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใ‚’ๅ‰ๆใจใ—ใฆใ„ใ‚‹ใฎใงใ€ใ‚ณใƒณใƒ†ใƒณใƒ„ใจไธ€็ท’ใซ็‹ฌ่‡ชใฎใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚ฐใƒซใƒผใƒ—ๅŒ–ใ™ใ‚‹ใ“ใจใŒ้‡่ฆใงใ™ใ€‚ + +**ไพ‹:** + +```yaml +--- +title: "ๅˆใ‚ใฆใฎใƒ–ใƒญใ‚ฐๆŠ•็จฟ" +date: 2022-01-25 +description: "็งใฎใƒ–ใƒญใ‚ฐใธใ‚ˆใ†ใ“ใ๏ผ" +summary: "็งใซใคใ„ใฆใ€ใใ—ใฆ็งใŒใชใœใ“ใฎใƒ–ใƒญใ‚ฐใ‚’ๅง‹ใ‚ใŸใฎใ‹ใ€ใ‚‚ใฃใจ็Ÿฅใฃใฆใใ ใ•ใ„ใ€‚" +tags: ["welcome", "new", "about", "first"] +--- +_ใ“ใ‚Œ_ ใŒ็งใฎใƒ–ใƒญใ‚ฐ่จ˜ไบ‹ใฎๅ†…ๅฎนใงใ™ใ€‚ +``` + +ใƒชใƒผใƒ•ใƒšใƒผใ‚ธใซใฏๆง˜ใ€…ใช[ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผ]({{< ref "front-matter" >}})ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใŒใ‚ใ‚Šใ€ใใ‚Œใ‚‰ใ‚’ไฝฟใฃใฆ่กจ็คบๆ–นๆณ•ใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +### ๅค–้ƒจใƒชใƒณใ‚ฏ + +Congoใซใฏใ€ๅค–้ƒจใƒšใƒผใ‚ธใธใฎใƒชใƒณใ‚ฏใ‚’่จ˜ไบ‹ใƒชใ‚นใƒˆใซ่กจ็คบใงใใ‚‹็‰นๅˆฅใชๆฉŸ่ƒฝใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใ‚Œใฏใ€Mediumใฎใ‚ˆใ†ใชใ‚ตใƒผใƒ‰ใƒ‘ใƒผใƒ†ใ‚ฃใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใ‚„็ ”็ฉถ่ซ–ๆ–‡ใซใ‚ณใƒณใƒ†ใƒณใƒ„ใŒใ‚ใ‚Šใ€Hugoใฎใ‚ตใ‚คใƒˆใซใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’่ค‡่ฃฝใ™ใ‚‹ใ“ใจใชใใƒชใƒณใ‚ฏใ‚’ๅผตใ‚ŠใŸใ„ๅ ดๅˆใซไพฟๅˆฉใงใ™ใ€‚ + +ๅค–้ƒจใƒชใƒณใ‚ฏ่จ˜ไบ‹ใ‚’ไฝœๆˆใ™ใ‚‹ใซใฏใ€็‰นๅˆฅใชใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใ‚’่จญๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™: + +```yaml +--- +title: "็งใฎMediumใฎ่จ˜ไบ‹" +date: 2022-01-25 +externalUrl: "https://medium.com/" +summary: "็งใฏMediumใซ่จ˜ไบ‹ใ‚’ๆ›ธใใพใ—ใŸใ€‚" +showReadingTime: false +build: + render: "false" + list: "local" +--- +``` + +`title` ใ‚„ `summary` ใฎใ‚ˆใ†ใช้€šๅธธใฎใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใจใจใ‚‚ใซใ€ `externalUrl` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฏใ“ใฎ่จ˜ไบ‹ใŒๆ™ฎ้€šใฎ่จ˜ไบ‹ใงใฏใชใ„ใ“ใจใ‚’ไผใˆใ‚‹ใŸใ‚ใซไฝฟใ‚ใ‚Œใพใ™ใ€‚ใ“ใ“ใงๆŒ‡ๅฎšใ•ใ‚ŒใŸURLใฏใ€่จชๅ•่€…ใŒใ“ใฎ่จ˜ไบ‹ใ‚’้ธๆŠžใ—ใŸใจใใซ่ช˜ๅฐŽใ•ใ‚Œใ‚‹ๅ ดๆ‰€ใซใชใ‚Šใพใ™ใ€‚ + +ใ•ใ‚‰ใซใ€ใ“ใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใฎ้€šๅธธใฎใƒšใƒผใ‚ธใŒ็”Ÿๆˆใ•ใ‚Œใชใ„ใ‚ˆใ†ใซ๏ผˆๅค–้ƒจURLใซใƒชใƒณใ‚ฏใ—ใฆใ„ใ‚‹ใฎใงใ€ใƒšใƒผใ‚ธใ‚’็”Ÿๆˆใ™ใ‚‹ๆ„ๅ‘ณใŒใ‚ใ‚Šใพใ›ใ‚“๏ผ๏ผ‰ใ€Hugoใฎ็‰นๅˆฅใชใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใงใ‚ใ‚‹ `build` ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ + +ใƒ†ใƒผใƒžใซใฏใ€ใ“ใฎใ‚ˆใ†ใชๅค–้ƒจใƒชใƒณใ‚ฏ่จ˜ไบ‹ใ‚’็ฐกๅ˜ใซ็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใฎใ‚ขใƒผใ‚ญใ‚ฟใ‚คใƒ—ใŒๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ๆ–ฐใ—ใ„ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ไฝœใ‚‹ใจใใซ `-k external` ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +```shell +hugo new -k external posts/my-post.md +``` + +### ใ‚ทใƒณใƒ—ใƒซใƒšใƒผใ‚ธ + +| | | +| ----------------- | ------------------------------ | +| **Layout:** | `layouts/_default/simple.html` | +| **Front Matter:** | `layout: "simple"` | + +Congoใซใฏใ‚ทใƒณใƒ—ใƒซใชใƒšใƒผใ‚ธใฎใŸใ‚ใฎ็‰นๅˆฅใชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚‚ๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ใ‚ทใƒณใƒ—ใƒซใƒปใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฏๅ…จๅน…ใฎใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใงใ€็‰นๅˆฅใชใƒ†ใƒผใƒžๆฉŸ่ƒฝใชใ—ใซMarkdownใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ใƒšใƒผใ‚ธใซ้…็ฝฎใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +ใ‚ทใƒณใƒ—ใƒซใƒฌใ‚คใ‚ขใ‚ฆใƒˆใงๅˆฉ็”จใงใใ‚‹ๅ”ฏไธ€ใฎๆฉŸ่ƒฝใฏใƒ‘ใƒณใใšใƒชใ‚นใƒˆใจๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใงใ™ใ€‚ใ“ใ‚Œใ‚‰ใฎๅ‹•ไฝœใฏ้€šๅธธใฎใƒšใƒผใ‚ธใจๅŒๆง˜ใซ[ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผ]({{< ref "front-matter" >}})ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไฝฟใฃใฆๅˆถๅพกใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +็‰นๅฎšใฎใƒšใƒผใ‚ธใงใ‚ทใƒณใƒ—ใƒซใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏใ€ `layout` ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผๅค‰ๆ•ฐใซ `"simple"` ใจใ„ใ†ๅ€คใ‚’่ฟฝๅŠ ใ—ใพใ™: + +```yaml +--- +title: "ใƒฉใƒณใƒ‡ใ‚ฃใƒณใ‚ฐใƒšใƒผใ‚ธ" +date: 2022-03-08 +layout: "simple" +--- +ใ“ใฎใƒšใƒผใ‚ธใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใฏๅ…จๅน…ใซใชใ‚Šใพใ—ใŸใ€‚ +``` + +## ใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆ + +Hugoใฎๅˆฉ็‚นใฎใฒใจใคใฏใ€ใ‚ตใ‚คใƒˆๅ…จไฝ“ใ‚„ๅ€‹ใ€…ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใ€ใƒšใƒผใ‚ธใฎใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’็ฐกๅ˜ใซไฝœๆˆใงใใ‚‹ใ“ใจใงใ™ใ€‚ + +ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฏ้€šๅธธใฎHugoใฎใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆ่ฆๅ‰‡ใซๅพ“ใ„ใพใ™ใ€‚่ฉณ็ดฐใฏ[Hugoๅ…ฌๅผใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](https://gohugo.io/templates/introduction/)ใ‚’ใ”่ฆงใใ ใ•ใ„ใ€‚ + +### ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ + +ไธŠใง่ชฌๆ˜Žใ—ใŸๅ„ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚ฟใ‚คใƒ—ใซใฏใ€ๅ„ใ‚ฟใ‚คใƒ—ใฎใƒšใƒผใ‚ธใ‚’็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใซไฝฟ็”จใ•ใ‚Œใ‚‹ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒ•ใ‚กใ‚คใƒซใŒ่จ˜่ผ‰ใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใ“ใฎใƒ•ใ‚กใ‚คใƒซใ‚’ใƒญใƒผใ‚ซใƒซใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซไฝœๆˆใ™ใ‚‹ใจใ€ใƒ†ใƒผใƒžใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’ไธŠๆ›ธใใ™ใ‚‹ใฎใงใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใ‚นใ‚ฟใ‚คใƒซใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ใŸใ‚ใซไฝฟ็”จใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +ไพ‹ใˆใฐใ€ `layouts/_default/single.html` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚Œใฐใ€ใƒชใƒผใƒ•ใƒšใƒผใ‚ธใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๅฎŒๅ…จใซใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +### ใ‚ซใ‚นใ‚ฟใƒ ใ‚ปใ‚ฏใ‚ทใƒงใƒณใƒฌใ‚คใ‚ขใ‚ฆใƒˆ + +ใพใŸใ€ๅ€‹ใ€…ใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚ปใ‚ฏใ‚ทใƒงใƒณใฎใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ใฎใ‚‚็ฐกๅ˜ใงใ™ใ€‚ใ“ใ‚Œใฏใ€็‰นๅฎšใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’็‰นๅฎšใฎใ‚นใ‚ฟใ‚คใƒซใงไธ€่ฆง่กจ็คบใ™ใ‚‹ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ไฝœใ‚ŠใŸใ„ๅ ดๅˆใซไพฟๅˆฉใงใ™ใ€‚ + +็‰นๆฎŠใชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใงใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไธ€่ฆง่กจ็คบใ™ใ‚‹ใ‚ซใ‚นใ‚ฟใƒ ใ€ŒProjectsใ€ใƒšใƒผใ‚ธใ‚’ไฝœๆˆใ™ใ‚‹ไพ‹ใ‚’่ฆ‹ใฆใฟใพใ—ใ‚‡ใ†ใ€‚ + +ใ“ใ‚Œใ‚’่กŒใ†ใซใฏใ€้€šๅธธใฎHugoใ‚ณใƒณใƒ†ใƒณใƒ„ใƒซใƒผใƒซใ‚’ไฝฟ็”จใ—ใฆใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ๆง‹ๆˆใ—ใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆ็”จใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ใ•ใ‚‰ใซใ€ใ‚ณใƒณใƒ†ใƒณใƒ„ใจๅŒใ˜ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๅใ‚’ไฝฟใ„ใ€ `list.html` ใƒ•ใ‚กใ‚คใƒซใ‚’่ฟฝๅŠ ใ—ใฆใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚ปใ‚ฏใ‚ทใƒงใƒณ็”จใฎๆ–ฐใ—ใ„ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ + +```shell +. +โ””โ”€โ”€ content +โ”‚ โ””โ”€โ”€ projects +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ first-project.md +โ”‚ โ””โ”€โ”€ second-project.md +โ””โ”€โ”€ layouts + โ””โ”€โ”€ projects + โ””โ”€โ”€ list.html +``` + +ใ“ใฎ `list.html` ใƒ•ใ‚กใ‚คใƒซใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒชใ‚นใƒˆใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’ใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใ—ใพใ™ใ€‚ใ“ใฎใƒ•ใ‚กใ‚คใƒซใ‚’่ฆ‹ใ‚‹ๅ‰ใซใ€ใพใšๅ€‹ใ€…ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒ•ใ‚กใ‚คใƒซใ‚’่ฆ‹ใฆใฟใพใ—ใ‚‡ใ†ใ€‚ + +```yaml +--- +title: "Congo" +date: 2021-08-11 +icon: "github" +description: "Tailwind CSSใงไฝœใ‚‰ใ‚ŒใŸHugoใฎใƒ†ใƒผใƒž" +topics: ["Hugo", "Web", "Tailwind"] +externalUrl: "https://github.com/jpanther/congo/" +--- +``` + +_ใ“ใฎไพ‹ใงใฏใ€ๅ„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚’ๅ‰ฒใ‚Šๅฝ“ใฆใ€ใƒชใ‚นใƒˆใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใงไฝฟ็”จใงใใ‚‹ใ‚ˆใ†ใซใ—ใฆใ„ใพใ™ใ€‚ใƒšใƒผใ‚ธใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใฏใ‚ใ‚Šใพใ›ใ‚“ใŒใ€ใใ‚Œใ‚’ๅซใ‚ใ‚‹ใ“ใจใ‚’ๅฆจใ’ใ‚‹ใ‚‚ใฎใ‚‚ไฝ•ใ‚‚ใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใ‚ใชใŸใฎใ‚ซใ‚นใ‚ฟใƒ ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใชใฎใงใ™ใ‹ใ‚‰๏ผ_ + +ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใŒๅฎš็พฉใ•ใ‚ŒใŸใฎใงใ€ๅ„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎ่ฉณ็ดฐใ‚’ๅ‡บๅŠ›ใ™ใ‚‹ใƒชใ‚นใƒˆใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +```go +{{ define "main" }} +
    + {{ range .Pages }} + + {{ end }} +
    +{{ end }} +``` + +ใ“ใ‚Œใฏ้žๅธธใซใ‚ใ‹ใ‚Šใ‚„ใ™ใ„ไพ‹ใงใ™ใŒใ€ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใฎๅ„ใƒšใƒผใ‚ธ๏ผˆใคใพใ‚Šๅ„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆ๏ผ‰ใ‚’้ †ใซ่ฆ‹ใฆใ„ใใ€ๅ„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใธใฎHTMLใƒชใƒณใ‚ฏใ‚’ใ‚ขใ‚คใ‚ณใƒณใจไธ€็ท’ใซๅ‡บๅŠ›ใ—ใฆใ„ใ‚‹ใ“ใจใŒใ‚ใ‹ใ‚Šใพใ™ใ€‚ๅ„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใฏใ€ใฉใฎๆƒ…ๅ ฑใ‚’่กจ็คบใ™ใ‚‹ใ‹ใ‚’ๆฑบๅฎšใ™ใ‚‹ใŸใ‚ใซไฝฟใ‚ใ‚Œใพใ™ใ€‚ + +้–ข้€ฃใ™ใ‚‹ใ‚นใ‚ฟใ‚คใƒซใจใ‚ฏใƒฉใ‚นใŒๅˆฉ็”จๅฏ่ƒฝใงใ‚ใ‚‹ใ“ใจใ‚’็ขบ่ชใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใ€Tailwind CSSใ‚’ๅ†ใ‚ณใƒณใƒ‘ใ‚คใƒซใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใชใ„ใ“ใจใ‚’่ฆšใˆใฆใŠใ„ใฆใใ ใ•ใ„ใ€‚ใ“ใ‚Œใซใคใ„ใฆใฏใ€[้ซ˜ๅบฆใชใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บ]({{< ref "advanced-customisation" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใง่ฉณใ—ใ่ชฌๆ˜Žใ—ใพใ™ใ€‚ + +ใ“ใฎใ‚ˆใ†ใชใ‚ซใ‚นใ‚ฟใƒ ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ๅ ดๅˆใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎCongoใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใŒใฉใฎใ‚ˆใ†ใซๅ‹•ไฝœใ™ใ‚‹ใ‹ใ‚’่ฆ‹ใฆใ€ใใ‚Œใ‚’ใ‚ฌใ‚คใƒ‰ใจใ—ใฆไฝฟ็”จใ™ใ‚‹ใฎใŒๆœ€ใ‚‚็ฐกๅ˜ใงใ™ใ€‚[Hugo docs](https://gohugo.io/templates/introduction/)ใฏใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใฎไฝœๆˆใซใคใ„ใฆใ‚‚ใฃใจๅญฆใถใŸใ‚ใฎ็ด ๆ™ดใ‚‰ใ—ใ„ใƒชใ‚ฝใƒผใ‚นใงใ™ใ€‚ diff --git a/themes/congo/exampleSite/content/docs/content-examples/index.md b/themes/congo/exampleSite/content/docs/content-examples/index.md new file mode 100644 index 0000000..63531f4 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/content-examples/index.md @@ -0,0 +1,317 @@ +--- +title: "Content Examples" +date: 2020-08-09 +draft: false +description: "Some examples that demonstrate how content should be created and structured." +summary: "It's time to bring everything together with some examples that demonstrate how content should be created and structured." +slug: "content-examples" +tags: ["content", "example"] +--- + +If you've been reading the documentation in order, you should now know about all the features and configurations available in Congo. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project. + +{{< alert >}} +**Tip:** If you're new to Hugo, be sure to check out the [official docs](https://gohugo.io/content-management/page-bundles/) to learn more about the concept of page bundles and resources. +{{< /alert >}} + +The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project. + +## Branch pages + +Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is **`_index.md`**. + +Congo will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the `title` parameter in a branch page will allow overriding the page title. + +### Homepage + +| | | +| ------------ | -------------------- | +| **Layout:** | `layouts/index.html` | +| **Content:** | `content/_index.md` | + +The homepage in Congo is special in that it's overarching design is controlled by the homepage layout config parameter. You can learn more about this in the [Homepage Layout]({{< ref "homepage-layout" >}}) section. + +If you want to add custom content to this page, you simply need to create a `content/_index.md` file. Anything in this file will then be included in your homepage. + +**Example:** + +```yaml +--- +title: "Welcome to Congo!" +description: "This is a demo of adding content to the homepage." +--- +Welcome to my website! I'm really happy you stopped by. +``` + +_This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links._ + +### List pages + +| | | +| ------------ | ---------------------------- | +| **Layout:** | `layouts/_default/list.html` | +| **Content:** | `content/../_index.md` | + +List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects. + +Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a "Projects" section, you would create `content/projects/`. Then create a Markdown file for each of your projects. + +A list page will be generated by default, however to customise the content, you should also create an `_index.md` page in this new directory. + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ projects + โ”œโ”€โ”€ _index.md # /projects + โ”œโ”€โ”€ first-project.md # /projects/first-project + โ””โ”€โ”€ another-project + โ”œโ”€โ”€ index.md # /projects/another-project + โ””โ”€โ”€ project.jpg +``` + +Hugo will generate URLs for the pages in your projects folder accordingly. + +Just like the homepage, content in the `_index.md` file will be output into the generated list index. Congo will then list any pages in this section below the content. + +**Example:** + +```yaml +--- +title: "Projects" +description: "Learn about some of my projects." +cascade: + showReadingTime: false +--- +This section contains all my current projects. +``` + +_In this example, the special `cascade` parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page._ + +The [samples section]({{< ref "samples" >}}) of this site is an example of a list page. + +### Taxonomy pages + +| | | +| ---------------- | -------------------------------- | +| **List layout:** | `layouts/_default/taxonomy.html` | +| **Term layout:** | `layouts/_default/term.html` | +| **Content:** | `content/../_index.md` | + +Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term. + +The terminology can get a little confusing so let's explore an example using a taxonomy named `animals`. + +Firstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at `config/_default/taxonomies.toml` and defining the taxonomy name. + +```toml +# config/_default/taxonomies.toml + +animal = "animals" +``` + +Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular `animal` equals the plural `animals` to create our example taxonomy. + +Now that our `animals` taxonomy exists, it needs to be added to individual content items. It's as simple as inserting it into the front matter: + +```yaml +--- +title: "Into the Lion's Den" +description: "This week we're learning about lions." +animals: ["lion", "cat"] +--- +``` + +This has now created two _terms_ within our `animals` taxonomy - `lion` and `cat`. + +Although it's not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at `/animals/` and the term pages can be found at `/animals/lion/` and `/animals/cat/`. + +The list page will list all the terms contained within the taxonomy. In this example, navigating to `/animals/` will show a page that has links for "lion" and "cat" which take visitors to the individual term pages. + +The term pages will list all the pages contained within that term. These term lists are essentially the same as normal [list pages](#list-pages) and behave in much the same way. + +In order to add custom content to taxonomy pages, simply create `_index.md` files in the content folder using the taxonomy name as the sub-directory name. + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ animals + โ”œโ”€โ”€ _index.md # /animals + โ””โ”€โ”€ lion + โ””โ”€โ”€ _index.md # /animals/lion +``` + +Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named `lion` but override the `title` to be "Lion". + +To see how this looks in reality, check out the [tags taxonomy listing]({{< ref "tags" >}}) on this site. + +## Leaf pages + +| | | +| ------------------------- | ------------------------------- | +| **Layout:** | `layouts/_default/single.html` | +| **Content (standalone):** | `content/../page-name.md` | +| **Content (bundled):** | `content/../page-name/index.md` | + +Leaf pages in Hugo are basically standard content pages. They are defined as pages that don't contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website. + +The most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named `index.md` _without_ an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name. + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ blog + โ”œโ”€โ”€ first-post.md # /blog/first-post + โ”œโ”€โ”€ second-post.md # /blog/second-post + โ””โ”€โ”€ third-post + โ”œโ”€โ”€ index.md # /blog/third-post + โ””โ”€โ”€ image.jpg +``` + +When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an `index.md` file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages. + +**Example:** + +```yaml +--- +title: "My First Blog Post" +date: 2022-01-25 +description: "Welcome to my blog!" +summary: "Learn more about me and why I am starting this blog." +tags: ["welcome", "new", "about", "first"] +--- +_This_ is the content of my blog post. +``` + +Leaf pages have a wide variety of [front matter]({{< ref "front-matter" >}}) parameters that can be used to customise how they are displayed. + +### External links + +Congo has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you'd like to link to, without replicating the content in your Hugo site. + +In order to create an external link article, some special front matter needs to be set: + +```yaml +--- +title: "My Medium post" +date: 2022-01-25 +externalUrl: "https://medium.com/" +summary: "I wrote a post on Medium." +showReadingTime: false +build: + render: "false" + list: "local" +--- +``` + +Along with the normal front matter parameters like `title` and `summary`, the `externalUrl` parameter is used to tell Congo that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article. + +Additionally, we use a special Hugo front matter parameter `build` to prevent a normal page for this content being generated - there's no point generating a page since we're linking to an external URL! + +The theme includes an archetype to make generating these external link articles simple. Just specify `-k external` when making new content. + +```shell +hugo new -k external posts/my-post.md +``` + +### Simple pages + +| | | +| ----------------- | ------------------------------ | +| **Layout:** | `layouts/_default/simple.html` | +| **Front Matter:** | `layout: "simple"` | + +Congo also includes a special layout for simple pages. The simple layout is a full-width template that just places Markdown content into the page without any special theme features. + +The only features available in the simple layout are breadcrumbs and sharing links. However, the behaviour of these can still be controlled using the normal page [front matter]({{< ref "front-matter" >}}) variables. + +To enable the simple layout on a particular page, add the `layout` front matter variable with a value of `"simple"`: + +```yaml +--- +title: "My landing page" +date: 2022-03-08 +layout: "simple" +--- +This page content is now full-width. +``` + +## Custom layouts + +One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages. + +Layouts follow all the normal Hugo templating rules and more information is available in the [official Hugo docs](https://gohugo.io/templates/introduction/). + +### Overriding default layouts + +Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website. + +For example, creating a `layouts/_default/single.html` file will allow the layout of leaf pages to be completely customised. + +### Custom section layouts + +It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style. + +Let's step through an example that creates a custom "Projects" page that lists projects using a special layout. + +In order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a `list.html` file. + +```shell +. +โ””โ”€โ”€ content +โ”‚ โ””โ”€โ”€ projects +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ first-project.md +โ”‚ โ””โ”€โ”€ second-project.md +โ””โ”€โ”€ layouts + โ””โ”€โ”€ projects + โ””โ”€โ”€ list.html +``` + +This `list.html` file will now override the default list template, but only for the `projects` section. Before we look at this file, lets first look at the individual project files. + +```yaml +--- +title: "Congo" +date: 2021-08-11 +icon: "github" +description: "A theme for Hugo built with Tailwind CSS." +topics: ["Hugo", "Web", "Tailwind"] +externalUrl: "https://github.com/jpanther/congo/" +--- +``` + +_In this example we are assigning some metadata for each project that we can then use in our list template. There's no page content, but there's nothing stopping you from including it. It's your own custom template after all!_ + +With the projects defined, now we can create a list template that outputs the details of each project. + +```go +{{ define "main" }} +
    + {{ range .Pages }} + + {{ end }} +
    +{{ end }} +``` + +Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed. + +Keep in mind that you'll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the [Advanced Customisation]({{< ref "advanced-customisation" >}}) section. + +When making custom templates like this one, it's always easiest to take a look at how the default Congo template works and then use that as a guide. Remember, the [Hugo docs](https://gohugo.io/templates/introduction/) are a great resource to learn more about creating templates too. diff --git a/themes/congo/exampleSite/content/docs/content-examples/index.zh-Hans.md b/themes/congo/exampleSite/content/docs/content-examples/index.zh-Hans.md new file mode 100644 index 0000000..9609ff1 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/content-examples/index.zh-Hans.md @@ -0,0 +1,316 @@ +--- +title: "ๅ†…ๅฎน็คบไพ‹" +date: 2020-08-09 +draft: false +description: "ไธ€ไบ›ๆผ”็คบๅฆ‚ไฝ•ๅˆ›ๅปบๅ’Œ็ป„็ป‡ๅ†…ๅฎน็š„็คบไพ‹ใ€‚" +summary: "ๆ˜ฏๆ—ถๅ€™้€š่ฟ‡ไธ€ไบ›ๆผ”็คบ็คบไพ‹ๅฐ†ๆ‰€ๆœ‰ๅ†…ๅฎนๆ•ดๅˆ่ตทๆฅ๏ผŒๅฑ•็คบๅฆ‚ไฝ•ๅˆ›ๅปบๅ’Œ็ป„็ป‡ๅ†…ๅฎนไบ†ใ€‚" +slug: "content-examples" +tags: ["content", "example"] +--- + +ๅฆ‚ๆžœไฝ ๆŒ‰้กบๅบ้˜…่ฏปๆ–‡ๆกฃ๏ผŒ็Žฐๅœจๅบ”่ฏฅๅฏน Congo ไธญๆไพ›็š„ๆ‰€ๆœ‰ๅŠŸ่ƒฝๅ’Œ้…็ฝฎๆœ‰ๆ‰€ไบ†่งฃใ€‚ๆœฌ้กต้ขๆ—จๅœจๅฐ†ๆ‰€ๆœ‰ๅ†…ๅฎนๆ•ดๅˆๅœจไธ€่ตท๏ผŒๅนถๆไพ›ไธ€ไบ›ไฝ ๅฏ่ƒฝๆƒณๅœจ Hugo ้กน็›ฎไธญไฝฟ็”จ็š„ๅฎž้™…็คบไพ‹ใ€‚ + +{{< alert >}} +**ๆ็คบ๏ผš** ๅฆ‚ๆžœไฝ ๆ˜ฏ Hugo ๆ–ฐๆ‰‹๏ผŒ่ฏทๅŠกๅฟ…ๆŸฅ้˜…[ๅฎ˜ๆ–นๆ–‡ๆกฃ](https://gohugo.io/content-management/page-bundles/)๏ผŒไบ†่งฃๆœ‰ๅ…ณpage bundlesๅ’Œ่ต„ๆบๆฆ‚ๅฟต็š„ๆ›ดๅคšไฟกๆฏใ€‚ +{{< /alert >}} + +ๆœฌ้กต้ข็š„็คบไพ‹ๅฏไปฅๆ นๆฎไธๅŒ็š„ๆƒ…ๅขƒ่ฟ›่กŒ่ฐƒๆ•ด๏ผŒไฝ†ๅธŒๆœ›่ƒฝไธบไฝ ๆไพ›ไธ€ไบ›ๅ…ณไบŽๅฆ‚ไฝ•ๅค„็†็‰นๅฎšๅ†…ๅฎน้กนๆ ผๅผ็š„ๆ€่ทฏ๏ผŒไปฅ้€‚ๅบ”ไฝ ไธชไบบ้กน็›ฎ็š„้œ€่ฆใ€‚ + +## ๅˆ†ๆ”ฏ้กต้ข + +ๅœจ Hugo ไธญ๏ผŒๅˆ†ๆ”ฏ้กต้ขๅŒ…ๆ‹ฌไธป้กตใ€้ƒจๅˆ†ๅˆ—่กจๅ’Œๅˆ†็ฑป้กต้ข็ญ‰ใ€‚้œ€่ฆ่ฎฐไฝ็š„ไธ€็‚นๆ˜ฏ๏ผŒๆญค็ฑปๅ†…ๅฎน็š„ๆ–‡ไปถๅๆ˜ฏ **`_index.md`**ใ€‚ + +Congo ๅฐ†้ตๅพชๅˆ†ๆ”ฏ้กต้ขไธญๆŒ‡ๅฎš็š„ front matter ๅ‚ๆ•ฐ๏ผŒ่ฟ™ไบ›ๅ‚ๆ•ฐๅฐ†่ฆ†็›–่ฏฅ็‰นๅฎš้กต้ข็š„้ป˜่ฎค่ฎพ็ฝฎใ€‚ไพ‹ๅฆ‚๏ผŒๅœจๅˆ†ๆ”ฏ้กต้ขไธญ่ฎพ็ฝฎ `title` ๅ‚ๆ•ฐๅฐ†ๅ…่ฎธ่ฆ†็›–้กต้ขๆ ‡้ข˜ใ€‚ + +### ไธป้กต + +| | | +| ---------- | -------------------- | +| **ๅธƒๅฑ€๏ผš** | `layouts/index.html` | +| **ๅ†…ๅฎน๏ผš** | `content/_index.md` | + +ๅœจ Congo ไธญ๏ผŒไธป้กตๆ˜ฏ็‰นๆฎŠ็š„๏ผŒๅ› ไธบๅ…ถๆ€ปไฝ“่ฎพ่ฎก็”ฑไธป้กตๅธƒๅฑ€้…็ฝฎๅ‚ๆ•ฐๆŽงๅˆถใ€‚ไฝ ๅฏไปฅๅœจ [ไธป้กตๅธƒๅฑ€]({{< ref "homepage-layout" >}}) ้ƒจๅˆ†ไบ†่งฃๆ›ดๅคšไฟกๆฏใ€‚ + +ๅฆ‚ๆžœไฝ ๆƒณๅœจ่ฟ™ไธช้กต้ขไธŠๆทปๅŠ ่‡ชๅฎšไน‰ๅ†…ๅฎน๏ผŒๅช้œ€ๅˆ›ๅปบไธ€ไธช `content/_index.md` ๆ–‡ไปถใ€‚็„ถๅŽ๏ผŒๆญคๆ–‡ไปถไธญ็š„ไปปไฝ•ๅ†…ๅฎน้ƒฝๅฐ†ๅŒ…ๅซๅœจไฝ ็š„ไธป้กตไธญใ€‚ + +**็คบไพ‹:** + +```yaml +--- +title: "ๆฌข่ฟŽๆฅๅˆฐ Congo๏ผ" +description: "่ฟ™ๆ˜ฏๅ‘ไธป้กตๆทปๅŠ ๅ†…ๅฎน็š„ๆผ”็คบใ€‚" +--- +ๆฌข่ฟŽๆฅๅˆฐๆˆ‘็š„็ฝ‘็ซ™๏ผๆˆ‘็œŸ็š„ๅพˆ้ซ˜ๅ…ดไฝ ๅœ็•™ๅœจ่ฟ™้‡Œใ€‚ +``` + +_ๆญค็คบไพ‹่ฎพ็ฝฎไบ†่‡ชๅฎšไน‰ๆ ‡้ข˜๏ผŒๅนถๅœจ้กต้ขๆญฃๆ–‡ไธญๆทปๅŠ ไบ†ไธ€ไบ›้ขๅค–็š„ๆ–‡ๆœฌใ€‚ไปปไฝ• Markdown ๆ ผๅผ็š„ๆ–‡ๆœฌ้ƒฝๆ˜ฏๅฏไปฅๆŽฅๅ—็š„๏ผŒๅŒ…ๆ‹ฌ็Ÿญไปฃ็ ใ€ๅ›พ็‰‡ๅ’Œ้“พๆŽฅใ€‚_ + +### ๅˆ—่กจ้กต้ข + +| | | +| ---------- | ---------------------------- | +| **ๅธƒๅฑ€๏ผš** | `layouts/_default/list.html` | +| **ๅ†…ๅฎน๏ผš** | `content/../_index.md` | + +ๅˆ—่กจ้กต้ขๅฐ†ๅ…ถๅ†…้ƒจ็š„ๆ‰€ๆœ‰้กต้ขๅˆ†็ป„ๅˆฐไธ€ไธช้ƒจๅˆ†๏ผŒๅนถๆไพ›ไธ€็ง่ฎฉ่ฎฟ้—ฎ่€…่ฎฟ้—ฎๆฏไธช้กต้ข็š„ๆ–นๅผใ€‚ๅšๅฎขๆˆ–ๆŠ•ๅฝฑ้›†ๆ˜ฏๅˆ—่กจ้กต้ข็š„็คบไพ‹๏ผŒๅ› ไธบๅฎƒไปฌๅฐ†ๅธ–ๅญๆˆ–้กน็›ฎๅˆ†็ป„ๅœจไธ€่ตทใ€‚ + +ๅˆ›ๅปบๅˆ—่กจ้กต้ขๅฐฑๅƒๅœจ content ๆ–‡ไปถๅคนไธญๅˆ›ๅปบไธ€ไธชๅญ็›ฎๅฝ•ไธ€ๆ ท็ฎ€ๅ•ใ€‚ไพ‹ๅฆ‚๏ผŒ่ฆๅˆ›ๅปบไธ€ไธช "Projects" ้ƒจๅˆ†๏ผŒไฝ ๅฐ†ๅˆ›ๅปบ `content/projects/`ใ€‚็„ถๅŽไธบไฝ ็š„ๆฏไธช้กน็›ฎๅˆ›ๅปบไธ€ไธช Markdown ๆ–‡ไปถใ€‚ + +ๅˆ—่กจ้กต้ขๅฐ†้ป˜่ฎค็”Ÿๆˆ๏ผŒไฝ†ไธบไบ†่‡ชๅฎšไน‰ๅ†…ๅฎน๏ผŒไฝ ่ฟ˜ๅบ”่ฏฅๅœจ่ฟ™ไธชๆ–ฐ็›ฎๅฝ•ไธญๅˆ›ๅปบไธ€ไธช `_index.md` ้กต้ขใ€‚ + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ projects + โ”œโ”€โ”€ _index.md # /projects + โ”œโ”€โ”€ first-project.md # /projects/first-project + โ””โ”€โ”€ another-project + โ”œโ”€โ”€ index.md # /projects/another-project + โ””โ”€โ”€ project.jpg +``` + +Hugo ๅฐ†็›ธๅบ”ๅœฐไธบ้กน็›ฎๆ–‡ไปถๅคนไธญ็š„้กต้ข็”Ÿๆˆ URLใ€‚ + +ๅฐฑๅƒไธป้กตไธ€ๆ ท๏ผŒ`_index.md` ๆ–‡ไปถไธญ็š„ๅ†…ๅฎนๅฐ†่พ“ๅ‡บๅˆฐ็”Ÿๆˆ็š„ๅˆ—่กจ็ดขๅผ•ไธญใ€‚Congo ็„ถๅŽไผšๅœจๅ†…ๅฎนไธ‹ๆ–นๅˆ—ๅ‡บๆญค้ƒจๅˆ†ไธญ็š„ไปปไฝ•้กต้ขใ€‚ + +**็คบไพ‹:** + +```yaml +--- +title: "้กน็›ฎ" +description: "ไบ†่งฃๆˆ‘็š„ไธ€ไบ›้กน็›ฎใ€‚" +cascade: + showReadingTime: false +--- +่ฟ™ไธช้ƒจๅˆ†ๅŒ…ๅซๆ‰€ๆœ‰ๆˆ‘็š„ๅฝ“ๅ‰้กน็›ฎใ€‚ +``` + +_ๅœจๆญค็คบไพ‹ไธญ๏ผŒไฝฟ็”จไบ†็‰นๆฎŠ็š„ `cascade` ๅ‚ๆ•ฐๆฅ้š่—ๆญค้ƒจๅˆ†ไธญไปปไฝ•ๅญ้กต้ขไธŠ็š„้˜…่ฏปๆ—ถ้—ดใ€‚้€š่ฟ‡่ฟ™ๆ ทๅš๏ผŒไปปไฝ•้กน็›ฎ้กต้ขๅฐ†ไธๆ˜พ็คบๅ…ถ้˜…่ฏปๆ—ถ้—ดใ€‚่ฟ™ๆ˜ฏๅœจๆ•ดไธช้ƒจๅˆ†ไธญ่ฆ†็›–้ป˜่ฎคไธป้ข˜ๅ‚ๆ•ฐ็š„ๅฅฝๆ–นๆณ•๏ผŒ่€Œๆ— ้œ€ๅœจๆฏไธชๅ•็‹ฌ้กต้ขไธญๅŒ…ๅซๅฎƒไปฌใ€‚_ + +ๆญค็ซ™็‚น็š„ [ๆ ทๆœฌ้ƒจๅˆ†]({{< ref "samples" >}}) ๆ˜ฏๅˆ—่กจ้กต้ข็š„็คบไพ‹ใ€‚ + +### ๅˆ†็ฑป้กต้ข + +| | | +| ------------- | -------------------------------- | +| **ๅˆ—่กจๅธƒๅฑ€:** | `layouts/_default/taxonomy.html` | +| **ๆœฏ่ฏญๅธƒๅฑ€:** | `layouts/_default/term.html` | +| **ๅ†…ๅฎน:** | `content/../_index.md` | + +ๅˆ†็ฑป้กต้ขๆœ‰ไธค็งๅฝขๅผ - ๅˆ†็ฑปๅˆ—่กจๅ’Œๅˆ†็ฑปๆœฏ่ฏญใ€‚ๅˆ—่กจๆ˜พ็คบ็ป™ๅฎšๅˆ†็ฑปไธญๆฏไธชๆœฏ่ฏญ็š„ๅˆ—่กจ๏ผŒ่€Œๆœฏ่ฏญๆ˜พ็คบไธŽ็ป™ๅฎšๆœฏ่ฏญ็›ธๅ…ณ็š„้กต้ขๅˆ—่กจใ€‚ + +ๆœฏ่ฏญๅฏ่ƒฝไผšๆœ‰็‚นๆททๆท†๏ผŒๆ‰€ไปฅ่ฎฉๆˆ‘ไปฌ้€š่ฟ‡ไธ€ไธชไฝฟ็”จๅไธบ `animals` ็š„ๅˆ†็ฑป็š„็คบไพ‹ๆฅๆŽข่ฎจไธ€ไธ‹ใ€‚ + +้ฆ–ๅ…ˆ๏ผŒๅœจ Hugo ไธญไฝฟ็”จๅˆ†็ฑป๏ผŒๅฟ…้กป่ฟ›่กŒ้…็ฝฎใ€‚่ฟ™ๆ˜ฏ้€š่ฟ‡ๅœจ `config/_default/taxonomies.toml` ๅˆ›ๅปบ้…็ฝฎๆ–‡ไปถๅนถๅฎšไน‰ๅˆ†็ฑปๅ็งฐๆฅๅฎŒๆˆ็š„ใ€‚ + +```toml +# config/_default/taxonomies.toml + +animal = "animals" +``` + +Hugo ๆœŸๆœ›ไปฅๅฎƒไปฌ็š„ๅ•ๆ•ฐๅ’Œๅคๆ•ฐๅฝขๅผๅˆ—ๅ‡บๅˆ†็ฑป๏ผŒๅ› ๆญคๆˆ‘ไปฌๆทปๅŠ ไบ†ๅ•ๆ•ฐ `animal` ็ญ‰ไบŽๅคๆ•ฐ `animals` ๆฅๅˆ›ๅปบๆˆ‘ไปฌ็š„็คบไพ‹ๅˆ†็ฑปใ€‚ + +็Žฐๅœจๆˆ‘ไปฌ็š„ `animals` ๅˆ†็ฑปๅญ˜ๅœจไบ†๏ผŒๅฎƒ้œ€่ฆ่ขซๆทปๅŠ ๅˆฐๅ„ไธชๅ†…ๅฎน้กนไธญใ€‚ๅช้œ€ๅฐ†ๅ…ถๆ’ๅ…ฅๅˆฐๅ‰็ฝฎๅ…ƒๆ•ฐๆฎไธญ๏ผš + +```yaml +--- +title: "Into the Lion's Den" +description: "This week we're learning about lions." +animals: ["lion", "cat"] +--- +``` + +่ฟ™ๆ ทๅฐฑๅœจๆˆ‘ไปฌ็š„ `animals` ๅˆ†็ฑปไธญๅˆ›ๅปบไบ†ไธคไธช _ๆœฏ่ฏญ_ - `lion` ๅ’Œ `cat`ใ€‚ + +่™ฝ็„ถๆญคๆ—ถๅนถไธๆ˜Žๆ˜พ๏ผŒไฝ† Hugo ็Žฐๅœจๅฐ†ไธบ่ฟ™ไธชๆ–ฐ็š„ๅˆ†็ฑป็”Ÿๆˆๅˆ—่กจๅ’Œๆœฏ่ฏญ้กต้ขใ€‚้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒๅฏไปฅ้€š่ฟ‡ `/animals/` ่ฎฟ้—ฎๅˆ—่กจ๏ผŒ่€Œๆœฏ่ฏญ้กต้ขๅฏไปฅๅœจ `/animals/lion/` ๅ’Œ `/animals/cat/` ๆ‰พๅˆฐใ€‚ + +ๅˆ—่กจ้กต้ขๅฐ†ๅˆ—ๅ‡บๅˆ†็ฑปไธญๅŒ…ๅซ็š„ๆ‰€ๆœ‰ๆœฏ่ฏญใ€‚ๅœจ่ฟ™ไธชไพ‹ๅญไธญ๏ผŒๅฏผ่ˆชๅˆฐ `/animals/` ๅฐ†ๆ˜พ็คบไธ€ไธช้กต้ข๏ผŒๅ…ถไธญๅŒ…ๅซๆŒ‡ๅ‘ๅ„ไธชๆœฏ่ฏญ้กต้ข็š„้“พๆŽฅ๏ผŒๅฆ‚ "lion" ๅ’Œ "cat"ใ€‚ + +ๆœฏ่ฏญ้กต้ขๅฐ†ๅˆ—ๅ‡บ่ฏฅๆœฏ่ฏญไธญๅŒ…ๅซ็š„ๆ‰€ๆœ‰้กต้ขใ€‚่ฟ™ไบ›ๆœฏ่ฏญๅˆ—่กจๆœฌ่ดจไธŠไธŽๆ™ฎ้€š็š„ [ๅˆ—่กจ้กต้ข](#list-pages) ็›ธๅŒ๏ผŒๅนถไปฅ็›ธไผผ็š„ๆ–นๅผ่ฟไฝœใ€‚ + +่ฆๅ‘ๅˆ†็ฑป้กต้ขๆทปๅŠ ่‡ชๅฎšไน‰ๅ†…ๅฎน๏ผŒๅช้œ€ๅœจไฝฟ็”จๅˆ†็ฑปๅ็งฐไฝœไธบๅญ็›ฎๅฝ•ๅ็š„ๅ†…ๅฎนๆ–‡ไปถๅคนไธญๅˆ›ๅปบ `_index.md` ๆ–‡ไปถใ€‚ + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ animals + โ”œโ”€โ”€ _index.md # /animals + โ””โ”€โ”€ lion + โ””โ”€โ”€ _index.md # /animals/lion +``` + +่ฟ™ไบ›ๅ†…ๅฎนๆ–‡ไปถไธญ็š„ไปปไฝ•ๅ†…ๅฎน้ƒฝๅฐ†ๆ”พ็ฝฎๅˆฐ็”Ÿๆˆ็š„ๅˆ†็ฑป้กต้ขไธŠใ€‚ไธŽๅ…ถไป–ๅ†…ๅฎนไธ€ๆ ท๏ผŒๅ‰็ฝฎๅ…ƒๆ•ฐๆฎๅ˜้‡ๅฏ็”จไบŽ่ฆ†็›–้ป˜่ฎค่ฎพ็ฝฎใ€‚้€š่ฟ‡่ฟ™็งๆ–นๅผ๏ผŒๆ‚จๅฏไปฅๆ‹ฅๆœ‰ไธ€ไธชๅไธบ `lion` ็š„ๆ ‡็ญพ๏ผŒไฝ†ๅฏไปฅ่ฆ†็›– `title` ไธบ "Lion"ใ€‚ + +่ฆไบ†่งฃๅฎž้™…ๆ•ˆๆžœ๏ผŒ่ฏทๆŸฅ็œ‹ๆญค็ซ™็‚นไธŠ็š„ [ๆ ‡็ญพๅˆ†็ฑปๅˆ—่กจ]({{< ref "tags" >}})ใ€‚ + +## ๅ•้กต + +| | | +| ------------------ | ------------------------------- | +| **ๅธƒๅฑ€๏ผš** | `layouts/_default/single.html` | +| **ๅ†…ๅฎน๏ผˆ็‹ฌ็ซ‹๏ผ‰๏ผš** | `content/../page-name.md` | +| **ๅ†…ๅฎน๏ผˆๆ‰“ๅŒ…๏ผ‰๏ผš** | `content/../page-name/index.md` | + +Hugo ไธญ็š„ๅ•้กตๅŸบๆœฌไธŠๆ˜ฏๆ ‡ๅ‡†ๅ†…ๅฎน้กต้ขใ€‚ๅฎƒไปฌ่ขซๅฎšไน‰ไธบไธๅŒ…ๅซไปปไฝ•ๅญ้กต้ข็š„้กต้ขใ€‚่ฟ™ๅฏ่ƒฝๆ˜ฏๅ…ณไบŽ้กต้ข๏ผŒๆˆ–่€…ๆ˜ฏๅšๅฎข้ƒจๅˆ†ไธญ็š„ๅ•ไธชๅšๅฎขๆ–‡็ซ ใ€‚ + +ๅ…ณไบŽๅ•้กต็š„ๆœ€้‡่ฆ็š„ไบ‹ๆƒ…ๆ˜ฏ๏ผŒไธŽๅˆ†ๆ”ฏ้กต้ขไธๅŒ๏ผŒๅ•้กตๅบ”่ฏฅๅ‘ฝๅไธบ `index.md`๏ผŒ**ๆฒกๆœ‰**ไธ‹ๅˆ’็บฟใ€‚ๅ•้กต่ฟ˜ๅพˆ็‰นๆฎŠ๏ผŒๅ› ไธบๅฎƒไปฌๅฏไปฅๅœจ้ƒจๅˆ†็š„้กถๅฑ‚่ฟ›่กŒๅˆ†็ป„๏ผŒๅนถไปฅ็‹ฌ็‰น็š„ๅ็งฐๅ‘ฝๅใ€‚ + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ blog + โ”œโ”€โ”€ first-post.md # /blog/first-post + โ”œโ”€โ”€ second-post.md # /blog/second-post + โ””โ”€โ”€ third-post + โ”œโ”€โ”€ index.md # /blog/third-post + โ””โ”€โ”€ image.jpg +``` + +ๅœจ้กต้ขไธญๅŒ…ๅซ่ต„ไบง๏ผŒๆฏ”ๅฆ‚ๅ›พ็‰‡๏ผŒๅบ”่ฏฅไฝฟ็”จ้กต้ขๅŒ…ใ€‚้กต้ขๅŒ…ไฝฟ็”จๅธฆๆœ‰ `index.md` ๆ–‡ไปถ็š„ๅญ็›ฎๅฝ•ๅˆ›ๅปบใ€‚ๅฐ†่ต„ไบงไธŽๅ†…ๅฎนไธ€่ตทๅˆ†็ป„ๅˆฐ่‡ชๅทฑ็š„็›ฎๅฝ•ไธญๆ˜ฏ้‡่ฆ็š„๏ผŒๅ› ไธบ่ฎธๅคš shortcodes ๅ’Œๅ…ถไป–ไธป้ข˜้€ป่พ‘ๅ‡ๅฎš่ต„ๆบไธŽ้กต้ขไธ€่ตทๆ‰“ๅŒ…ใ€‚ + +**็คบไพ‹:** + +```yaml +--- +title: "ๆˆ‘็š„็ฌฌไธ€็ฏ‡ๅšๅฎขๆ–‡็ซ " +date: 2022-01-25 +description: "ๆฌข่ฟŽๆฅๅˆฐๆˆ‘็š„ๅšๅฎข๏ผ" +summary: "ไบ†่งฃๆ›ดๅคšๅ…ณไบŽๆˆ‘ไปฅๅŠๆˆ‘ไธบไป€ไนˆๅผ€ๅง‹ๅ†™่ฟ™ไธชๅšๅฎข็š„ไฟกๆฏใ€‚" +tags: ["ๆฌข่ฟŽ", "ๆ–ฐ", "ๅ…ณไบŽ", "็ฌฌไธ€็ฏ‡"] +--- +_่ฟ™_ ๆ˜ฏๆˆ‘็š„ๅšๅฎขๆ–‡็ซ ็š„ๅ†…ๅฎนใ€‚ +``` + +ๅ•้กตๆœ‰ๅ„็งๅฏไปฅ็”จไบŽ่‡ชๅฎšไน‰ๆ˜พ็คบๆ–นๅผ็š„ [ๅ‰็ฝฎๅ…ƒๆ•ฐๆฎ]({{< ref "front-matter" >}}) ๅ‚ๆ•ฐใ€‚ + +### ๅค–้ƒจ้“พๆŽฅ + +Congo ๅ…ทๆœ‰ไธ€ไธช็‰นๆฎŠๅŠŸ่ƒฝ๏ผŒๅ…่ฎธๅค–้ƒจ้กต้ข็š„้“พๆŽฅๅ‡บ็Žฐๅœจๆ–‡็ซ ๅˆ—่กจไธญใ€‚ๅฆ‚ๆžœๆ‚จๅœจ็ฌฌไธ‰ๆ–น็ฝ‘็ซ™๏ผˆๅฆ‚ Medium๏ผ‰ไธŠๆœ‰ๅ†…ๅฎน๏ผŒๆˆ–่€…ๆœ‰็ ”็ฉถ่ฎบๆ–‡ๅธŒๆœ›้“พๆŽฅ๏ผŒ่€Œไธๆƒณๅœจ Hugo ็ซ™็‚นไธญๅคๅˆถๅ†…ๅฎน๏ผŒ่ฟ™ๅฐ†้žๅธธๆœ‰็”จใ€‚ + +่ฆๅˆ›ๅปบๅค–้ƒจ้“พๆŽฅๆ–‡็ซ ๏ผŒ้œ€่ฆ่ฎพ็ฝฎไธ€ไบ›็‰นๆฎŠ็š„ๅ‰็ฝฎๅ…ƒๆ•ฐๆฎ๏ผš + +```yaml +--- +title: "ๆˆ‘็š„ Medium ๆ–‡็ซ " +date: 2022-01-25 +externalUrl: "https://medium.com/" +summary: "ๆˆ‘ๅœจ Medium ไธŠๅ†™ไบ†ไธ€็ฏ‡ๆ–‡็ซ ใ€‚" +showReadingTime: false +build: + render: "false" + list: "local" +--- +``` + +้™คไบ†ๆญฃๅธธ็š„ๅ‰็ฝฎๅ…ƒๆ•ฐๆฎๅ‚ๆ•ฐๅฆ‚ `title` ๅ’Œ `summary` ๅค–๏ผŒ`externalUrl` ๅ‚ๆ•ฐ็”จไบŽๅ‘Š่ฏ‰ Congo ่ฟ™ไธๆ˜ฏไธ€็ฏ‡ๆ™ฎ้€šๆ–‡็ซ ใ€‚ๆญคๅค„ๆไพ›็š„ URL ๅฐ†ๆ˜ฏ่ฎฟ้—ฎ่€…้€‰ๆ‹ฉ่ฏฅๆ–‡็ซ ๆ—ถ็š„็›ฎๆ ‡้“พๆŽฅใ€‚ + +ๆญคๅค–๏ผŒๆˆ‘ไปฌไฝฟ็”จไบ†ไธ€ไธช็‰นๆฎŠ็š„ Hugo ๅ‰็ฝฎๅ…ƒๆ•ฐๆฎๅ‚ๆ•ฐ `build` ๆฅ้˜ปๆญข็”Ÿๆˆๆญคๅ†…ๅฎน็š„ๆญฃๅธธ้กต้ข - ๅ› ไธบๆˆ‘ไปฌๆญฃๅœจ้“พๆŽฅๅˆฐๅค–้ƒจ URL๏ผŒ็”Ÿๆˆๆญฃๅธธ้กต้ขๆฒกๆœ‰ๆ„ไน‰๏ผ + +ไธป้ข˜ๅŒ…ๅซไธ€ไธชๅŽŸๅž‹๏ผŒไฝฟ็”Ÿๆˆ่ฟ™ไบ›ๅค–้ƒจ้“พๆŽฅๆ–‡็ซ ๅ˜ๅพ—็ฎ€ๅ•ใ€‚ๅช้œ€ๅœจๅˆ›ๅปบๆ–ฐๅ†…ๅฎนๆ—ถๆŒ‡ๅฎš `-k external`ใ€‚ + +```shell +hugo new -k external posts/my-post.md +``` + +### ็ฎ€ๅ•้กต้ข + +| | | +| ----------------- | ------------------------------ | +| **Layout:** | `layouts/_default/simple.html` | +| **Front Matter:** | `layout: "simple"` | + +Congo ่ฟ˜ๅŒ…ๆ‹ฌไธ€ไธชไธ“้—จ็”จไบŽ็ฎ€ๅ•้กต้ข็š„็‰นๆฎŠๅธƒๅฑ€ใ€‚็ฎ€ๅ•ๅธƒๅฑ€ๆ˜ฏไธ€ไธชๅ…จๅฎฝๅบฆ็š„ๆจกๆฟ๏ผŒๅช้œ€ๅฐ† Markdown ๅ†…ๅฎนๆ”พๅ…ฅ้กต้ข๏ผŒ่€ŒไธๅŒ…ๅซไปปไฝ•็‰นๆฎŠ็š„ไธป้ข˜ๅŠŸ่ƒฝใ€‚ + +็ฎ€ๅ•ๅธƒๅฑ€ไธญๅ”ฏไธ€ๅฏ็”จ็š„ๅŠŸ่ƒฝๆ˜ฏ้ขๅŒ…ๅฑ‘ๅ’Œๅˆ†ไบซ้“พๆŽฅใ€‚ไฝ†ๆ˜ฏ๏ผŒ่ฟ™ไบ›็š„่กŒไธบไป็„ถๅฏไปฅ้€š่ฟ‡ไฝฟ็”จๆญฃๅธธ้กต้ข [ๅ‰็ฝฎๅ…ƒๆ•ฐๆฎ]({{< ref "front-matter" >}}) ๅ˜้‡่ฟ›่กŒๆŽงๅˆถใ€‚ + +่ฆๅœจ็‰นๅฎš้กต้ขไธŠๅฏ็”จ็ฎ€ๅ•ๅธƒๅฑ€๏ผŒ่ฏทๆทปๅŠ  `layout` ๅ‰็ฝฎๅ…ƒๆ•ฐๆฎๅ˜้‡๏ผŒๅ…ถๅ€ผไธบ `"simple"`๏ผš + +````yaml +--- +title: "ๆˆ‘็š„่ฝๅœฐ้กต" +date: 2022-03-08 +layout: "simple" +--- +ๆญค้กต้ขๅ†…ๅฎน็Žฐๅœจๆ˜ฏๅ…จๅฎฝๅบฆ็š„ใ€‚ + +## ่‡ชๅฎšไน‰ๅธƒๅฑ€ + +Hugo ็š„ไธ€ไธชๅฅฝๅค„ๆ˜ฏๅฎƒไฝฟๅพ—ไธบๆ•ดไธช็ซ™็‚นใ€ๅ•็‹ฌ็š„้ƒจๅˆ†ๆˆ–้กต้ขๅˆ›ๅปบ่‡ชๅฎšไน‰ๅธƒๅฑ€ๅ˜ๅพ—ๅพˆๅฎนๆ˜“ใ€‚ + +ๅธƒๅฑ€้ตๅพชๆ‰€ๆœ‰ๅธธ่ง„็š„ Hugo ๆจกๆฟ่ง„ๅˆ™๏ผŒๆ›ดๅคšไฟกๆฏ่ฏทๅ‚้˜…[ๅฎ˜ๆ–น Hugo ๆ–‡ๆกฃ](https://gohugo.io/templates/introduction/)ใ€‚ + +### ่ฆ†็›–้ป˜่ฎคๅธƒๅฑ€ + +ไธŠ้ข่ฎจ่ฎบ็š„ๆฏ็งๅ†…ๅฎน็ฑปๅž‹้ƒฝๅˆ—ๅ‡บไบ†็”จไบŽ็”Ÿๆˆๆฏ็ง้กต้ข็ฑปๅž‹็š„ๅธƒๅฑ€ๆ–‡ไปถใ€‚ๅฆ‚ๆžœๅœจๆœฌๅœฐ้กน็›ฎไธญๅˆ›ๅปบไบ†ๆญคๆ–‡ไปถ๏ผŒๅฎƒๅฐ†่ฆ†็›–ไธป้ข˜ๆจกๆฟ๏ผŒๅ› ๆญคๅฏ็”จไบŽ่‡ชๅฎšไน‰็ฝ‘็ซ™็š„้ป˜่ฎคๆ ทๅผใ€‚ + +ไพ‹ๅฆ‚๏ผŒๅˆ›ๅปบไธ€ไธช `layouts/_default/single.html` ๆ–‡ไปถๅฐ†ๅ…่ฎธๅฎŒๅ…จ่‡ชๅฎšไน‰ๅถ้กต้ข็š„ๅธƒๅฑ€ใ€‚ + +### ่‡ชๅฎšไน‰้ƒจๅˆ†ๅธƒๅฑ€ + +ไธบไธชๅˆซๅ†…ๅฎน้ƒจๅˆ†ๅˆ›ๅปบ่‡ชๅฎšไน‰ๅธƒๅฑ€ไนŸๅพˆ็ฎ€ๅ•ใ€‚ๅฝ“ๆ‚จๆƒณ่ฆไฝฟ็”จ็‰นๅฎšๆ ทๅผๅˆ—ๅ‡บๆŸ็ง็ฑปๅž‹ๅ†…ๅฎน็š„้ƒจๅˆ†ๆ—ถ๏ผŒ่ฟ™ๅฐ†้žๅธธๆœ‰็”จใ€‚ + +่ฎฉๆˆ‘ไปฌ้€š่ฟ‡ไธ€ไธช็คบไพ‹ๆฅๅˆ›ๅปบไธ€ไธช่‡ชๅฎšไน‰็š„โ€œ้กน็›ฎโ€้กต้ข๏ผŒ่ฏฅ้กต้ขไฝฟ็”จ็‰นๆฎŠๅธƒๅฑ€ๅˆ—ๅ‡บ้กน็›ฎใ€‚ + +ไธบไบ†ๅšๅˆฐ่ฟ™ไธ€็‚น๏ผŒไฝฟ็”จๅธธ่ง„็š„ Hugo ๅ†…ๅฎน่ง„ๅˆ™ๆž„ๅปบๆ‚จ็š„ๅ†…ๅฎน๏ผŒๅนถไธบๆ‚จ็š„้กน็›ฎๅˆ›ๅปบไธ€ไธชๆ–ฐ้ƒจๅˆ†ใ€‚ๆญคๅค–๏ผŒ้€š่ฟ‡ไฝฟ็”จไธŽๅ†…ๅฎน็›ธๅŒ็š„็›ฎๅฝ•ๅ็งฐๅนถๆทปๅŠ ไธ€ไธช `list.html` ๆ–‡ไปถๆฅไธบ้กน็›ฎ้ƒจๅˆ†ๅˆ›ๅปบไธ€ไธชๆ–ฐๅธƒๅฑ€ใ€‚ + +```shell +. +โ””โ”€โ”€ content +โ”‚ โ””โ”€โ”€ projects +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ first-project.md +โ”‚ โ””โ”€โ”€ second-project.md +โ””โ”€โ”€ layouts + โ””โ”€โ”€ projects + โ””โ”€โ”€ list.html +```` + +่ฟ™ไธช `list.html` ๆ–‡ไปถ็Žฐๅœจๅฐ†่ฆ†็›–้ป˜่ฎค็š„ๅˆ—่กจๆจกๆฟ๏ผŒไฝ†ไป…้€‚็”จไบŽ `projects` ้ƒจๅˆ†ใ€‚ๅœจๆˆ‘ไปฌๆŸฅ็œ‹่ฟ™ไธชๆ–‡ไปถไน‹ๅ‰๏ผŒ่ฎฉๆˆ‘ไปฌ้ฆ–ๅ…ˆๆŸฅ็œ‹ไธชๅˆซ้กน็›ฎๆ–‡ไปถใ€‚ + +```yaml +--- +title: "Congo" +date: 2021-08-11 +icon: "github" +description: "A theme for Hugo built with Tailwind CSS." +topics: ["Hugo", "Web", "Tailwind"] +externalUrl: "https://github.com/jpanther/congo/" +--- +``` + +_ๅœจ่ฟ™ไธช็คบไพ‹ไธญ๏ผŒๆˆ‘ไปฌไธบๆฏไธช้กน็›ฎๅˆ†้…ไบ†ไธ€ไบ›ๅ…ƒๆ•ฐๆฎ๏ผŒ็„ถๅŽๆˆ‘ไปฌๅฏไปฅๅœจๆˆ‘ไปฌ็š„ๅˆ—่กจๆจกๆฟไธญไฝฟ็”จ่ฟ™ไบ›ๅ…ƒๆ•ฐๆฎใ€‚่ฟ™้‡Œๆฒกๆœ‰้กต้ขๅ†…ๅฎน๏ผŒไฝ†ๆฒกๆœ‰้˜ปๆญขๆ‚จๅŒ…ๅซๅฎƒใ€‚ๆฏ•็ซŸ่ฟ™ๆ˜ฏๆ‚จ่‡ชๅทฑ็š„่‡ชๅฎšไน‰ๆจกๆฟ๏ผ_ + +ๆœ‰ไบ†ๅฎšไน‰็š„้กน็›ฎ๏ผŒ็Žฐๅœจๆˆ‘ไปฌๅฏไปฅๅˆ›ๅปบไธ€ไธชๅˆ—่กจๆจกๆฟ๏ผŒ่พ“ๅ‡บๆฏไธช้กน็›ฎ็š„่ฏฆ็ป†ไฟกๆฏใ€‚ + +```go +{{ define "main" }} +
    + {{ range .Pages }} + + {{ end }} +
    +{{ end }} +``` + +่™ฝ็„ถ่ฟ™ๆ˜ฏไธ€ไธช็›ธๅฝ“็ฎ€ๅ•็š„็คบไพ‹๏ผŒไฝ†ๆ‚จๅฏไปฅ็œ‹ๅˆฐๅฎƒ้€ๆญฅๅค„็†ๆญค้ƒจๅˆ†ไธญ็š„ๆฏไธช้กต้ข๏ผˆๅณๆฏไธช้กน็›ฎ๏ผ‰๏ผŒ็„ถๅŽ่พ“ๅ‡บๅˆฐๆฏไธช้กน็›ฎๆ—่พน็š„ HTML ้“พๆŽฅๅ’Œๅ›พๆ ‡ใ€‚ๆฏไธช้กน็›ฎ็š„ๅ‰็ฝฎๅ…ƒๆ•ฐๆฎ็”จไบŽ็กฎๅฎšๆ˜พ็คบๅ“ชไบ›ไฟกๆฏใ€‚ + +่ฏท่ฎฐไฝ๏ผŒๆ‚จ้œ€่ฆ็กฎไฟ็›ธๅ…ณ็š„ๆ ทๅผๅ’Œ็ฑปๅฏ็”จ๏ผŒ่ฟ™ๅฏ่ƒฝ้œ€่ฆ้‡ๆ–ฐ็ผ–่ฏ‘ Tailwind CSSใ€‚่ฟ™ๅœจ [้ซ˜็บง่‡ชๅฎšไน‰]({{< ref "advanced-customisation" >}}) ้ƒจๅˆ†ไธญๆœ‰ๆ›ด่ฏฆ็ป†็š„่ฎจ่ฎบใ€‚ + +ๅœจๅˆ›ๅปบๆญค็ฑป่‡ชๅฎšไน‰ๆจกๆฟๆ—ถ๏ผŒๆœ€็ฎ€ๅ•็š„ๆ–นๆณ•ๅง‹็ปˆๆ˜ฏๆŸฅ็œ‹้ป˜่ฎค Congo ๆจกๆฟ็š„ๅทฅไฝœๆ–นๅผ๏ผŒ็„ถๅŽๅฐ†ๅ…ถ็”จไฝœๆŒ‡ๅ—ใ€‚่ฎฐไฝ๏ผŒ[Hugo ๆ–‡ๆกฃ](https://gohugo.io/templates/introduction/)ไนŸๆ˜ฏๅญฆไน ๆœ‰ๅ…ณๅˆ›ๅปบๆจกๆฟ็š„ๆ›ดๅคšไฟกๆฏ็š„็ปไฝณ่ต„ๆบใ€‚ diff --git a/themes/congo/exampleSite/content/docs/content-examples/thumb-inspiration.svg b/themes/congo/exampleSite/content/docs/content-examples/thumb-inspiration.svg new file mode 100644 index 0000000..7fbf615 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/content-examples/thumb-inspiration.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/exampleSite/content/docs/front-matter/index.ja.md b/themes/congo/exampleSite/content/docs/front-matter/index.ja.md new file mode 100644 index 0000000..6bcf0e4 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/front-matter/index.ja.md @@ -0,0 +1,51 @@ +--- +title: "ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผ" +date: 2020-08-12 +draft: false +description: "CongoใซใŠใ‘ใ‚‹ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใฎ่จญๅฎšใซใคใ„ใฆ" +summary: "Congoใฏใปใจใ‚“ใฉใฎHugoใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่จญๅฎšใ‚’ใ‚ตใƒใƒผใƒˆใ—ใคใคใ€ๅ€‹ใ€…ใฎ่จ˜ไบ‹ใฎ่กจ็คบใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ใŸใ‚ใฎๅคšใใฎใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใ‚’่ฟฝๅŠ ใ—ใฆใ„ใพใ™ใ€‚" +slug: "front-matter" +tags: ["front matter", "config", "docs"] +--- + +[Hugoใฎใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผ](https://gohugo.io/content-management/front-matter/#front-matter-variables)ใซๅŠ ใˆใฆใ€Congoใฏๅ€‹ใ€…ใฎ่จ˜ไบ‹ใฎ่กจ็คบใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ใŸใ‚ใฎใ‚ชใƒ—ใ‚ทใƒงใƒณใ‚’่ฟฝๅŠ ใ—ใฆใ„ใพใ™ใ€‚ๅˆฉ็”จๅฏ่ƒฝใชใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใฎใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไปฅไธ‹ใซ็คบใ—ใพใ™ใ€‚ + +ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฎใƒ‡ใƒ•ใ‚ฉใƒซใƒˆๅ€คใฏใƒ†ใƒผใƒžใฎ[ๅŸบๆœฌ่จญๅฎš]({{< ref "configuration" >}})ใ‹ใ‚‰็ถ™ๆ‰ฟใ•ใ‚Œใ‚‹ใฎใงใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใ‚’ไธŠๆ›ธใใ—ใŸใ„ๅ ดๅˆใซใฎใฟใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใงใ“ใ‚Œใ‚‰ใฎใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + + +|Name|Default|Description| +|---|---|---| +|`title`|_Not set_|่จ˜ไบ‹ใฎๅๅ‰ใ€‚| +|`description`|_Not set_|่จ˜ไบ‹ใฎ่ชฌๆ˜Žๆ–‡ใ€‚HTMLใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใงไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚| +|`feature`|`"*feature*"`|ใ“ใฎ่จ˜ไบ‹ใฎ `feature` ็”ปๅƒใฎใƒ•ใ‚กใ‚คใƒซๅใซใƒžใƒƒใƒใ™ใ‚‹ใƒ†ใ‚ญใ‚นใƒˆใƒ‘ใ‚ฟใƒผใƒณใ€‚| +|`featureAlt`|`""`|`feature` ็”ปๅƒใฎไปฃๆ›ฟใƒ†ใ‚ญใ‚นใƒˆ่ชฌๆ˜Žใ€‚| +|`cover`|`"*cover*"`|ใ“ใฎ่จ˜ไบ‹ใฎ `cover` ็”ปๅƒใฎใƒ•ใ‚กใ‚คใƒซๅใซใƒžใƒƒใƒใ™ใ‚‹ใƒ†ใ‚ญใ‚นใƒˆใƒ‘ใ‚ฟใƒผใƒณใ€‚| +|`coverAlt`|`featureAlt`|`cover` ็”ปๅƒใฎไปฃๆ›ฟใƒ†ใ‚ญใ‚นใƒˆ่ชฌๆ˜Žใ€‚| +|`coverCaption`|_Not set_|`cover` ็”ปๅƒใฎไธ‹ใซ่กจ็คบใ•ใ‚Œใ‚‹ใ‚ญใƒฃใƒ—ใ‚ทใƒงใƒณใƒ†ใ‚ญใ‚นใƒˆใ€‚| +|`thumbnail`|`"*thumb*"`_|ใ“ใฎ่จ˜ไบ‹ใฎ `thumb` ็”ปๅƒใฎใƒ•ใ‚กใ‚คใƒซๅใซใƒžใƒƒใƒใ™ใ‚‹ใƒ†ใ‚ญใ‚นใƒˆใƒ‘ใ‚ฟใƒผใƒณใ€‚| +|`thumbnailAlt`|`featureAlt`|`thumb` ็”ปๅƒใฎไปฃๆ›ฟใƒ†ใ‚ญใ‚นใƒˆ่ชฌๆ˜Žใ€‚| +|`externalUrl`|_Not set_|ใ“ใฎ่จ˜ไบ‹ใŒ็ฌฌไธ‰่€…ใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใงๅ…ฌ้–‹ใ•ใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใฎURLใ€‚URLใ‚’ๆไพ›ใ™ใ‚‹ใ“ใจใงใ€ใ‚ณใƒณใƒ†ใƒณใƒ„ใƒšใƒผใ‚ธใŒ็”Ÿๆˆใ•ใ‚Œใ‚‹ใฎใ‚’้˜ฒใŽใ€ใ“ใฎ่จ˜ไบ‹ใธใฎๅ‚็…งใฏใ™ในใฆ็ฌฌไธ‰่€…ใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใซ็›ดๆŽฅใƒชใƒณใ‚ฏใ•ใ‚Œใพใ™ใ€‚| +|`editURL`|`article.editURL`|`showEdit` ใŒใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–ใชๅ ดๅˆใฎ็ทจ้›†ใƒชใƒณใ‚ฏใฎURLใ€‚| +|`editAppendPath`|`article.editAppendPath`|`editURL`ใง่จญๅฎšใ•ใ‚ŒใŸURLใซ็พๅœจใฎ่จ˜ไบ‹ใธใฎใƒ‘ใ‚นใ‚’่ฟฝๅŠ ใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`groupByYear`|`list.groupByYear`|ไธ€่ฆงใƒšใƒผใ‚ธใง่จ˜ไบ‹ใ‚’ๅนดใ”ใจใซใ‚ฐใƒซใƒผใƒ—ๅŒ–ใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`keywords`|_Not set_|่จ˜ไบ‹ใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใซๅซใ‚ใ‚‹ในใใ‚ญใƒผใƒฏใƒผใƒ‰ใ€‚| +|`menu`|_Not set_|ๅ€คใŒๆŒ‡ๅฎšใ•ใ‚Œใ‚‹ใจใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸใƒกใƒ‹ใƒฅใƒผใซใ“ใฎ่จ˜ไบ‹ใธใฎใƒชใƒณใ‚ฏใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ๆœ‰ๅŠนใชๅ€คใฏ `main` ใพใŸใฏ `footer` ใงใ™ใ€‚| +|`robots`|_Not set_|ใƒญใƒœใƒƒใƒˆใŒใ“ใฎ่จ˜ไบ‹ใ‚’ใฉใฎใ‚ˆใ†ใซๆ‰ฑใ†ในใใ‹ใ‚’็คบใ™ๆ–‡ๅญ—ๅˆ—ใ€‚่จญๅฎšใ•ใ‚ŒใŸๅ ดๅˆใ€ `` ใซๅ‡บๅŠ›ใ•ใ‚Œใพใ™ใ€‚ๆœ‰ๅŠนใชๅ€คใซใคใ„ใฆใฏ[Googleใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives)ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚| +|`sharingLinks`|`article.sharingLinks`|ใ“ใฎ่จ˜ไบ‹ใฎๆœ€ๅพŒใซใฉใฎๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใ‚’่กจ็คบใ™ใ‚‹ใ‹ใ€‚ `false` ใซ่จญๅฎšใ™ใ‚‹ใจๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใฏ่กจ็คบใ•ใ‚Œใพใ›ใ‚“ใ€‚| +|`showAuthor`|`article.showAuthor`|่จ˜ไบ‹ใƒ•ใƒƒใ‚ฟใƒผใซ่‘—่€…ๆฌ„ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showBreadcrumbs`|`article.showBreadcrumbs` or `list.showBreadcrumbs`|ใƒ‘ใƒณใใšใƒชใ‚นใƒˆใ‚’่จ˜ไบ‹ใฎใƒ˜ใƒƒใƒ€ใƒผใซ่กจ็คบใ™ใ‚‹ใ‹ใ€ใƒชใ‚นใƒˆใฎใƒ˜ใƒƒใƒ€ใƒผใซ่กจ็คบใ™ใ‚‹ใ‹ใ€‚| +|`showDate`|`article.showDate`|่จ˜ไบ‹ใŒไฝœๆˆใ•ใ‚ŒใŸๆ—ฅไป˜ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚ๆ—ฅไป˜ใฏ `date` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใง่จญๅฎšใ—ใพใ™ใ€‚| +|`showDateUpdated`|`article.showDateUpdated`|่จ˜ไบ‹ใŒๆ›ดๆ–ฐใ•ใ‚ŒใŸๆ—ฅไป˜ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚ๆ—ฅไป˜ใฏ `lastmod` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใง่จญๅฎšใ—ใพใ™ใ€‚| +|`showEdit`|`article.showEdit`|่จ˜ไบ‹ใฎๅ†…ๅฎนใ‚’็ทจ้›†ใ™ใ‚‹ใŸใ‚ใฎใƒชใƒณใ‚ฏใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showHeadingAnchors`|`article.showHeadingAnchors`|่ฆ‹ๅ‡บใ—ใ‚ขใƒณใ‚ซใƒผใƒชใƒณใ‚ฏใ‚’่จ˜ไบ‹ๅ†…ใฎ่ฆ‹ๅ‡บใ—ใจไธ€็ท’ใซ่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showPagination`|`article.showPagination`|่จ˜ไบ‹ใฎใƒ•ใƒƒใ‚ฟใƒผใซๆฌก/ๅ‰ใฎ่จ˜ไบ‹ใƒชใƒณใ‚ฏใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`invertPagination`|`article.invertPagination`|ๆฌกใฎ่จ˜ไบ‹/ๅ‰ใฎ่จ˜ไบ‹ใƒชใƒณใ‚ฏใฎๅ‘ใใ‚’ๅ่ปขใ•ใ›ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showReadingTime`|`article.showReadingTime`|่จ˜ไบ‹ใฎไบˆๆƒณ่ชญไบ†ๆ™‚้–“ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showTaxonomies`|`article.showTaxonomies`|ใ“ใฎ่จ˜ไบ‹ใซ้–ข้€ฃใ™ใ‚‹Taxonomiesใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showTableOfContents`|`article.showTableOfContents`|ใ“ใฎ่จ˜ไบ‹ใซ็›ฎๆฌกใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showWordCount`|`article.showWordCount`|่จ˜ไบ‹ใฎๅ˜่ชžๆ•ฐใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showComments`|`article.showComments`|[ใ‚ณใƒกใƒณใƒˆ]({{< ref "partials#ใ‚ณใƒกใƒณใƒˆ" >}})ใ‚’่จ˜ไบ‹ใƒ•ใƒƒใ‚ฟใƒผใฎๅพŒใซๅซใ‚ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`showSummary`|`list.showSummary`|ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใซ่จ˜ไบ‹ใฎ่ฆ็ด„ใ‚’่กจ็คบใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| +|`summary`|Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}}))|`showSummary` ใŒๆœ‰ๅŠนใชๅ ดๅˆใ€ใ“ใฎ่จ˜ไบ‹ใฎ่ฆ็ด„ใจใ—ใฆไฝฟ็”จใ•ใ‚Œใ‚‹Markdownๆ–‡ๅญ—ๅˆ—ใ€‚| +|`xml`|`true` unless excluded by `sitemap.excludedKinds`|ใ“ใฎ่จ˜ไบ‹ใŒ `/sitemap.xml` ใƒ•ใ‚กใ‚คใƒซใซๅซใพใ‚Œใ‚‹ใ‹ใฉใ†ใ‹ใ€‚| + diff --git a/themes/congo/exampleSite/content/docs/front-matter/index.md b/themes/congo/exampleSite/content/docs/front-matter/index.md new file mode 100644 index 0000000..d06865f --- /dev/null +++ b/themes/congo/exampleSite/content/docs/front-matter/index.md @@ -0,0 +1,52 @@ +--- +title: "Front Matter" +date: 2020-08-12 +draft: false +description: "All the front matter variables available in Congo." +summary: "While supporting most Hugo defaults, Congo adds a number of front matter parameters to customise the presentation of individual articles." +slug: "front-matter" +tags: ["front matter", "config", "docs"] +--- + +In addition to the [default Hugo front matter parameters](https://gohugo.io/content-management/front-matter/#front-matter-variables), Congo adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below. + +Front matter parameter default values are inherited from the theme's [base configuration]({{< ref "configuration" >}}), so you only need to specify these parameters in your front matter when you want to override the default. + + +|Name|Default|Description| +|---|---|---| +|`title`|_Not set_|The name of the article.| +|`description`|_Not set_|The text description for the article. It is used in the HTML metadata.| +|`feature`|`"*feature*"`|The text pattern to match the feature image filename for this article.| +|`featureAlt`|`""`|The alternative text description for the feature image.| +|`cover`|`"*cover*"`|The text pattern to match the cover image filename for this article.| +|`coverAlt`|`featureAlt`|The alternative text description for the cover image.| +|`coverCaption`|_Not set_|The figure caption text to be displayed beneath the cover image.| +|`thumbnail`|`"*thumb*"`_|The text pattern to match the thumbnail image filename for this article.| +|`thumbnailAlt`|`featureAlt`|The alternative text description for the thumbnail image.| +|`externalUrl`|_Not set_|If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website.| +|`canonicalUrl`|`.Permalink`|When set, this overrides the canonical URL metadata for the article.| +|`editURL`|`article.editURL`|When `showEdit` is active, the URL for the edit link.| +|`editAppendPath`|`article.editAppendPath`|When `showEdit` is active, whether or not the path to the current article should be appended to the URL set at `editURL`.| +|`groupByYear`|`list.groupByYear`|Whether or not articles are grouped by year on list pages.| +|`keywords`|_Not set_|Any keywords that should be included in the article metadata.| +|`menu`|_Not set_|When a value is provided, a link to this article will appear in the named menus. Valid values are `main` or `footer`.| +|`robots`|_Not set_|String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.| +|`sharingLinks`|`article.sharingLinks`|Which sharing links to display at the end of this article. When not provided, or set to `false` no links will be displayed.| +|`showAuthor`|`article.showAuthor`|Whether or not the author box is displayed in the article footer.| +|`showBreadcrumbs`|`article.showBreadcrumbs` or `list.showBreadcrumbs`|Whether the breadcrumbs are displayed in the article or list header.| +|`showDate`|`article.showDate`|Whether or not the article date is displayed. The date is set using the `date` parameter.| +|`showDateUpdated`|`article.showDateUpdated`|Whether or not the date the article was updated is displayed. The date is set using the `lastmod` parameter.| +|`showEdit`|`article.showEdit`|Whether or not the link to edit the article content should be displayed.| +|`showHeadingAnchors`|`article.showHeadingAnchors`|Whether or not heading anchor links are displayed alongside headings within this article.| +|`showPagination`|`article.showPagination`|Whether or not the next/previous article links are displayed in the article footer.| +|`invertPagination`|`article.invertPagination`|Whether or not to flip the direction of the next/previous article links.| +|`showReadingTime`|`article.showReadingTime`|Whether or not the article reading time is displayed.| +|`showTaxonomies`|`article.showTaxonomies`|Whether or not the taxonomies that relate to this article are displayed.| +|`showTableOfContents`|`article.showTableOfContents`|Whether or not the table of contents is displayed on this article.| +|`showWordCount`|`article.showWordCount`|Whether or not the article word count is displayed.| +|`showComments`|`article.showComments`|Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer.| +|`showSummary`|`list.showSummary`|Whether or not the article summary should be displayed on list pages.| +|`summary`|Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}}))|When `showSummary` is enabled, this is the Markdown string to be used as the summary for this article.| +|`xml`|`true` unless excluded by `sitemap.excludedKinds`|Whether or not this article is included in the generated `/sitemap.xml` file.| + diff --git a/themes/congo/exampleSite/content/docs/front-matter/index.zh-Hans.md b/themes/congo/exampleSite/content/docs/front-matter/index.zh-Hans.md new file mode 100644 index 0000000..512b8be --- /dev/null +++ b/themes/congo/exampleSite/content/docs/front-matter/index.zh-Hans.md @@ -0,0 +1,51 @@ +--- +title: "Front Matter" +date: 2020-08-12 +draft: false +description: "Congoไธญๅฏ็”จ็š„ๆ‰€ๆœ‰Front Matter ๅ˜้‡ใ€‚" +summary: "่™ฝ็„ถๆ”ฏๆŒๅคงๅคšๆ•ฐ Hugo ้ป˜่ฎคๅ€ผ๏ผŒไฝ† Congo ๆทปๅŠ ไบ†่ฎธๅคšๅ‰็ฝฎๅ‚ๆ•ฐ๏ผŒไปฅๅฎšๅˆถๅ•ไธชๆ–‡็ซ ็š„ๅ‘ˆ็Žฐๆ–นๅผใ€‚" +slug: "front-matter" +tags: ["front matter", "config", "docs"] +--- + +้™คไบ†[้ป˜่ฎค Hugo ็š„Front Matterๅ˜้‡](https://gohugo.io/content-management/front-matter/#front-matter-variables)ไน‹ๅค–๏ผŒCongo ๆทปๅŠ ไบ†่ฎธๅคš้ขๅค–็š„้€‰้กน๏ผŒไปฅๅฎšๅˆถๅ•ไธชๆ–‡็ซ ็š„ๅ‘ˆ็Žฐๆ–นๅผใ€‚ไปฅไธ‹ๆ˜ฏๆ‰€ๆœ‰ๅฏ็”จ็š„ไธป้ข˜ๅ‰็ฝฎๅ˜้‡ๅ‚ๆ•ฐใ€‚ + +Front Matterๅ‚ๆ•ฐ็š„้ป˜่ฎคๅ€ผๆ˜ฏไปŽไธป้ข˜็š„[ๅŸบ็ก€้…็ฝฎ]({{< ref "configuration" >}})ไธญ็ปงๆ‰ฟ็š„๏ผŒๅ› ๆญคๅชๆœ‰ๅœจ่ฆ่ฆ†็›–้ป˜่ฎคๅ€ผๆ—ถๆ‰้œ€่ฆๅœจFront Matterๅ˜้‡ไธญๆŒ‡ๅฎš่ฟ™ไบ›ๅ‚ๆ•ฐใ€‚ + + +|Name|Default|Description| +|---|---|---| +|`title`|_ๆœช่ฎพ็ฝฎ_|ๆ–‡็ซ ็š„ๆ ‡้ข˜ใ€‚| +|`description`|_ๆœช่ฎพ็ฝฎ_|ๆ–‡็ซ ็š„ๆ–‡ๆœฌๆ่ฟฐใ€‚็”จไบŽ HTML ๅ…ƒๆ•ฐๆฎใ€‚| +|`feature`|`"*feature*"`|็”จไบŽๅŒน้…ๆญคๆ–‡็ซ ็š„featureๅ›พ็‰‡ๆ–‡ไปถๅ็š„ๆ–‡ๆœฌๆจกๅผใ€‚| +|`featureAlt`|`""`|featureๅ›พ็‰‡็š„ๆ›ฟไปฃๆ–‡ๆœฌๆ่ฟฐใ€‚| +|`cover`|`"*cover*"`|็”จไบŽๅŒน้…ๆญคๆ–‡็ซ ็š„ๅฐ้ขๅ›พ็‰‡ๆ–‡ไปถๅ็š„ๆ–‡ๆœฌๆจกๅผใ€‚| +|`coverAlt`|`featureAlt`|ๅฐ้ขๅ›พ็‰‡็š„ๆ›ฟไปฃๆ–‡ๆœฌๆ่ฟฐใ€‚| +|`coverCaption`|_ๆœช่ฎพ็ฝฎ_|ๅœจๅฐ้ขๅ›พ็‰‡ไธ‹ๆ–นๆ˜พ็คบ็š„ๅ›พๆณจๆ–‡ๆœฌใ€‚| +|`thumbnail`|`"*thumb*"`_|็”จไบŽๅŒน้…ๆญคๆ–‡็ซ ็š„็ผฉ็•ฅๅ›พๅ›พ็‰‡ๆ–‡ไปถๅ็š„ๆ–‡ๆœฌๆจกๅผใ€‚| +|`thumbnailAlt`|`featureAlt`|็ผฉ็•ฅๅ›พๅ›พ็‰‡็š„ๆ›ฟไปฃๆ–‡ๆœฌๆ่ฟฐใ€‚| +|`externalUrl`|_ๆœช่ฎพ็ฝฎ_|ๅฆ‚ๆžœๆญคๆ–‡็ซ ๅ‘่กจๅœจ็ฌฌไธ‰ๆ–น็ฝ‘็ซ™ไธŠ๏ผŒๅˆ™ไธบๆญคๆ–‡็ซ ็š„ URLใ€‚ๆไพ› URL ๅฐ†้˜ปๆญข็”Ÿๆˆๅ†…ๅฎน้กต้ข๏ผŒๅนถไธ”ๅฏนๆญคๆ–‡็ซ ็š„ไปปไฝ•ๅผ•็”จๅฐ†็›ดๆŽฅ้“พๆŽฅๅˆฐ็ฌฌไธ‰ๆ–น็ฝ‘็ซ™ใ€‚| +|`editURL`|`article.editURL`|ๅฝ“ `showEdit` ๆฟ€ๆดปๆ—ถ๏ผŒ็ผ–่พ‘้“พๆŽฅ็š„ URLใ€‚| +|`editAppendPath`|`article.editAppendPath`|ๅฝ“ `showEdit` ๆฟ€ๆดปๆ—ถ๏ผŒๆ˜ฏๅฆๅฐ†ๅฝ“ๅ‰ๆ–‡็ซ ็š„่ทฏๅพ„้™„ๅŠ ๅˆฐ `editURL` ่ฎพ็ฝฎ็š„ URLใ€‚| +|`groupByYear`|`list.groupByYear`|ๆ–‡็ซ ๅœจๅˆ—่กจ้กต้ขไธŠๆ˜ฏๅฆๆŒ‰ๅนดไปฝๅˆ†็ป„ใ€‚| +|`keywords`|_ๆœช่ฎพ็ฝฎ_|ๅบ”ๅŒ…ๅซๅœจๆ–‡็ซ ๅ…ƒๆ•ฐๆฎไธญ็š„ไปปไฝ•ๅ…ณ้”ฎๅญ—ใ€‚| +|`menu`|_ๆœช่ฎพ็ฝฎ_|ๆไพ›ๆ•ฐๅ€ผๆ—ถ๏ผŒๆญคๆ–‡็ซ ็š„้“พๆŽฅๅฐ†ๅ‡บ็ŽฐๅœจๆŒ‡ๅฎš็š„่œๅ•ไธญใ€‚ๆœ‰ๆ•ˆๅ€ผไธบ `main` ๆˆ– `footer`ใ€‚| +|`robots`|_ๆœช่ฎพ็ฝฎ_|ๆŒ‡็คบ็ˆฌ่™ซๆœบๅ™จไบบๅฆ‚ไฝ•ๅค„็†ๆญคๆ–‡็ซ ็š„ๅญ—็ฌฆไธฒใ€‚ๅฆ‚ๆžœ่ฎพ็ฝฎ๏ผŒๅฎƒๅฐ†่พ“ๅ‡บๅˆฐ้กต้ขๅคด้ƒจใ€‚ๅ‚่€ƒ[Googleๆ–‡ๆกฃ](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives)่Žทๅ–ๆœ‰ๆ•ˆๅ€ผใ€‚| +|`sharingLinks`|`article.sharingLinks`|ๅœจๆ–‡็ซ ๆœซๅฐพๆ˜พ็คบๅ“ชไบ›ๅˆ†ไบซ้“พๆŽฅใ€‚ๅฆ‚ๆžœๆœชๆไพ›ๆˆ–่ฎพ็ฝฎไธบ `false`๏ผŒๅˆ™ไธๆ˜พ็คบไปปไฝ•้“พๆŽฅใ€‚| +|`showAuthor`|`article.showAuthor`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ้กต่„šๆ˜พ็คบไฝœ่€…ๆก†ใ€‚| +|`showBreadcrumbs`|`article.showBreadcrumbs` ๆˆ– `list.showBreadcrumbs`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ๆˆ–ๅˆ—่กจ้กต็œ‰ไธญๆ˜พ็คบ้ขๅŒ…ๅฑ‘ใ€‚| +|`showDate`|`article.showDate`|ๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ๆ—ฅๆœŸใ€‚ๆ—ฅๆœŸไฝฟ็”จ `date` ๅ‚ๆ•ฐ่ฎพ็ฝฎใ€‚| +|`showDateUpdated`|`article.showDateUpdated`|ๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ็š„ๆ›ดๆ–ฐๆ—ฅๆœŸใ€‚ๆ—ฅๆœŸไฝฟ็”จ `lastmod` ๅ‚ๆ•ฐ่ฎพ็ฝฎใ€‚| +|`showEdit`|`article.showEdit`|ๆ˜ฏๅฆๆ˜พ็คบ็ผ–่พ‘ๆ–‡็ซ ๅ†…ๅฎน็š„้“พๆŽฅใ€‚| +|`showHeadingAnchors`|`article.showHeadingAnchors`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ไธญ็š„ๆ ‡้ข˜ๆ—่พนๆ˜พ็คบๆ ‡้ข˜้”š้“พๆŽฅใ€‚| +|`showPagination`|`article.showPagination`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ้กต่„šๆ˜พ็คบไธ‹ไธ€็ฏ‡/ไธŠไธ€็ฏ‡ๆ–‡็ซ ็š„้“พๆŽฅใ€‚| +|`invertPagination`|`article.invertPagination`|ๆ˜ฏๅฆ็ฟป่ฝฌไธ‹ไธ€็ฏ‡/ไธŠไธ€็ฏ‡ๆ–‡็ซ ้“พๆŽฅ็š„ๆ–นๅ‘ใ€‚| +|`showReadingTime`|`article.showReadingTime`|ๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ็š„้˜…่ฏปๆ—ถ้—ดใ€‚| +|`showTaxonomies`|`article.showTaxonomies`|ๆ˜ฏๅฆๆ˜พ็คบไธŽๆญคๆ–‡็ซ ็›ธๅ…ณ็š„ๅˆ†็ฑปๆณ•ใ€‚| +|`showTableOfContents`|`article.showTableOfContents`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ไธญๆ˜พ็คบ็›ฎๅฝ•ใ€‚| +|`showWordCount`|`article.showWordCount`|ๆ˜ฏๅฆๆ˜พ็คบๆ–‡็ซ ็š„ๅญ—ๆ•ฐ็ปŸ่ฎกใ€‚| +|`showComments`|`article.showComments`|ๆ˜ฏๅฆๅœจๆ–‡็ซ ้กต่„šๅŽๅŒ…ๅซ[่ฏ„่ฎบ้ƒจๅˆ†]({{< ref "partials#comments" >}})ใ€‚| +|`showSummary`|`list.showSummary`|ๆ˜ฏๅฆๅœจๅˆ—่กจ้กตไธŠๆ˜พ็คบๆ–‡็ซ ๆ‘˜่ฆใ€‚| +|`summary`|ไฝฟ็”จ `summaryLength` ่‡ชๅŠจ็”Ÿๆˆ๏ผˆๅ‚่ง[็ซ™็‚น้…็ฝฎ]({{< ref "configuration#site-configuration" >}})๏ผ‰|ๅฝ“ๅฏ็”จ `showSummary` ๆ—ถ๏ผŒ็”จไฝœๆญคๆ–‡็ซ ๆ‘˜่ฆ็š„ Markdown ๅญ—็ฌฆไธฒใ€‚| +|`xml`|`true`๏ผŒ้™ค้ž่ขซ `sitemap.excludedKinds` ๆŽ’้™ค|ๆญคๆ–‡็ซ ๆ˜ฏๅฆๅŒ…ๅซๅœจ็”Ÿๆˆ็š„ `/sitemap.xml` ๆ–‡ไปถไธญใ€‚| + diff --git a/themes/congo/exampleSite/content/docs/front-matter/thumb-file-analysis.svg b/themes/congo/exampleSite/content/docs/front-matter/thumb-file-analysis.svg new file mode 100644 index 0000000..bf4cc30 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/front-matter/thumb-file-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/exampleSite/content/docs/getting-started/article-screenshot.jpg b/themes/congo/exampleSite/content/docs/getting-started/article-screenshot.jpg new file mode 100644 index 0000000..9a7d721 Binary files /dev/null and b/themes/congo/exampleSite/content/docs/getting-started/article-screenshot.jpg differ diff --git a/themes/congo/exampleSite/content/docs/getting-started/index.ja.md b/themes/congo/exampleSite/content/docs/getting-started/index.ja.md new file mode 100644 index 0000000..961977c --- /dev/null +++ b/themes/congo/exampleSite/content/docs/getting-started/index.ja.md @@ -0,0 +1,246 @@ +--- +title: "ใฏใ˜ใ‚ใซ" +date: 2020-08-15 +draft: false +description: "Congoใ‚’ไฝฟใ„ๅง‹ใ‚ใ‚‹ๆ–นๆณ•" +summary: "ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใงใฏใ€ใ™ใงใซCongoใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใ€ใ‚ซใƒฉใƒผใ‚นใ‚ญใƒผใƒ ใ€ใƒกใƒ‹ใƒฅใƒผใ€ใ‚ณใƒณใƒ†ใƒณใƒ„ๆง‹้€ ใฎ้ธๆŠžใชใฉๅŸบๆœฌ็š„ใช่จญๅฎšไฝœๆฅญใ‚’่กŒใ†ๆบ–ๅ‚™ใŒใงใใฆใ„ใ‚‹ใ“ใจใ‚’ๅ‰ๆใจใ—ใฆใ„ใพใ™ใ€‚" +slug: "getting-started" +tags: ["installation", "docs"] +--- + +{{< alert >}} +ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใฏใ‚ใชใŸใŒๆ—ขใซ[ใ‚คใƒณใ‚นใƒˆใƒผใƒซ]({{< ref "docs/installation" >}})ใ‚’็ต‚ใˆใฆใ„ใ‚‹ใ“ใจใ‚’ๅ‰ๆใจใ—ใฆใ„ใพใ™ใ€‚ +{{< /alert >}} + +CongoใซๅŒๆขฑใ•ใ‚Œใฆใ„ใ‚‹่จญๅฎšใƒ•ใ‚กใ‚คใƒซใซใฏใ€ใƒ†ใƒผใƒžใŒ่ช่ญ˜ใงใใ‚‹ใ™ในใฆใฎ่จญๅฎšใŒๅซใพใ‚ŒใŠใ‚Šใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏๅคšใใฏใ‚ณใƒกใƒณใƒˆใ‚ขใ‚ฆใƒˆใ•ใ‚Œใฆใ„ใพใ™ใŒใ€็‰นๅฎšใฎๆฉŸ่ƒฝใ‚’ๆœ‰ๅŠนใซใ—ใŸใ‚Šๅค‰ๆ›ดใ—ใŸใ‚Šใ™ใ‚‹ใซใฏใ€ใ‚ณใƒกใƒณใƒˆใ‚ขใ‚ฆใƒˆใ‚’่งฃ้™คใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +## ๅŸบๆœฌ่จญๅฎš + +ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ไฝœๆˆใ™ใ‚‹ๅ‰ใซใ€ๆ–ฐ่ฆใ‚คใƒณใ‚นใƒˆใƒผใƒซ็”จใซ่จญๅฎšใ™ในใใ“ใจใŒใ„ใใคใ‹ใ‚ใ‚Šใพใ™ใ€‚ใพใš `config.toml` ใƒ•ใ‚กใ‚คใƒซใงใ€`baseURL` ใจ `languageCode` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’่จญๅฎšใ—ใ€ `languageCode` ใซใฏใ€ใ‚ณใƒณใƒ†ใƒณใƒ„ใฎไฝœๆˆใซไฝฟ็”จใ™ใ‚‹ใƒกใ‚คใƒณใฎ่จ€่ชžใ‚’่จญๅฎšใ—ใพใ—ใ‚‡ใ†ใ€‚ + +```toml +# config/_default/config.toml + +baseURL = "https://your_domain.com/" +languageCode = "en" +``` + +ๆฌกใฎใ‚นใƒ†ใƒƒใƒ—ใฏ่จ€่ชž่จญๅฎšใงใ™ใ€‚Congoใฏๅคš่จ€่ชžใ‚’ใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใพใ™ใŒใ€ไปŠใฏใƒกใ‚คใƒณใฎ่จ€่ชžใ ใ‘ใ‚’่จญๅฎšใ—ใฆใใ ใ•ใ„ใ€‚ + +`config/_default` ใฎไธญใซใ‚ใ‚‹ `languages.en.toml` ใƒ•ใ‚กใ‚คใƒซใ‚’ๆŽขใ—ใฆใใ ใ•ใ„ใ€‚ใƒกใ‚คใƒณ่จ€่ชžใŒ่‹ฑ่ชžใฎๅ ดๅˆใฏใ€ใ“ใฎใƒ•ใ‚กใ‚คใƒซใ‚’ใใฎใพใพไฝฟใ†ใ“ใจใŒใงใใพใ™ใ€‚ใใ†ใงใชใ„ๅ ดๅˆใฏใ€ใƒ•ใ‚กใ‚คใƒซๅใซๆญฃใ—ใ„่จ€่ชžใ‚ณใƒผใƒ‰ใŒๅซใพใ‚Œใ‚‹ใ‚ˆใ†ใซใƒ•ใ‚กใ‚คใƒซๅใ‚’ๅค‰ๆ›ดใ—ใฆใใ ใ•ใ„ใ€‚ไพ‹ใˆใฐใƒ•ใƒฉใƒณใ‚น่ชžใฎๅ ดๅˆใฏใ€ `languages.fr.toml` ใซใƒ•ใ‚กใ‚คใƒซๅใ‚’ๅค‰ๆ›ดใ—ใพใ™ใ€‚ + +{{< alert >}} +่จ€่ชž่จญๅฎšใƒ•ใ‚กใ‚คใƒซๅใฎ่จ€่ชžใ‚ณใƒผใƒ‰ใฏใ€ `config.toml` ใฎ `languageCode` ่จญๅฎšใจไธ€่‡ดใ—ใฆใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ +{{< /alert >}} + +```toml +# config/_default/languages.en.toml + +title = "My awesome website" + +[params.author] +name = "My name" +image = "img/author.jpg" +headline = "A generally awesome human" +bio = "A little bit about me" +links = [ + { twitter = "https://twitter.com/username" } +] +``` + +`[params.author]` ใฏใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆไธŠใงใฉใฎใ‚ˆใ†ใซ่‘—่€…ๆƒ…ๅ ฑใ‚’่กจ็คบใ™ใ‚‹ใ‹ใ‚’ๆฑบๅฎšใ—ใพใ™ใ€‚็”ปๅƒใฏใ‚ตใ‚คใƒˆใฎ `assets/` ใซ็ฝฎใใพใ—ใ‚‡ใ†ใ€‚ใƒชใƒณใ‚ฏใฏใƒชใ‚นใƒˆใฎ่จ˜่ฟฐ้ †ใซๆฒฟใฃใฆ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ + +ๅ„่จญๅฎšใซ้–ขใ™ใ‚‹่ฉณ็ดฐๆƒ…ๅ ฑใฏใ€[่จญๅฎš]({{< ref "configuration" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใง่ชฌๆ˜Žใ•ใ‚Œใฆใ„ใพใ™ใ€‚ + +## ใ‚ซใƒฉใƒผใ‚นใ‚ญใƒผใƒ  + +Congoใซใฏใ„ใใคใ‹ใฎใ‚ซใƒฉใƒผใ‚นใ‚ญใƒผใƒ ใŒๅŒๆขฑใ•ใ‚Œใฆใ„ใพใ™ใ€‚้…่‰ฒใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใซใฏใ€`colorScheme` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’่จญๅฎšใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ๆœ‰ๅŠนใชใ‚ชใƒ—ใ‚ทใƒงใƒณใฏ `congo` ๏ผˆใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ๏ผ‰ใ€ `avocado` ใ€ `cherry` ใ€ `fire` ใ€ `ocean` ใ€ `sapphire` ใ€ `slate` ใงใ™ใ€‚ + +{{< alert >}} +`colourScheme` ใฎๅ€คใฏๅฐๆ–‡ๅญ—ใงๆŒ‡ๅฎšใ—ใพใ™ใ€‚ +{{< /alert >}} + +```toml +# config/_default/params.toml + +colorScheme = "congo" +``` + +Congoใฏใ€ใƒ†ใƒผใƒžๅ…จไฝ“ใงไฝฟ็”จใ•ใ‚Œใ‚‹3่‰ฒใฎใƒ‘ใƒฌใƒƒใƒˆใ‚’ๅฎš็พฉใ—ใฆใ„ใพใ™ใ€‚ใใ‚Œใžใ‚Œใฎใƒกใ‚คใƒณใ‚ซใƒฉใƒผใซใฏใ€[Tailwind](https://tailwindcss.com/docs/customizing-colors#color-palette-reference)ใซๅซใพใ‚Œใ‚‹10่‰ฒใฎๆฟƒๆทกใŒๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ + +#### Congo (default) + +{{< swatches "#71717a" "#8b5cf6" "#d946ef" >}} + +#### Avocado + +{{< swatches "#78716c" "#84cc16" "#10b981" >}} + +#### Cherry + +{{< swatches "#737373" "#f43f5e" "#22c55e" >}} + +#### Fire + +{{< swatches "#78716c" "#f97316" "#f43f5e" >}} + +#### Ocean + +{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}} + +#### Sapphire + +{{< swatches "#64748b" "#6366f1" "#ec4899" >}} + +#### Slate + +{{< swatches "#6B7280" "#64748b" "#6B7280" >}} + +็‹ฌ่‡ชใฎ้…่‰ฒใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚่ฉณใ—ใใฏ [้ซ˜ๅบฆใช่จญๅฎš]({{< ref "advanced-customisation#colour-schemes" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚ + +## ใ‚ณใƒณใƒ†ใƒณใƒ„ใฎๆ•ด็† + +Congoใฏ็‰นๅฎšใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚ฟใ‚คใƒ—ใ‚’ๅผทๅˆถใ—ใพใ›ใ‚“ใ€‚ใใฎใŸใ‚ใ€่‡ช็”ฑใซใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ๅฎš็พฉใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚้™็š„ใชใ‚ตใ‚คใƒˆใซใฏ*pages*ใ€ใƒ–ใƒญใ‚ฐใซใฏ*posts*ใ€ใƒใƒผใƒˆใƒ•ใ‚ฉใƒชใ‚ชใซใฏ*projects*ใŒใ„ใ„ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚ + +### ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๆง‹้€  + +ๅŸบๆœฌ็š„ใชCongoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๆฆ‚่ฆใ‚’่ชฌๆ˜Žใ—ใพใ™ใ€‚ใ™ในใฆใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใฏ `content` ใซ็ฝฎใ‹ใ‚Œใพใ™: + +```shell +. +โ”œโ”€โ”€ assets +โ”‚ โ””โ”€โ”€ img +โ”‚ โ””โ”€โ”€ author.jpg +โ”œโ”€โ”€ config +โ”‚ โ””โ”€โ”€ _default +โ”œโ”€โ”€ content +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ about.md +โ”‚ โ””โ”€โ”€ posts +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ first-post.md +โ”‚ โ””โ”€โ”€ another-post +โ”‚ โ”œโ”€โ”€ aardvark.jpg +โ”‚ โ””โ”€โ”€ index.md +โ””โ”€โ”€ themes + โ””โ”€โ”€ congo +``` + +{{< alert >}} +ใ“ใ“ใงๆณจๆ„ใ—ใชใ‘ใ‚Œใฐใชใ‚‰ใชใ„ใฎใฏใ€ใ‚ณใƒณใƒ†ใƒณใƒ„ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฎไธญใงใ€้€šๅธธใฎ่จ˜ไบ‹ใƒšใƒผใ‚ธใฏ `index.md` ใจใ„ใ†ๅๅ‰ใซใชใ‚Šใ€ใƒชใ‚นใƒˆใƒšใƒผใ‚ธใฏ `_index.md` ใจใ„ใ†ๅๅ‰ใซใชใ‚‹ใจใ„ใ†ใ“ใจใงใ™ใ€‚่จ˜ไบ‹ใซไป˜้šใ™ใ‚‹ใ‚ขใ‚ปใƒƒใƒˆใฏใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใƒ•ใ‚กใ‚คใƒซใจไธ€็ท’ใซใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ็ฝฎใๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ +{{< /alert >}} + +ใ“ใฎใƒ†ใƒผใƒžใฏHugoใฎใƒšใƒผใ‚ธใƒใƒณใƒ‰ใƒซใ‚’ๆœ€ๅคง้™ใซๆดป็”จใ™ใ‚‹ใ‚ˆใ†ใซ่จญ่จˆใ•ใ‚Œใฆใ„ใ‚‹ใŸใ‚ใ€HugoใŒใฉใฎใ‚ˆใ†ใซใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ๆ•ด็†ใ™ใ‚‹ใ“ใจใ‚’ๆƒณๅฎšใ—ใฆใ„ใ‚‹ใ‹ใ‚’ใ—ใฃใ‹ใ‚ŠใจๆŠŠๆกใ™ใ‚‹ใ“ใจใŒ้‡่ฆใงใ™ใ€‚่ฉณใ—ใใฏ[Hugoๅ…ฌๅผใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](https://gohugo.io/content-management/organization/)ใ‚’่ชญใ‚“ใงใใ ใ•ใ„ใ€‚ + +### featureใ€coverใ€ใใ—ใฆthumb(nail) + +Congoใฏใ€่จ˜ไบ‹ใƒชใ‚นใƒˆใจๅ€‹ใ€…ใฎ่จ˜ไบ‹ใƒšใƒผใ‚ธใฎไธŠ้ƒจใซ็”ปๅƒใ‚’่กจ็คบใงใใพใ™ใ€‚ใ‚ตใƒใƒผใƒˆใ•ใ‚Œใฆใ„ใ‚‹็”ปๅƒใซใฏ3ใคใฎใ‚ฟใ‚คใƒ—ใŒใ‚ใ‚Šใ€ใใ‚Œใžใ‚Œใซไฝฟ็”จไพ‹ใŒใ‚ใ‚Šใพใ™: `feature` ใ€ `cover` ใ€ `thumb` ใงใ™ใ€‚ + +ไปฅไธ‹ใฎไพ‹ใงใฏใ€ `first-post` ใฎ่จ˜ไบ‹ใซ `cover` ใจ `thumb` ใ‚’็”จๆ„ใ—ใฆใ„ใพใ™: + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ posts + โ”œโ”€โ”€ _index.md + โ””โ”€โ”€ first-post + โ”œโ”€โ”€ cover.jpg + โ”œโ”€โ”€ index.md + โ””โ”€โ”€ thumb.jpg +``` + +`thumb` ็”ปๅƒใฏ่จ˜ไบ‹ใฎใ‚ตใƒ ใƒใ‚คใƒซใจใ—ใฆ่จ˜ไบ‹ใƒชใ‚นใƒˆใง่กจ็คบใ•ใ‚Œใ€ `cover` ็”ปๅƒใฏๅ€‹ใ€…ใฎ่จ˜ไบ‹ใƒšใƒผใ‚ธใง่จ˜ไบ‹ๅ†…ๅฎนใฎไธŠ้ƒจใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ + +![A screenshot of an article with a thumbnail image](article-screenshot.jpg "ใ“ใฎไพ‹ใงใฏใ€ `thumb` ็”ปๅƒไป˜ใใฎ่จ˜ไบ‹ใ‚’็คบใ—ใฆใ„ใพใ™ใ€‚") + +{{< alert >}} +ใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใฎ่ฆณ็‚นใ‹ใ‚‰ใ€ `thumb` ็”ปๅƒใฏ่‡ชๅ‹•็š„ใซ4:3ใฎๆฏ”็އใซใƒˆใƒชใƒŸใƒณใ‚ฐใƒปใƒชใ‚ตใ‚คใ‚บใ•ใ‚Œใพใ™ใ€‚ `cover` ็”ปๅƒใฏๅ†…ๅฎนใซๅˆใ‚ใ›ใฆ่‡ชๅ‹•็š„ใซใƒชใ‚ตใ‚คใ‚บใ•ใ‚Œใพใ™ใŒใ€ๆฏ”็އใฏๅ•ใ„ใพใ›ใ‚“ใ€‚ +{{< /alert >}} + +The `feature` image is a special type, and when present, it will be used in place of _both_ the `thumb` and `cover` images. Feature images are also present in the article metadata, which is included when content is shared to third-party networks like Facebook and Twitter. +`feature` ็”ปๅƒใฏ็‰นๅˆฅใงใ€ๅญ˜ๅœจใ™ใ‚‹ๅ ดๅˆใซใฏ `thumb` ็”ปๅƒใจ `cover` ็”ปๅƒใฎไธกๆ–นใฎไปฃใ‚ใ‚Šใซไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚ `feature` ็”ปๅƒใฏ่จ˜ไบ‹ใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใจใ—ใฆใ€Facebookใ‚„Twitterใฎใ‚ˆใ†ใชใ‚ตใƒผใƒ‰ใƒ‘ใƒผใƒ†ใ‚ฃใฎใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใซใ‚ณใƒณใƒ†ใƒณใƒ„ใŒๅ…ฑๆœ‰ใ•ใ‚Œใ‚‹ๅ ดๅˆใซใ‚‚ๅซใพใ‚Œใพใ™ใ€‚ + +Congoใฏ่จ˜ไบ‹็”ปๅƒใ‚’ใ‚คใƒณใƒ†ใƒชใ‚ธใ‚งใƒณใƒˆใซๆคœๅ‡บใ—ใ€่‡ชๅ‹•็š„ใซใ‚ใชใŸใฎใ‚ตใ‚คใƒˆใซ่ฟฝๅŠ ใ—ใพใ™ใ€‚ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผใงใใ‚Œใ‚‰ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ๅฟ…่ฆใฏใชใใ€ใƒšใƒผใ‚ธใƒชใ‚ฝใƒผใ‚นๅ†…ใซ้ฉๅˆ‡ใชๅๅ‰ใฎใƒ•ใ‚กใ‚คใƒซใ‚’้…็ฝฎใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚็”ปๅƒใƒ•ใ‚กใ‚คใƒซๅใฎใฉใ“ใ‹ใซ `feature` ใ€ `cover` ใ€ `thumb` ใจใ„ใ†ๅ˜่ชžใŒใ‚ใ‚Œใฐใ€ใใ‚ŒใŒใใฎ็›ฎ็š„ใงไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚ + +[ไพ‹]({{< ref "samples" >}})ใซใฏใ€ใ“ใ‚Œใ‚‰ใฎ็”ปๅƒใฎไพ‹ใŒๅคšๆ•ฐๆŽฒ่ผ‰ใ•ใ‚Œใฆใ„ใพใ™๏ผˆใพใŸใ€[ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰](https://github.com/jpanther/congo/tree/dev/exampleSite/content/samples)ใ‚’ๅ‚็…งใ—ใฆใƒ•ใ‚กใ‚คใƒซๆง‹้€ ใ‚’็ขบ่ชใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™๏ผ‰ใ€‚ + +### Taxonomies + +CongoใฏTaxonomiesใซ้–ขใ—ใฆใ‚‚ๆŸ”่ปŸใงใ™ใ€‚ `tags` ใ‚„ `categories` ใ‚’ไฝฟใฃใฆใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ใ‚ฐใƒซใƒผใƒ—ๅŒ–ใ—ใŸใ„ไบบใ‚‚ใ„ใ‚Œใฐใ€ `topics` ใ‚’ไฝฟใ„ใŸใ„ไบบใ‚‚ใ„ใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ + +Hugoใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใง `posts` ใ€ `tags` ใ€ `categories` ใ‚’ไฝฟ็”จใ™ใ‚‹ใ‚ˆใ†ใซใชใฃใฆใ„ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใ“ใ‚Œใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ—ใŸใ„ๅ ดๅˆใฏใ€ `taxonomies.toml` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใงใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใงใใพใ™: + +```toml +# config/_default/taxonomies.toml + +topic = "topics" +``` + +ไธŠ่จ˜ใฎไพ‹ใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎ _tags_ ใจ _categories_ ใ‚’ _topics_ ใซ็ฝฎใๆ›ใˆใพใ™ใ€‚่ฉณ็ดฐใฏใ€[Hugo Taxonomy docs](https://gohugo.io/content-management/taxonomies/)ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚ + +When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below. + +## ใƒกใƒ‹ใƒฅใƒผ + +Congoใซใฏ2ใคใฎใƒกใƒ‹ใƒฅใƒผใŒใ‚ใ‚Šใ€ใ‚ตใ‚คใƒˆใฎๅ†…ๅฎนใ‚„ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซๅˆใ‚ใ›ใฆใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ `main` ใƒกใƒ‹ใƒฅใƒผใฏใ‚ตใ‚คใƒˆใฎใƒ˜ใƒƒใƒ€ใƒผใซ่กจ็คบใ•ใ‚Œใ€ `footer` ใƒกใƒ‹ใƒฅใƒผใฏใƒšใƒผใ‚ธใฎไธ€็•ชไธ‹ใ€่‘—ไฝœๆจฉ่กจ็คบใฎใ™ใไธŠใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ + +Both menus are configured in the `menus.en.toml` file. Similarly to the languages config file, if you wish to use another language, rename this file and replace `en` with the language code you wish to use. Menu links will be sorted from lowest to highest `weight`, and then alphabetically by `name`. +ใฉใกใ‚‰ใฎใƒกใƒ‹ใƒฅใƒผใ‚‚ `menus.en.toml` ใƒ•ใ‚กใ‚คใƒซใง่จญๅฎšใ™ใ—ใพใ™ใ€‚ `menus.en.toml` ใƒ•ใ‚กใ‚คใƒซใฏ่จ€่ชž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใจๅŒๆง˜ใซใ€ไป–ใฎ่จ€่ชžใ‚’ไฝฟใ„ใŸใ„ๅ ดๅˆใฏใƒ•ใ‚กใ‚คใƒซๅใ‚’ๅค‰ๆ›ดใ—ใฆไฝฟใ„ใŸใ„่จ€่ชžใ‚ณใƒผใƒ‰ใซ็ฝฎใๆ›ใˆใฆใใ ใ•ใ„ใ€‚ใƒกใƒ‹ใƒฅใƒผใฎใƒชใƒณใ‚ฏใฏ `weight` ใฎไฝŽใ„ใ‚‚ใฎใ‹ใ‚‰้ซ˜ใ„ใ‚‚ใฎใธใจใ‚ฝใƒผใƒˆใ•ใ‚Œใ€ๆฌกใซใ‚ขใƒซใƒ•ใ‚กใƒ™ใƒƒใƒˆ้ †ใซ `name` ใงใ‚ฝใƒผใƒˆใ•ใ‚Œใพใ™ใ€‚ + +```toml +# config/_default/menus.en.toml + +[[main]] + name = "Blog" + pageRef = "posts" + weight = 10 + +[[main]] + name = "Topics" + pageRef = "topics" + weight = 20 + +[[main]] + name = "GitHub" + url = "https://github.com/jpanther/congo" + weight = 30 + [main.params] + icon = "github" + showName = false + target = "_blank" + +[[main]] + identifier = "search" + weight = 99 + [main.params] + action = "search" + icon = "search" + +[[footer]] + name = "Privacy" + pageRef = "privacy" +``` + +### ๅŸบๆœฌใฎใƒชใƒณใ‚ฏ + +`name` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฏใƒกใƒ‹ใƒฅใƒผใƒชใƒณใ‚ฏใงไฝฟ็”จใ™ใ‚‹ใƒ†ใ‚ญใ‚นใƒˆใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ใพใŸใ€ใ‚ชใƒ—ใ‚ทใƒงใƒณใงใƒชใƒณใ‚ฏใฎHTMLใ‚ฟใ‚คใƒˆใƒซๅฑžๆ€งใจใชใ‚‹ `title` ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ + +`pageRef` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไฝฟใ†ใจใ€Hugoใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใƒšใƒผใ‚ธใ‚„Taxonomyใ‚’็ฐกๅ˜ใซๅ‚็…งใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚Hugoใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚ขใ‚คใƒ†ใƒ ใ‚’ๅ‚็…งใ™ใ‚‹ใ ใ‘ใงใ€่‡ชๅ‹•็š„ใซๆญฃใ—ใ„ใƒชใƒณใ‚ฏใŒไฝœๆˆใ•ใ‚Œใ‚‹ใฎใงใ€ใƒกใƒ‹ใƒฅใƒผใ‚’่จญๅฎšใ™ใ‚‹ๆœ€ใ‚‚็ฐกๅ˜ใชๆ–นๆณ•ใงใ™ใ€‚ๅค–้ƒจURLใธใฎใƒชใƒณใ‚ฏใซใฏ `url` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚ + +ใƒชใƒณใ‚ฏๅ†…ใซ `params` ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใงใ€ใ•ใ‚‰ใชใ‚‹ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใŒๅฏ่ƒฝใงใ™ใ€‚ `icon` ใ‚’่ฟฝๅŠ ใ—ใŸใ‚Šใ€ `showName` ใงใƒชใƒณใ‚ฏใƒ†ใ‚ญใ‚นใƒˆใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใŸใ‚Šใ€URLใซ `target` ใ‚’่จญๅฎšใ—ใŸใ‚Šใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ไธŠ่จ˜ใฎไพ‹ใงใฏใ€GitHubใƒชใƒณใ‚ฏใฏใ‚ขใ‚คใ‚ณใƒณใฎใฟใง่กจ็คบใ•ใ‚Œใ€ใƒชใƒณใ‚ฏใฏๆ–ฐใ—ใ„ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใง้–‹ใใพใ™ใ€‚ + +### ใ‚ขใ‚ฏใ‚ทใƒงใƒณใƒชใƒณใ‚ฏ + +There is a special case for creating menu items for links that take theme actions. These are denoted using the `action` parameter, and a value of the action the link should perform. Action links allow for all the same custom parameters as other links and can be styled with an icon or text name. +็‰นๅˆฅใชใ‚ฑใƒผใ‚นใจใ—ใฆใ€ใ‚ขใ‚ฏใ‚ทใƒงใƒณใ‚’ๅฎŸ่กŒใ™ใ‚‹ใƒชใƒณใ‚ฏ้ …็›ฎใ‚’ไฝœๆˆใ™ใ‚‹ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฏ `action` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใจๅฎŸ่กŒใ™ใ‚‹ใ‚ขใ‚ฏใ‚ทใƒงใƒณใฎๅ€คใ‚’ไฝฟใฃใฆๆŒ‡ๅฎšใ—ใพใ™ใ€‚ใ‚ขใ‚ฏใ‚ทใƒงใƒณใƒชใƒณใ‚ฏใงใฏๅŸบๆœฌใฎใƒชใƒณใ‚ฏใจๅŒใ˜ใ‚ซใ‚นใ‚ฟใƒ ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไฝฟ็”จใ™ใ‚‹ใ“ใจใŒใงใใ€ใ‚ขใ‚คใ‚ณใƒณใ‚„ใƒ†ใ‚ญใ‚นใƒˆๅใงใ‚นใ‚ฟใ‚คใƒซใ‚’่จญๅฎšใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ + +ๆœ‰ๅŠนใชใƒ†ใƒผใƒžใƒปใ‚ขใ‚ฏใ‚ทใƒงใƒณใฏ2ใคใ‚ใ‚Šใพใ™: + +- `appearance` ใฏๅค–่ฆณใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹ใƒชใƒณใ‚ฏใ‚’ไฝœๆˆใ—ใพใ™ +- `search` ใฏใ‚ตใ‚คใƒˆๅ†…ๆคœ็ดขใ‚’่กŒใ†ใƒชใƒณใ‚ฏใ‚’ไฝœๆˆใ—ใพใ™ + +ใฉใกใ‚‰ใฎใƒกใƒ‹ใƒฅใƒผใ‚‚ๅฎŒๅ…จใซใ‚ชใƒ—ใ‚ทใƒงใƒณใงใ‚ใ‚Šใ€ๅฟ…่ฆใชใ‘ใ‚Œใฐใ‚ณใƒกใƒณใƒˆใ‚ขใ‚ฆใƒˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใจใ—ใฆๆไพ›ใ•ใ‚Œใฆใ„ใ‚‹ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚‚ๅ‚่€ƒใซใ—ใฆใใ ใ•ใ„ใ€‚ + +## ่ฉณ็ดฐใช่จญๅฎš + +ไธŠ่จ˜ใฎๆ‰‹้ †ใฏๆœ€ไฝŽ้™ใฎ่จญๅฎšใงใ™ใ€‚ใ“ใ‚Œใง `hugo server` ใ‚’ๅฎŸ่กŒใ™ใ‚‹ใจใ€็ฉบ็™ฝใฎCongoใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚่ฉณ็ดฐใช่จญๅฎšใซใคใ„ใฆใฏใ€[่จญๅฎš]({{< ref "configuration" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚ diff --git a/themes/congo/exampleSite/content/docs/getting-started/index.md b/themes/congo/exampleSite/content/docs/getting-started/index.md new file mode 100644 index 0000000..f0a96fd --- /dev/null +++ b/themes/congo/exampleSite/content/docs/getting-started/index.md @@ -0,0 +1,244 @@ +--- +title: "Getting Started" +date: 2020-08-15 +draft: false +description: "Learn how to get started using the Congo theme." +summary: "This section assumes you have already installed the Congo theme and are ready to start with basic configuration tasks like selecting a colour scheme, menu and content structure." +slug: "getting-started" +tags: ["installation", "docs"] +--- + +{{< alert >}} +This section assumes you have already [installed the Congo theme]({{< ref "docs/installation" >}}). +{{< /alert >}} + +The config files that ship with Congo contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature. + +## Basic configuration + +Before creating any content, there are a few things you should set for a new installation. Starting in the `hugo.toml` file, set the `baseURL` and `languageCode` parameters. The `languageCode` should be set to the main language that you will be using to author your content. + +```toml +# config/_default/hugo.toml + +baseURL = "https://your_domain.com/" +languageCode = "en" +``` + +The next step is to configure the language settings. Although Congo supports multilingual setups, for now, just configure the main language. + +Locate the `languages.en.toml` file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to `languages.fr.toml`. + +{{< alert >}} +The language code in the language config filename should match the `languageCode` setting in `hugo.toml`. +{{< /alert >}} + +```toml +# config/_default/languages.en.toml + +title = "My awesome website" + +[params.author] +name = "My name" +image = "img/author.jpg" +headline = "A generally awesome human" +bio = "A little bit about me" +links = [ + { twitter = "https://twitter.com/username" } +] +``` + +The `[params.author]` configuration determines how the author information is displayed on the website. The image should be placed in the site's `assets/` folder. Links will be displayed in the order they are listed. + +If you need extra detail, further information about each of these configuration options, is covered in the [Configuration]({{< ref "configuration" >}}) section. + +## Colour schemes + +Congo ships with a number of colour schemes out of the box. To change the scheme, simply set the `colorScheme` theme parameter. Valid options are `congo` (default), `avocado`, `cherry`, `fire`, `ocean`, `sapphire` and `slate`. + +{{< alert >}} +The `colourScheme` value should be provided in lowercase. +{{< /alert >}} + +```toml +# config/_default/params.toml + +colorScheme = "congo" +``` + +Congo defines a three-colour palette that is used throughout the theme. Each main colour contains ten shades which are based upon the colours that are included in [Tailwind](https://tailwindcss.com/docs/customizing-colors#color-palette-reference). + +#### Congo (default) + +{{< swatches "#71717a" "#8b5cf6" "#d946ef" >}} + +#### Avocado + +{{< swatches "#78716c" "#84cc16" "#10b981" >}} + +#### Cherry + +{{< swatches "#737373" "#f43f5e" "#22c55e" >}} + +#### Fire + +{{< swatches "#78716c" "#f97316" "#f43f5e" >}} + +#### Ocean + +{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}} + +#### Sapphire + +{{< swatches "#64748b" "#6366f1" "#ec4899" >}} + +#### Slate + +{{< swatches "#6B7280" "#64748b" "#6B7280" >}} + +Although these are the default schemes, you can also create your own. Refer to the [Advanced Customisation]({{< ref "advanced-customisation#colour-schemes" >}}) section for details. + +## Organising content + +By default, Congo doesn't force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer _pages_ for a static site, _posts_ for a blog, or _projects_ for a portfolio. + +### Directory structure + +Here's a quick overview of a basic Congo project. All content is placed within the `content` folder: + +```shell +. +โ”œโ”€โ”€ assets +โ”‚ โ””โ”€โ”€ img +โ”‚ โ””โ”€โ”€ author.jpg +โ”œโ”€โ”€ config +โ”‚ โ””โ”€โ”€ _default +โ”œโ”€โ”€ content +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ about.md +โ”‚ โ””โ”€โ”€ posts +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ first-post.md +โ”‚ โ””โ”€โ”€ another-post +โ”‚ โ”œโ”€โ”€ aardvark.jpg +โ”‚ โ””โ”€โ”€ index.md +โ””โ”€โ”€ themes + โ””โ”€โ”€ congo +``` + +{{< alert >}} +The key thing to note here is that within the content directory, normal article pages are named `index.md` while list pages are named `_index.md`. Any assets that go along with the article should be placed in a sub-directory alongside the index file. +{{< /alert >}} + +It's important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the [official Hugo docs](https://gohugo.io/content-management/organization/) for more information. + +### Feature, cover and thumbnail images + +The Congo theme supports displaying images on article listings and at the top of individual article pages. There are three types of images supported, each with their own use case: `feature`, `cover` and `thumb`. + +In the example below, a cover and thumb image have been provided for the `first-post` article: + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ posts + โ”œโ”€โ”€ _index.md + โ””โ”€โ”€ first-post + โ”œโ”€โ”€ cover.jpg + โ”œโ”€โ”€ index.md + โ””โ”€โ”€ thumb.jpg +``` + +The `thumb` image is used as the article thumbnail and will be displayed in article lists, and the `cover` image will be displayed at the top of the article content on individual article pages. + +![A screenshot of an article with a thumbnail image](article-screenshot.jpg "This example shows an article with a thumbnail image.") + +{{< alert >}} +In order to provide maximum performance, thumbnail images are automatically cropped and resized to a 4:3 ratio. Cover images will be automatically resized to fit their content, but any ratio is permitted. +{{< /alert >}} + +The `feature` image is a special type, and when present, it will be used in place of _both_ the `thumb` and `cover` images. Feature images are also present in the article metadata, which is included when content is shared to third-party networks like Facebook and Twitter. + +The theme will intelligently detect article images and automatically add them to your site. You don't have to refer to them in the front matter and simply need to place an appropriately named file within the page resources. If the term `feature`, `cover` or `thumb` is found anywhere in the image filename, then it will be used for that purpose. + +The [Samples section]({{< ref "samples" >}}) provides a number of examples of these images (and you can view the [source code](https://github.com/jpanther/congo/tree/dev/exampleSite/content/samples) to see the file structure). + +### Taxonomies + +Congo is also flexible when it comes to taxonomies. Some people prefer to use _tags_ and _categories_ to group their content, others prefer to use _topics_. + +Hugo defaults to using posts, tags and categories out of the box and this will work fine if that's what you want. If you wish to customise this, however, you can do so by creating a `taxonomies.toml` configuration file: + +```toml +# config/_default/taxonomies.toml + +topic = "topics" +``` + +This will replace the default _tags_ and _categories_ with _topics_. Refer to the [Hugo Taxonomy docs](https://gohugo.io/content-management/taxonomies/) for more information on naming taxonomies. + +When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below. + +## Menus + +Congo has two menus that can be customised to suit the content and layout of your site. The `main` menu appears in the site header and the `footer` menu appears at the bottom of the page just above the copyright notice. + +Both menus are configured in the `menus.en.toml` file. Similarly to the languages config file, if you wish to use another language, rename this file and replace `en` with the language code you wish to use. Menu links will be sorted from lowest to highest `weight`, and then alphabetically by `name`. + +```toml +# config/_default/menus.en.toml + +[[main]] + name = "Blog" + pageRef = "posts" + weight = 10 + +[[main]] + name = "Topics" + pageRef = "topics" + weight = 20 + +[[main]] + name = "GitHub" + url = "https://github.com/jpanther/congo" + weight = 30 + [main.params] + icon = "github" + showName = false + target = "_blank" + +[[main]] + identifier = "search" + weight = 99 + [main.params] + action = "search" + icon = "search" + +[[footer]] + name = "Privacy" + pageRef = "privacy" +``` + +### Basic links + +The `name` parameter specifies the text that is used in the menu link. You can also optionally provide a `title` which fills the HTML title attribute for the link. + +The `pageRef` parameter allows you to easily reference Hugo content pages and taxonomies. It is the quickest way to configure the menu as you can simply refer to any Hugo content item and it will automatically build the correct link. To link to external URLs, the `url` parameter can be used. + +Further customisation can be achieved through the use of special theme parameters. Providing `params` within a link allows the addition of an `icon`, the ability to toggle the link text with `showName` and to optionally set a `target` for the URL. In the example above, the GitHub link will only display as an icon and will open the link in a new window. + +### Action links + +There is a special case for creating menu items for links that take theme actions. These are denoted using the `action` parameter, and a value of the action the link should perform. Action links allow for all the same custom parameters as other links and can be styled with an icon or text name. + +There are three valid theme actions: + +- `appearance` will create a link to the appearance switcher +- `locale` will create a drop down picker to access translated content +- `search` will create a link to the site search + +Both menus are completely optional and can be commented out if not required. Use the template provided in the default file as a guide. + +## Detailed configuration + +The steps above are the bare minimum configuration. If you now run `hugo server` you will be presented with a blank Congo website. Detailed configuration is covered in the [Configuration]({{< ref "configuration" >}}) section. diff --git a/themes/congo/exampleSite/content/docs/getting-started/index.zh-Hans.md b/themes/congo/exampleSite/content/docs/getting-started/index.zh-Hans.md new file mode 100644 index 0000000..81861e2 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/getting-started/index.zh-Hans.md @@ -0,0 +1,244 @@ +--- +title: "ๅฟซ้€Ÿๅผ€ๅง‹" +date: 2020-08-15 +draft: false +description: "Congo็š„ๅฏๅŠจๆ–นๆณ•" +summary: "่ฟ™ไธ€้ƒจๅˆ†ๅ‡่ฎพไฝ ๅทฒ็ปๅฎ‰่ฃ…ไบ†Congoไธป้ข˜๏ผŒๅนถๅ‡†ๅค‡ๅผ€ๅง‹่ฟ›่กŒๅŸบๆœฌ้…็ฝฎไปปๅŠก๏ผŒๅฆ‚้€‰ๆ‹ฉ้ขœ่‰ฒๆ–นๆกˆใ€่œๅ•ๅ’Œๅ†…ๅฎน็ป“ๆž„ใ€‚" +slug: "getting-started" +tags: ["installation", "docs"] +--- + +{{< alert >}} +ๆœฌ่Š‚ๅ‡ๅฎšๆ‚จๅทฒ็ป[ๅฎ‰่ฃ…ไบ†Congoไธป้ข˜]({{< ref "docs/installation" >}})ใ€‚ +{{< /alert >}} + +Congoๆไพ›็š„้…็ฝฎๆ–‡ไปถๅŒ…ๅซไธป้ข˜ๅฎšๅˆถ็š„ๆ‰€ๆœ‰ๅฏ่ƒฝ่ฎพ็ฝฎใ€‚้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒๅ…ถไธญ่ฎธๅคš่ฎพ็ฝฎ้กน้ƒฝ่ขซๆณจ้‡Šๆމ๏ผŒไฝ†ๆ‚จๅฏไปฅ็ฎ€ๅ•ๅœฐๅ–ๆถˆๆณจ้‡Šไปฅๆฟ€ๆดปๆˆ–ๆ›ดๆ”น็‰นๅฎšๅŠŸ่ƒฝใ€‚ + +## ๅŸบๆœฌ้…็ฝฎ + +ๅœจๅˆ›ๅปบไปปไฝ•ๅ†…ๅฎนไน‹ๅ‰๏ผŒๆœ‰ไธ€ไบ›ๆ–ฐๅฎ‰่ฃ…้œ€่ฆ่ฎพ็ฝฎ็š„ไบ‹้กนใ€‚้ฆ–ๅ…ˆๅœจ`config.toml`ๆ–‡ไปถไธญ๏ผŒ่ฎพ็ฝฎ`baseURL`ๅ’Œ`languageCode`ๅ‚ๆ•ฐใ€‚`languageCode`ๅบ”่ฎพ็ฝฎไธบๆ‚จๅฐ†็”จไบŽๆ’ฐๅ†™ๅ†…ๅฎน็š„ไธป่ฆ่ฏญ่จ€ใ€‚ + +```toml +# config/_default/config.toml + +baseURL = "https://your_domain.com/" +languageCode = "en" +``` + +ไธ‹ไธ€ๆญฅๆ˜ฏ้…็ฝฎ่ฏญ่จ€่ฎพ็ฝฎใ€‚่™ฝ็„ถCongoๆ”ฏๆŒๅคš่ฏญ่จ€่ฎพ็ฝฎ๏ผŒไฝ†็›ฎๅ‰๏ผŒๅช้œ€้…็ฝฎไธป่ฆ่ฏญ่จ€ๅณๅฏใ€‚ + +ๆ‰พๅˆฐconfigๆ–‡ไปถๅคนไธญ็š„`languages.en.toml`ๆ–‡ไปถใ€‚ๅฆ‚ๆžœๆ‚จ็š„ไธป่ฆ่ฏญ่จ€ๆ˜ฏ่‹ฑ่ฏญ๏ผŒๅฏไปฅ็›ดๆŽฅไฝฟ็”จๆญคๆ–‡ไปถใ€‚ๅฆๅˆ™๏ผŒๅฐ†ๅ…ถ้‡ๅ‘ฝๅ๏ผŒไปฅไพฟๆ–‡ไปถๅไธญๅŒ…ๅซๆญฃ็กฎ็š„่ฏญ่จ€ไปฃ็ ใ€‚ไพ‹ๅฆ‚๏ผŒๅฏนไบŽๆณ•่ฏญ๏ผŒๅฐ†ๆ–‡ไปถ้‡ๅ‘ฝๅไธบ`languages.fr.toml`ใ€‚ + +{{< alert >}} +่ฏญ่จ€้…็ฝฎๆ–‡ไปถๅไธญ็š„่ฏญ่จ€ไปฃ็ ๅบ”ไธŽ`config.toml`ไธญ็š„`languageCode`่ฎพ็ฝฎ็›ธๅŒน้…ใ€‚ +{{< /alert >}} + +```toml +# config/_default/languages.en.toml + +title = "My awesome website" + +[author] +name = "My name" +image = "img/author.jpg" +headline = "A generally awesome human" +bio = "A little bit about me" +links = [ + { twitter = "https://twitter.com/username" } +] +``` + +`[author]`้…็ฝฎ็กฎๅฎšๅœจ็ฝ‘็ซ™ไธŠๆ˜พ็คบไฝœ่€…ไฟกๆฏ็š„ๆ–นๅผใ€‚ๅ›พๅƒๅบ”ๆ”พ็ฝฎๅœจ็ซ™็‚น็š„`assets/`ๆ–‡ไปถๅคนไธญใ€‚้“พๆŽฅๅฐ†ๆŒ‰็…งๅฎƒไปฌๅˆ—ๅ‡บ็š„้กบๅบๆ˜พ็คบใ€‚ + +ๅฆ‚ๆžœ้œ€่ฆๆ›ดๅคš็ป†่Š‚๏ผŒๆฏไธช้…็ฝฎ้€‰้กน็š„่ฏฆ็ป†ไฟกๆฏ้ƒฝๅœจ[้…็ฝฎ]({{< ref "configuration" >}})้ƒจๅˆ†ไธญๆœ‰ไป‹็ปใ€‚ + +## ้ขœ่‰ฒๆ–นๆกˆ + +Congo้ป˜่ฎคๆƒ…ๅ†ตไธ‹ๆไพ›ไบ†ไธ€ไบ›้ขœ่‰ฒๆ–นๆกˆใ€‚่ฆๆ›ดๆ”นๆ–นๆกˆ๏ผŒๅช้œ€่ฎพ็ฝฎ`colorScheme`ไธป้ข˜ๅ‚ๆ•ฐใ€‚ๆœ‰ๆ•ˆ้€‰้กนไธบ`congo`๏ผˆ้ป˜่ฎค๏ผ‰ใ€`avocado`ใ€`cherry`ใ€`fire`ใ€`ocean`ใ€`sapphire`ๅ’Œ`slate`ใ€‚ + +{{< alert >}} +`colorScheme`ๅ€ผๅบ”ไปฅๅฐๅ†™ๅฝขๅผๆไพ›ใ€‚ +{{< /alert >}} + +```toml +# config/_default/params.toml + +colorScheme = "congo" +``` + +Congoๅฎšไน‰ไบ†ไธ€ไธชๅœจๆ•ดไธชไธป้ข˜ไธญไฝฟ็”จ็š„ไธ‰่‰ฒ่ฐƒ่‰ฒๆฟใ€‚ๆฏไธชไธป่‰ฒๅŒ…ๅซๅ็งๅŸบไบŽๅŒ…ๅซๅœจ[Tailwind](https://tailwindcss.com/docs/customizing-colors#color-palette-reference)ไธญ็š„้ขœ่‰ฒ็š„้˜ดๅฝฑใ€‚ + +#### Congo๏ผˆ้ป˜่ฎค๏ผ‰ + +{{< swatches "#71717a" "#8b5cf6" "#d946ef" >}} + +#### Avocado + +{{< swatches "#78716c" "#84cc16" "#10b981" >}} + +#### Cherry + +{{< swatches "#737373" "#f43f5e" "#22c55e" >}} + +#### Fire + +{{< swatches "#78716c" "#f97316" "#f43f5e" >}} + +#### Ocean + +{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}} + +#### Sapphire + +{{< swatches "#64748b" "#6366f1" "#ec4899" >}} + +#### Slate + +{{< swatches "#6B7280" "#64748b" "#6B7280" >}} + +ๅฐฝ็ฎก่ฟ™ไบ›ๆ˜ฏ้ป˜่ฎค็š„ๆ–นๆกˆ๏ผŒไฝ†ๆ‚จ่ฟ˜ๅฏไปฅๅˆ›ๅปบ่‡ชๅทฑ็š„ๆ–นๆกˆใ€‚ๆœ‰ๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[้ซ˜็บง่‡ชๅฎšไน‰]({{< ref "advanced-customisation#colour-schemes" >}})้ƒจๅˆ†ใ€‚ + +### ็ป„็ป‡ๅ†…ๅฎน + +Congoไธไผšๅผบๅˆถๆ‚จไฝฟ็”จ็‰นๅฎš็š„ๅ†…ๅฎน็ฑปๅž‹๏ผŒ้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒๆ‚จๅฏไปฅ่‡ช็”ฑๅฎšไน‰ๆ‚จ็š„ๅ†…ๅฎนใ€‚ๆ‚จๅฏไปฅ้€‰ๆ‹ฉไฝฟ็”จ _pages_ ๆฅๅˆ›ๅปบ้™ๆ€็ซ™็‚น๏ผŒไฝฟ็”จ _posts_ ๆฅๆ’ฐๅ†™ๅšๅฎข๏ผŒๆˆ–ไฝฟ็”จ _projects_ ๆฅๅฑ•็คบ้กน็›ฎใ€‚่ฟ™็ง่‡ช็”ฑๅบฆไฝฟๆ‚จ่ƒฝๅคŸๆ นๆฎๆ‚จ็š„้œ€ๆฑ‚ๅ’Œๅๅฅฝๆฅ็ป„็ป‡ๅ’Œๅ‘ˆ็Žฐๅ†…ๅฎนใ€‚ + +### ็›ฎๅฝ•็ป“ๆž„ + +ไปฅไธ‹ๆ˜ฏๅŸบๆœฌCongo้กน็›ฎ็š„ๅฟซ้€Ÿๆฆ‚่งˆใ€‚ๆ‰€ๆœ‰ๅ†…ๅฎน้ƒฝๆ”พ็ฝฎๅœจ`content`ๆ–‡ไปถๅคนไธญ๏ผš + +```shell +. +โ”œโ”€โ”€ assets +โ”‚ โ””โ”€โ”€ img +โ”‚ โ””โ”€โ”€ author.jpg +โ”œโ”€โ”€ config +โ”‚ โ””โ”€โ”€ _default +โ”œโ”€โ”€ content +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ about.md +โ”‚ โ””โ”€โ”€ posts +โ”‚ โ”œโ”€โ”€ _index.md +โ”‚ โ”œโ”€โ”€ first-post.md +โ”‚ โ””โ”€โ”€ another-post +โ”‚ โ”œโ”€โ”€ aardvark.jpg +โ”‚ โ””โ”€โ”€ index.md +โ””โ”€โ”€ themes + โ””โ”€โ”€ congo +``` + +{{< alert >}} +่ฟ™้‡Œ้œ€่ฆๆณจๆ„็š„ๅ…ณ้”ฎไธ€็‚นๆ˜ฏ๏ผŒๅœจcontent็›ฎๅฝ•ไธญ๏ผŒๆ™ฎ้€šๆ–‡็ซ ้กต้ข็š„ๅ‘ฝๅไธบ`index.md`๏ผŒ่€Œๅˆ—่กจ้กต้ข็š„ๅ‘ฝๅไธบ`_index.md`ใ€‚ไปปไฝ•ไธŽๆ–‡็ซ ็›ธๅ…ณ็š„้™ๆ€ๆ–‡ไปถ้ƒฝๅบ”ๆ”พ็ฝฎๅœจไธŽ็ดขๅผ•ๆ–‡ไปถ็›ธ้‚ป็š„ๅญ็›ฎๅฝ•ไธญใ€‚ +{{< /alert >}} + +ๅฏนไบŽCongoไธป้ข˜็š„่ฎพ่ฎก๏ผŒๅ……ๅˆ†ๅˆฉ็”จไบ†Hugo้กต้ขๆŸ็š„ไผ˜ๅŠฟ๏ผŒไบ†่งฃHugoๅธŒๆœ›ๅ†…ๅฎนๅฆ‚ไฝ•่ขซ็ป„็ป‡ๆ˜ฏๅพˆ้‡่ฆ็š„ใ€‚ๅŠกๅฟ…้˜…่ฏป[Hugoๅฎ˜ๆ–นๆ–‡ๆกฃ](https://gohugo.io/content-management/organization/)ไปฅ่Žทๅ–ๆ›ดๅคšไฟกๆฏใ€‚ + +### ็‰น่‰ฒใ€ๅฐ้ขๅ’Œ็ผฉ็•ฅๅ›พๅ›พ็‰‡ + +Congoไธป้ข˜ๆ”ฏๆŒๅœจๆ–‡็ซ ๅˆ—่กจๅ’Œๅ•็‹ฌ็š„ๆ–‡็ซ ้กต้ข้กถ้ƒจๆ˜พ็คบๅ›พๅƒใ€‚ๆœ‰ไธ‰็ง็ฑปๅž‹็š„ๅ›พๅƒ๏ผŒๆฏ็ง้ƒฝๆœ‰ๅ…ถ็‰นๅฎš็š„็”จ้€”๏ผš`feature`๏ผˆ็‰น่‰ฒ๏ผŒ่ฟ™ไธชไธ็Ÿฅ้“ๆ€Žไนˆ็ฟป่ฏ‘๏ผŒๅฏ่ƒฝๆ˜ฏโ€œไธปๅ›พโ€ ๏ผŸ๏ผ‰ใ€`cover`๏ผˆๅฐ้ข๏ผ‰ๅ’Œ`thumb`๏ผˆ็ผฉ็•ฅๅ›พ๏ผ‰ใ€‚ + +ๅœจไธ‹้ข็š„็คบไพ‹ไธญ๏ผŒไธบ`first-post`ๆ–‡็ซ ๆไพ›ไบ†ๅฐ้ขๅ’Œ็ผฉ็•ฅๅ›พๅ›พๅƒ๏ผš + +```shell +. +โ””โ”€โ”€ content + โ””โ”€โ”€ posts + โ”œโ”€โ”€ _index.md + โ””โ”€โ”€ first-post + โ”œโ”€โ”€ cover.jpg + โ”œโ”€โ”€ index.md + โ””โ”€โ”€ thumb.jpg +``` + +`thumb`ๅ›พๅƒ็”จไฝœๆ–‡็ซ ็ผฉ็•ฅๅ›พ๏ผŒๅฐ†ๆ˜พ็คบๅœจๆ–‡็ซ ๅˆ—่กจไธญ๏ผŒ่€Œ`cover`ๅ›พๅƒๅฐ†ๆ˜พ็คบๅœจๅ•ไธชๆ–‡็ซ ้กต้ข็š„ๅ†…ๅฎน้กถ้ƒจใ€‚ + +![ๅธฆๆœ‰็ผฉ็•ฅๅ›พๅ›พๅƒ็š„ๆ–‡็ซ ๆˆชๅ›พ](article-screenshot.jpg "ๆญค็คบไพ‹ๆ˜พ็คบไบ†ๅธฆๆœ‰็ผฉ็•ฅๅ›พๅ›พๅƒ็š„ๆ–‡็ซ ใ€‚") + +{{< alert >}} +ไธบไบ†ๆไพ›ๆœ€ๅคงๆ€ง่ƒฝ๏ผŒ็ผฉ็•ฅๅ›พๅ›พๅƒๅฐ†่‡ชๅŠจ่ฃๅ‰ชๅนถ่ฐƒๆ•ดๅคงๅฐไธบ4:3็š„ๆฏ”ไพ‹ใ€‚ๅฐ้ขๅ›พๅƒๅฐ†่‡ชๅŠจ่ฐƒๆ•ดๅคงๅฐไปฅ้€‚ๅบ”ๅ…ถๅ†…ๅฎน๏ผŒไฝ†ๅ…่ฎธไปปไฝ•ๆฏ”ไพ‹ใ€‚ +{{< /alert >}} + +`feature`ๅ›พๅƒๆ˜ฏไธ€็ง็‰นๆฎŠ็ฑปๅž‹๏ผŒๅฝ“ๅญ˜ๅœจๆ—ถ๏ผŒๅฎƒๅฐ†็”จไบŽๆ›ฟไปฃ`thumb`ๅ’Œ`cover`ๅ›พๅƒใ€‚็‰น่‰ฒๅ›พๅƒไนŸๅ‡บ็Žฐๅœจๆ–‡็ซ ๅ…ƒๆ•ฐๆฎไธญ๏ผŒๅœจๅฐ†ๅ†…ๅฎนๅ…ฑไบซๅˆฐFacebookๅ’ŒTwitter็ญ‰็ฌฌไธ‰ๆ–น็ฝ‘็ปœๆ—ถๅŒ…ๅซๅœจๅ…ถไธญใ€‚ + +ไธป้ข˜ๅฐ†ๆ™บ่ƒฝๆฃ€ๆต‹ๆ–‡็ซ ๅ›พๅƒๅนถ่‡ชๅŠจๅฐ†ๅ…ถๆทปๅŠ ๅˆฐๆ‚จ็š„็ซ™็‚นใ€‚ๆ‚จไธๅฟ…ๅœจๆญฃๆ–‡ไธญๅผ•็”จๅฎƒไปฌ๏ผŒๅช้œ€ๅฐ†ไปฅ้€‚ๅฝ“ๅ‘ฝๅ็š„ๆ–‡ไปถๆ”พๅœจ้กต้ข่ต„ๆบไธญๅณๅฏใ€‚ๅฆ‚ๆžœๅ›พๅƒๆ–‡ไปถๅไธญ็š„ไปปไฝ•ๅœฐๆ–น้ƒฝๅŒ…ๅซๆœฏ่ฏญ`feature`ใ€`cover`ๆˆ–`thumb`๏ผŒ้‚ฃไนˆๅฎƒๅฐ†็”จไบŽ่ฏฅ็”จ้€”ใ€‚ + +[็คบไพ‹้ƒจๅˆ†]({{< ref "samples" >}})ๆไพ›ไบ†่ฟ™ไบ›ๅ›พๅƒ็š„่ฎธๅคš็คบไพ‹๏ผˆๆ‚จๅฏไปฅๆŸฅ็œ‹[ๆบไปฃ็ ](https://github.com/jpanther/congo/tree/dev/exampleSite/content/samples)ไปฅๆŸฅ็œ‹ๆ–‡ไปถ็ป“ๆž„๏ผ‰ใ€‚ + +### ๅˆ†็ฑปๆณ• + +Congo ๅœจๅˆ†็ฑปๆ–น้ขไนŸ้žๅธธ็ตๆดปใ€‚ๆœ‰ไบ›ไบบๅ–œๆฌขไฝฟ็”จๆ ‡็ญพ๏ผˆtags๏ผ‰ๅ’Œๅˆ†็ฑป๏ผˆcategories๏ผ‰ๆฅๅฏนๅ†…ๅฎน่ฟ›่กŒๅˆ†็ป„๏ผŒ่€Œๅ…ถไป–ไบบๅฏ่ƒฝๆ›ดๅ€พๅ‘ไบŽไฝฟ็”จไธป้ข˜๏ผˆtopics๏ผ‰ใ€‚ + +Hugo้ป˜่ฎคไฝฟ็”จๆ–‡็ซ ใ€ๆ ‡็ญพๅ’Œๅˆ†็ฑป๏ผŒๅฆ‚ๆžœ่ฟ™็ฌฆๅˆๆ‚จ็š„้œ€ๆฑ‚๏ผŒ้‚ฃไนˆ่ฟ™ๅฐ†่ฟ่กŒ่‰ฏๅฅฝใ€‚ไฝ†ๆ˜ฏ๏ผŒๅฆ‚ๆžœๆ‚จๅธŒๆœ›่‡ชๅฎšไน‰ๆญค่ฎพ็ฝฎ๏ผŒๅฏไปฅ้€š่ฟ‡ๅˆ›ๅปบ`taxonomies.toml`้…็ฝฎๆ–‡ไปถๆฅๅฎž็Žฐ๏ผš + +```toml +# config/_default/taxonomies.toml + +topic = "topics" +``` + +่ฟ™ๅฐ†ไฝฟ็”จไธป้ข˜ๆ›ฟๆข้ป˜่ฎค็š„ๆ ‡็ญพๅ’Œๅˆ†็ฑปใ€‚ๆœ‰ๅ…ณๅœจๅ‘ฝๅๅˆ†็ฑปๆณ•ๆ—ถ็š„ๆ›ดๅคšไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…[Hugoๅˆ†็ฑปๆณ•ๆ–‡ๆกฃ](https://gohugo.io/content-management/taxonomies/)ใ€‚ + +ๅˆ›ๅปบๆ–ฐๅˆ†็ฑปๆณ•ๆ—ถ๏ผŒๆ‚จๅฐ†้œ€่ฆ่ฐƒๆ•ด็ฝ‘็ซ™ไธŠ็š„ๅฏผ่ˆช้“พๆŽฅ๏ผŒไปฅๆŒ‡ๅ‘ๆญฃ็กฎ็š„้ƒจๅˆ†๏ผŒไธ‹้ขๆœ‰็›ธๅ…ณ่ฏดๆ˜Žใ€‚ + +## ่œๅ• + +Congoๆœ‰ไธคไธช่œๅ•๏ผŒๅฏไปฅๆ นๆฎๆ‚จ็ซ™็‚น็š„ๅ†…ๅฎนๅ’Œๅธƒๅฑ€่ฟ›่กŒ่‡ชๅฎšไน‰ใ€‚`main`่œๅ•ๆ˜พ็คบๅœจ็ซ™็‚น้กต็œ‰ไธญ๏ผŒ่€Œ`footer`่œๅ•ๆ˜พ็คบๅœจ้กต้ขๅบ•้ƒจ๏ผŒๆญฃๅฅฝๅœจ็‰ˆๆƒๅฃฐๆ˜ŽไธŠๆ–นใ€‚ + +่ฟ™ไธคไธช่œๅ•้ƒฝๅœจ`menus.en.toml`ๆ–‡ไปถไธญ้…็ฝฎใ€‚ไธŽ่ฏญ่จ€้…็ฝฎๆ–‡ไปถ็ฑปไผผ๏ผŒๅฆ‚ๆžœๆ‚จๅธŒๆœ›ไฝฟ็”จๅ…ถไป–่ฏญ่จ€๏ผŒ่ฏทๅฐ†ๆญคๆ–‡ไปถ้‡ๅ‘ฝๅๅนถ็”จๆ‰€้œ€็š„่ฏญ่จ€ไปฃ็ ๆ›ฟๆข`en`ใ€‚่œๅ•้“พๆŽฅๅฐ†ๆŒ‰`weight`ไปŽไฝŽๅˆฐ้ซ˜ๆŽ’ๅบ๏ผŒ็„ถๅŽๆŒ‰`name`ๅญ—ๆฏ้กบๅบๆŽ’ๅบใ€‚ + +```toml +# config/_default/menus.en.toml + +[[main]] + name = "ๅšๅฎข" + pageRef = "posts" + weight = 10 + +[[main]] + name = "ไธป้ข˜" + pageRef = "topics" + weight = 20 + +[[main]] + name = "GitHub" + url = "https://github.com/jpanther/congo" + weight = 30 + [main.params] + icon = "github" + showName = false + target = "_blank" + +[[main]] + identifier = "search" + weight = 99 + [main.params] + action = "search" + icon = "search" + +[[footer]] + name = "้š็ง" + pageRef = "privacy" +``` + +### ๅŸบๆœฌ้“พๆŽฅ + +`name` ๅ‚ๆ•ฐๆŒ‡ๅฎšไบ†่œๅ•้“พๆŽฅไธญไฝฟ็”จ็š„ๆ–‡ๆœฌใ€‚ๆ‚จ่ฟ˜ๅฏไปฅ้€‰ๆ‹ฉๆไพ› `title`๏ผŒ็”จไบŽๅกซๅ……้“พๆŽฅ็š„ HTML title ๅฑžๆ€งใ€‚ + +`pageRef` ๅ‚ๆ•ฐๅ…่ฎธๆ‚จ่ฝปๆพๅผ•็”จ Hugo ๅ†…ๅฎน้กต้ขๅ’Œๅˆ†็ฑปๆณ•ใ€‚่ฟ™ๆ˜ฏ้…็ฝฎ่œๅ•็š„ๆœ€ๅฟซๆ–นๆณ•๏ผŒๅ› ไธบๆ‚จๅช้œ€ๅผ•็”จไปปไฝ• Hugo ๅ†…ๅฎน้กน๏ผŒๅฎƒๅฐ†่‡ชๅŠจๆž„ๅปบๆญฃ็กฎ็š„้“พๆŽฅใ€‚่ฆ้“พๆŽฅๅˆฐๅค–้ƒจ URL๏ผŒๅฏไปฅไฝฟ็”จ `url` ๅ‚ๆ•ฐใ€‚ + +้€š่ฟ‡ไฝฟ็”จ็‰นๆฎŠ็š„ไธป้ข˜ๅ‚ๆ•ฐ๏ผŒๅฏไปฅ่ฟ›ไธ€ๆญฅ่‡ชๅฎšไน‰ใ€‚ๅœจ้“พๆŽฅไธญๆไพ› `params` ๅ…่ฎธๆทปๅŠ  `icon`๏ผŒ้€š่ฟ‡ `showName` ๅˆ‡ๆข้“พๆŽฅๆ–‡ๆœฌ็š„่ƒฝๅŠ›๏ผŒๅนถๅฏ้€‰ๆ‹ฉ่ฎพ็ฝฎ URL ็š„ `target`ใ€‚ๅœจไธŠ้ข็š„็คบไพ‹ไธญ๏ผŒGitHub ้“พๆŽฅๅฐ†ๅชๆ˜พ็คบไธบๅ›พๆ ‡๏ผŒๅนถๅœจๆ–ฐ็ช—ๅฃไธญๆ‰“ๅผ€้“พๆŽฅใ€‚ + +### ๆ“ไฝœ้“พๆŽฅ + +ๆœ‰ไธ€ไธช็‰นๆฎŠๆƒ…ๅ†ต๏ผŒ็”จไบŽๅˆ›ๅปบๆ‰ง่กŒไธป้ข˜ๆ“ไฝœ็š„่œๅ•้กนใ€‚่ฟ™ไบ›้“พๆŽฅ้กน้€š่ฟ‡ `action` ๅ‚ๆ•ฐ่ฟ›่กŒๆ ‡่ฏ†๏ผŒ่ฏฅๅ‚ๆ•ฐๆŒ‡ๅฎš้“พๆŽฅๅบ”ๆ‰ง่กŒ็š„ๆ“ไฝœใ€‚ๆ“ไฝœ้“พๆŽฅๅ…่ฎธไฝฟ็”จไธŽๅ…ถไป–้“พๆŽฅ๏ผˆๅŸบๆœฌ้“พๆŽฅ๏ผ‰็›ธๅŒ็š„่‡ชๅฎšไน‰ๅ‚ๆ•ฐ๏ผŒๅนถไธ”ๅฏไปฅ็”จๅ›พๆ ‡ๆˆ–ๆ–‡ๆœฌๅ็งฐ่ฟ›่กŒๆ ทๅผ่ฎพ็ฝฎใ€‚ + +Congoๅ†…็ฝฎๆœ‰ไธ‰ไธชๆœ‰ๆ•ˆ็š„ไธป้ข˜ๆ“ไฝœ๏ผš + +- `appearance` ๅฐ†ๅˆ›ๅปบไธ€ไธชๆŒ‡ๅ‘ๅค–่ง‚ๅˆ‡ๆขๅ™จ๏ผˆๆทฑ่‰ฒไธป้ข˜่ฟ˜ๆ˜ฏๆต…่‰ฒไธป้ข˜๏ผ‰็š„้“พๆŽฅ +- `locale` ๅฐ†ๅˆ›ๅปบไธ€ไธชไธ‹ๆ‹‰้€‰ๆ‹ฉๅ™จ๏ผŒไปฅๅˆ‡ๆข่ฏญ่จ€่ฎฟ้—ฎๅทฒ็ฟป่ฏ‘็š„ๅ†…ๅฎน +- `search` ๅฐ†ๅˆ›ๅปบๆŒ‡ๅ‘็ซ™ๅ†…ๆœ็ดข็š„้“พๆŽฅ + +่ฟ™ไธคไธช่œๅ•้ƒฝๆ˜ฏๅฎŒๅ…จๅฏ้€‰็š„๏ผŒๅฆ‚ๆžœไธ้œ€่ฆ๏ผŒๅฏไปฅๆณจ้‡Šๆމใ€‚ไฝฟ็”จ้ป˜่ฎคๆ–‡ไปถไธญๆไพ›็š„ๆจกๆฟไฝœไธบ้…็ฝฎๆŒ‡ๅ—ใ€‚ + +## ๆ›ด่ฏฆ็ป†้…็ฝฎ + +ไธŠ่ฟฐๆญฅ้ชคๆ˜ฏๆœ€ๅŸบๆœฌ็š„้…็ฝฎใ€‚ๅฆ‚ๆžœ็Žฐๅœจ่ฟ่กŒ `hugo server`๏ผŒๆ‚จๅฐ†็œ‹ๅˆฐไธ€ไธช็ฉบ็™ฝ็š„ Congo ็ฝ‘็ซ™ใ€‚ๆ›ด่ฏฆ็ป†้…็ฝฎๅœจ [ๅŸบๆœฌ้…็ฝฎ]({{< ref "configuration" >}}) ้ƒจๅˆ†่ฟ›่กŒไป‹็ปใ€‚ diff --git a/themes/congo/exampleSite/content/docs/getting-started/thumb-choose.svg b/themes/congo/exampleSite/content/docs/getting-started/thumb-choose.svg new file mode 100644 index 0000000..773169f --- /dev/null +++ b/themes/congo/exampleSite/content/docs/getting-started/thumb-choose.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/congo/exampleSite/content/docs/homepage-layout/home-page.jpg b/themes/congo/exampleSite/content/docs/homepage-layout/home-page.jpg new file mode 100644 index 0000000..2a619e0 Binary files /dev/null and b/themes/congo/exampleSite/content/docs/homepage-layout/home-page.jpg differ diff --git a/themes/congo/exampleSite/content/docs/homepage-layout/home-profile-list.jpg b/themes/congo/exampleSite/content/docs/homepage-layout/home-profile-list.jpg new file mode 100644 index 0000000..319da77 Binary files /dev/null and b/themes/congo/exampleSite/content/docs/homepage-layout/home-profile-list.jpg differ diff --git a/themes/congo/exampleSite/content/docs/homepage-layout/home-profile.jpg b/themes/congo/exampleSite/content/docs/homepage-layout/home-profile.jpg new file mode 100644 index 0000000..006c857 Binary files /dev/null and b/themes/congo/exampleSite/content/docs/homepage-layout/home-profile.jpg differ diff --git a/themes/congo/exampleSite/content/docs/homepage-layout/index.ja.md b/themes/congo/exampleSite/content/docs/homepage-layout/index.ja.md new file mode 100644 index 0000000..dda5c8a --- /dev/null +++ b/themes/congo/exampleSite/content/docs/homepage-layout/index.ja.md @@ -0,0 +1,53 @@ +--- +title: "ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆ" +date: 2020-08-13 +draft: false +description: "CongoใซใŠใ‘ใ‚‹ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎ่จญๅฎšใซใคใ„ใฆ" +summary: "Congoใฏใ€็ต„ใฟ่พผใฟใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใจ็‹ฌ่‡ชใฎใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’ๆไพ›ใ™ใ‚‹ๆฉŸ่ƒฝใซใ‚ˆใฃใฆใ€ๆŸ”่ปŸใชใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆไพ›ใ—ใพใ™ใ€‚" +slug: "homepage-layout" +tags: ["homepage", "layouts", "docs"] +--- + +CongoใฏๆŸ”่ปŸใชใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆไพ›ใ—ใพใ™ใ€‚2ใคใฎใƒกใ‚คใƒณใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‹ใ‚‰้ธๆŠžใงใใ€่ฟฝๅŠ ่จญๅฎšใงใƒ‡ใ‚ถใ‚คใƒณใ‚’่ชฟๆ•ดใงใใพใ™ใ€‚ใพใŸใ€็‹ฌ่‡ชใฎใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’็”จๆ„ใ—ใฆใ€ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใฎๅ†…ๅฎนใ‚’ๅฎŒๅ…จใซใ‚ณใƒณใƒˆใƒญใƒผใƒซใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ + +ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฏ `params.toml` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎ `homepage.layout` ่จญๅฎšใซใ‚ˆใฃใฆๅˆถๅพกใ•ใ‚Œใพใ™ใ€‚ใ•ใ‚‰ใซใ€ใ™ในใฆใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซใฏ[ๆœ€่ฟ‘ใฎ่จ˜ไบ‹](#ๆœ€่ฟ‘ใฎ่จ˜ไบ‹)ใ‚’่กจ็คบใ™ใ‚‹ใ‚ชใƒ—ใ‚ทใƒงใƒณใŒใ‚ใ‚Šใพใ™ใ€‚ + +## ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆ + +ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฏใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆใงใ™ใ€‚ใ“ใ‚Œใฏใ‚ทใƒณใƒ—ใƒซใซMarkdownใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’่กจ็คบใ—ใพใ™ใ€‚้™็š„ใชใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใซใฏๆœ€้ฉใงใ€ๅคšใใฎๆŸ”่ปŸๆ€งใ‚’ๆไพ›ใ—ใพใ™ใ€‚ + +![Screenshot of homepage layout](home-page.jpg) + +ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏใ€ `params.toml` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใง `homepage.layout = "page"` ใ‚’่จญๅฎšใ—ใพใ™ใ€‚ + +## ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใƒฌใ‚คใ‚ขใ‚ฆใƒˆ + +ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฏใ€ๅ€‹ไบบใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใ‚„ใƒ–ใƒญใ‚ฐใซๆœ€้ฉใงใ™ใ€‚็”ปๅƒใจใ‚ฝใƒผใ‚ทใƒฃใƒซใƒปใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใธใฎใƒชใƒณใ‚ฏใ‚’ๆไพ›ใ™ใ‚‹ใ“ใจใงใ€่‘—่€…ใฎ่ฉณ็ดฐใ‚’ๅ‰้ขใซๆŠผใ—ๅ‡บใ—ใพใ™ใ€‚ + +![Screenshot of profile layout](home-profile.jpg) + +่‘—่€…ๆƒ…ๅ ฑใฏ `languages` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใงๆไพ›ใ•ใ‚Œใพใ™ใ€‚ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฎ่ฉณ็ดฐใซใคใ„ใฆใฏใ€[ใฏใ˜ใ‚ใซ]({{< ref "getting-started" >}})ใจ[่จ€่ชžใจๅ›ฝ้š›ๅŒ–]({{< ref "configuration#่จ€่ชžใจๅ›ฝ้š›ๅŒ–" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚ + +ใ•ใ‚‰ใซใ€ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใงๆไพ›ใ•ใ‚Œใ‚‹ใ™ในใฆใฎMarkdownใ‚ณใƒณใƒ†ใƒณใƒ„ใฏใ€่‘—่€…ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใฎไธ‹ใซ้…็ฝฎใ•ใ‚Œใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใ‚ทใƒงใƒผใƒˆใ‚ณใƒผใƒ‰ใ‚’ไฝฟ็”จใ—ใŸ่‘—่€…ใฎ็•ฅๆญดใ‚„ใใฎไป–ใฎใ‚ซใ‚นใ‚ฟใƒ ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’่กจ็คบใ™ใ‚‹ใŸใ‚ใฎๆŸ”่ปŸๆ€งใŒๅข—ใ—ใพใ™ใ€‚ + +ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏใ€ `params.toml` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใง `homepage.layout = "profile"` ใ‚’่จญๅฎšใ—ใพใ™ใ€‚ + +## ใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆ + +็ต„ใฟ่พผใฟใฎใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆใŒใ‚ใชใŸใฎใƒ‹ใƒผใ‚บใซๅๅˆ†ใงใชใ„ๅ ดๅˆใฏใ€็‹ฌ่‡ชใฎใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆไพ›ใ™ใ‚‹ใ‚ชใƒ—ใ‚ทใƒงใƒณใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใƒšใƒผใ‚ธใฎๅ†…ๅฎนใ‚’ๅฎŒๅ…จใซใ‚ณใƒณใƒˆใƒญใƒผใƒซใ™ใ‚‹ใ“ใจใŒใงใใ€็™ฝ็ด™ใฎ็Šถๆ…‹ใ‹ใ‚‰ไฝœๆˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +ใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏใ€ `params.toml` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใง `homepage.layout = "custom"` ใ‚’่จญๅฎšใ—ใพใ™ใ€‚ + +่จญๅฎšๅ€คใŒ่จญๅฎšใ•ใ‚ŒใŸ็Šถๆ…‹ใงใ€ๆ–ฐใ—ใ„ `custom.html` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใ€ `layouts/partials/home/custom.html` ใซ้…็ฝฎใ—ใฆใใ ใ•ใ„ใ€‚ใ“ใ‚Œใงใ€ `custom.html` ใƒ•ใ‚กใ‚คใƒซใซใ‚ใ‚‹ใ‚‚ใฎใฏไฝ•ใงใ‚‚ใ€ใ‚ตใ‚คใƒˆใฎใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚จใƒชใ‚ขใซ้…็ฝฎใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใชใ‚Šใพใ™ใ€‚ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎๅฎš็พฉใซใฏใ€HTMLใ€Tailwindใ€Hugoใฎใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆ้–ขๆ•ฐใชใฉใ€ใŠๅฅฝใใชใ‚‚ใฎใ‚’ใŠไฝฟใ„ใใ ใ•ใ„ใ€‚ + +ใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซ[ๆœ€่ฟ‘ใฎ่จ˜ไบ‹](#ๆœ€่ฟ‘ใฎ่จ˜ไบ‹)ใ‚’ๅซใ‚ใ‚‹ใซใฏใ€ `recent-articles.html` ใƒ‘ใƒผใ‚ทใƒฃใƒซใ‚’ไฝฟใ„ใพใ™ใ€‚ + +ไพ‹ใจใ—ใฆใ€ใ“ใฎใ‚ตใ‚คใƒˆใฎ[ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธ]({{< ref "/" >}})ใงใฏใ€ใ‚ซใ‚นใ‚ฟใƒ ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ไฝฟใฃใฆใƒšใƒผใ‚ธใจใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‰ใ‚Œใ‚‹ใ‚ˆใ†ใซใ—ใฆใ„ใพใ™ใ€‚[GitHub repo](https://github.com/jpanther/congo/blob/dev/exampleSite/layouts/partials/home/custom.html)ใ‚’่จชๅ•ใ—ใฆใ€ใฉใฎใ‚ˆใ†ใซๅ‹•ไฝœใ™ใ‚‹ใ‹่ฆ‹ใฆใฟใพใ—ใ‚‡ใ†ใ€‚ + +## ๆœ€่ฟ‘ใฎ่จ˜ไบ‹ + +ใ™ในใฆใฎใƒ›ใƒผใƒ ใƒšใƒผใ‚ธใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซใฏใ€ใƒกใ‚คใƒณใƒšใƒผใ‚ธใ‚ณใƒณใƒ†ใƒณใƒ„ใฎไธ‹ใซๆœ€่ฟ‘ใฎ่จ˜ไบ‹ใ‚’่กจ็คบใ™ใ‚‹ใ‚ชใƒ—ใ‚ทใƒงใƒณใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใ‚Œใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏใ€ `params.toml` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎ `homepage.showRecent` ่จญๅฎšใ‚’ `true` ใซใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +![Profile layout with recent articles](home-profile-list.jpg) + +ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใซใƒชใ‚นใƒˆใ•ใ‚Œใ‚‹่จ˜ไบ‹ใฏใ€ `mainSections` ่จญๅฎšใ‹ใ‚‰ๆดพ็”Ÿใ—ใŸใ‚‚ใฎใงใ€ใ‚ใชใŸใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใงไฝฟ็”จใ—ใฆใ„ใ‚‹ใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚ฟใ‚คใƒ—ใซๅฏพๅฟœใ—ใพใ™ใ€‚ไพ‹ใˆใฐใ€ _posts_ ใจ _projects_ ใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚ปใ‚ฏใ‚ทใƒงใƒณใŒใ‚ใ‚‹ๅ ดๅˆใ€ใ“ใฎ่จญๅฎšใ‚’ `["posts", "projects"]` ใซ่จญๅฎšใ™ใ‚‹ใ“ใจใงใ€ใ“ใ‚Œใ‚‰2ใคใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใซใ‚ใ‚‹ใ™ในใฆใฎ่จ˜ไบ‹ใŒๆœ€่ฟ‘ใฎ่จ˜ไบ‹ใƒชใ‚นใƒˆใซๅ‡บๅŠ›ใ•ใ‚Œใพใ™ใ€‚Congoใฏใ“ใฎ่จญๅฎšใŒ้…ๅˆ—ใงใ‚ใ‚‹ใ“ใจใ‚’ๆƒณๅฎšใ—ใฆใ„ใ‚‹ใฎใงใ€ใ™ในใฆใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใซ1ใคใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใ—ใ‹ไฝฟ็”จใ—ใชใ„ๅ ดๅˆใฏใ€ใ“ใฎ่จญๅฎšใ‚’้ฉๅฎœๅค‰ๆ›ดใ—ใฆใใ ใ•ใ„: `["blog"]` diff --git a/themes/congo/exampleSite/content/docs/homepage-layout/index.md b/themes/congo/exampleSite/content/docs/homepage-layout/index.md new file mode 100644 index 0000000..9c5b48b --- /dev/null +++ b/themes/congo/exampleSite/content/docs/homepage-layout/index.md @@ -0,0 +1,53 @@ +--- +title: "Homepage Layout" +date: 2020-08-13 +draft: false +description: "Configuring the homepage layout in the Congo theme." +summary: "Congo provides a fully flexible homepage layout with built-in templates and the ability to provide your own." +slug: "homepage-layout" +tags: ["homepage", "layouts", "docs"] +--- + +Congo provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content. + +The layout of the homepage is controlled by the `homepage.layout` setting in the `params.toml` configuration file. Additionally, all layouts have the option to include a listing of [recent articles](#recent-articles). + +## Page layout + +The default layout is the page layout. It's simply a normal content page that displays your Markdown content. It's great for static websites and provides a lot of flexibility. + +![Screenshot of homepage layout](home-page.jpg) + +To enable the page layout, set `homepage.layout = "page"` in the `params.toml` configuration file. + +## Profile layout + +The profile layout is great for personal websites and blogs. It puts the author's details front and centre by providing an image and links to social profiles. + +![Screenshot of profile layout](home-profile.jpg) + +The author information is provided in the languages configuration file. Refer to the [Getting Started]({{< ref "getting-started" >}}) and [Language Configuration]({{< ref "configuration##language-and-i18n" >}}) sections for parameter details. + +Additionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes. + +To enable the profile layout, set `homepage.layout = "profile"` in the `params.toml` configuration file. + +## Custom layout + +If the built-in homepage layouts aren't sufficient for your needs, you have the option to provide your own custom layout. This allows you to have total control over the page content and essentially gives you a blank slate to work with. + +To enable the custom layout, set `homepage.layout = "custom"` in the `params.toml` configuration file. + +With the configuration value set, create a new `custom.html` file and place it in `layouts/partials/home/custom.html`. Now whatever is in the `custom.html` file will be placed in the content area of the site homepage. You may use whatever HTML, Tailwind, or Hugo templating functions you wish to define your layout. + +To include [recent articles](#recent-articles) on the custom layout, use the `recent-articles.html` partial. + +As an example, the [homepage]({{< ref "/" >}}) on this site uses the custom layout to allow toggling between the profile and page layouts. Visit the [GitHub repo](https://github.com/jpanther/congo/blob/dev/exampleSite/layouts/partials/home/custom.html) to see how it works. + +## Recent articles + +All homepage layouts have the option of displaying recent articles below the main page content. To enable this, simply set the `homepage.showRecent` setting to `true` in the `params.toml` configuration file. + +![Profile layout with recent articles](home-profile-list.jpg) + +The articles listed in this section are derived from the `mainSections` setting which allows for whatever content types you are using on your website. For instance, if you had content sections for _posts_ and _projects_ you could set this setting to `["posts", "projects"]` and all the articles in these two sections would be used to populate the recent list. The theme expects this setting to be an array so if you only use one section for all your content, you should set this accordingly: `["blog"]`. diff --git a/themes/congo/exampleSite/content/docs/homepage-layout/index.zh-Hans.md b/themes/congo/exampleSite/content/docs/homepage-layout/index.zh-Hans.md new file mode 100644 index 0000000..4411678 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/homepage-layout/index.zh-Hans.md @@ -0,0 +1,53 @@ +--- +title: "ไธป้กตๅธƒๅฑ€" +date: 2020-08-13 +draft: false +description: "ๅœจ Congo ไธป้ข˜ไธญ้…็ฝฎ้ฆ–้กตๅธƒๅฑ€ใ€‚" +summary: "Congo ๆไพ›ไบ†ไธ€ไธชๅฎŒๅ…จ็ตๆดป็š„้ฆ–้กตๅธƒๅฑ€๏ผŒๅ†…็ฝฎไบ†ๆจกๆฟๅนถๆ”ฏๆŒ่‡ชๅฎšไน‰ใ€‚" +slug: "homepage-layout" +tags: ["homepage", "layouts", "docs"] +--- + +Congo ๆไพ›ไบ†ๅฎŒๅ…จ็ตๆดป็š„้ฆ–้กตๅธƒๅฑ€ใ€‚ๆœ‰ไธคไธชไธป่ฆ็š„ๆจกๆฟๅฏไพ›้€‰ๆ‹ฉ๏ผŒๅนถๆไพ›้ขๅค–็š„่ฎพ็ฝฎไปฅ่ฐƒๆ•ด่ฎพ่ฎกใ€‚ๆญคๅค–๏ผŒๆ‚จ่ฟ˜ๅฏไปฅๆไพ›่‡ชๅทฑ็š„ๆจกๆฟ๏ผŒๅฎŒๅ…จๆŽŒๆŽง้ฆ–้กตๅ†…ๅฎนใ€‚ + +้ฆ–้กต็š„ๅธƒๅฑ€็”ฑ`params.toml`้…็ฝฎๆ–‡ไปถไธญ็š„ `homepage.layout` ่ฎพ็ฝฎๆŽงๅˆถใ€‚ๅฆๅค–๏ผŒๆ‰€ๆœ‰ๅธƒๅฑ€้ƒฝๅฏไปฅ้€‰ๆ‹ฉๅŒ…ๅซ[ๆœ€่ฟ‘็š„ๆ–‡็ซ ](#recent-articles)ๅˆ—่กจใ€‚ + +## Pageๅธƒๅฑ€ + +้ป˜่ฎคๅธƒๅฑ€ๆ˜ฏpageๅธƒๅฑ€ใ€‚ๅฎƒๅชๆ˜ฏไธ€ไธชๆ˜พ็คบๆ‚จ็š„ Markdown ๅ†…ๅฎน็š„ๆ™ฎ้€šๅ†…ๅฎน้กต้ขใ€‚้žๅธธ้€‚็”จไบŽ้™ๆ€็ฝ‘็ซ™๏ผŒๅนถๆไพ›ไบ†ๅพˆๅคง็š„็ตๆดปๆ€งใ€‚ + +![้ฆ–้กตๅธƒๅฑ€ๆˆชๅ›พ](home-page.jpg) + +่ฆๅฏ็”จ้กต้ขๅธƒๅฑ€๏ผŒ่ฏทๅœจ `params.toml` ้…็ฝฎๆ–‡ไปถไธญ่ฎพ็ฝฎ `homepage.layout = "page"`ใ€‚ + +## Profileๅธƒๅฑ€ + +profileๅธƒๅฑ€้žๅธธ้€‚็”จไบŽไธชไบบ็ฝ‘็ซ™ๅ’Œๅšๅฎขใ€‚ๅฎƒ้€š่ฟ‡ๆไพ›ๅ›พๅƒๅ’Œ็คพไบคๅช’ไฝ“้“พๆŽฅ๏ผŒๅฐ†ไฝœ่€…็š„่ฏฆ็ป†ไฟกๆฏ็ฝฎไบŽไธญๅฟƒไฝ็ฝฎใ€‚ + +![ไธชไบบ่ต„ๆ–™ๅธƒๅฑ€ๆˆชๅ›พ](home-profile.jpg) + +ไฝœ่€…ไฟกๆฏๅญ˜ๅ‚จๅœจ่ฏญ่จ€้…็ฝฎๆ–‡ไปถไธญใ€‚ๆœ‰ๅ…ณๅ‚ๆ•ฐ่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜… [ๅ…ฅ้—จๆŒ‡ๅ—]({{< ref "getting-started" >}}) ๅ’Œ [่ฏญ่จ€้…็ฝฎ]({{< ref "configuration##language-and-i18n" >}}) ้ƒจๅˆ†ใ€‚ + +ๆญคๅค–๏ผŒๆไพ›ๅœจไธป้กตๅ†…ๅฎนไธญ็š„ไปปไฝ• Markdown ๅ†…ๅฎนๅฐ†ๆ˜พ็คบๅœจไฝœ่€…่ต„ๆ–™ไธ‹ๆ–นใ€‚่ฟ™ๅ…่ฎธ้ขๅค–็š„็ตๆดปๆ€ง๏ผŒไปฅไฝฟ็”จ Shortcodes ๆ˜พ็คบ็”Ÿ็‰ฉๆˆ–ๅ…ถไป–่‡ชๅฎšไน‰ๅ†…ๅฎนใ€‚ + +่ฆๅฏ็”จprofileๅธƒๅฑ€๏ผŒ่ฏทๅœจ `params.toml` ้…็ฝฎๆ–‡ไปถไธญ่ฎพ็ฝฎ `homepage.layout = "profile"`ใ€‚ + +## customๅธƒๅฑ€ + +ๅฆ‚ๆžœๅ†…็ฝฎ็š„้ฆ–้กตๅธƒๅฑ€ไธๆปก่ถณๆ‚จ็š„้œ€ๆฑ‚๏ผŒๆ‚จๅฏไปฅ้€‰ๆ‹ฉๆไพ›่‡ชๅทฑ็š„่‡ชๅฎšไน‰ๅธƒๅฑ€ใ€‚่ฟ™ๅ…่ฎธๆ‚จๅฎŒๅ…จๆŽŒๆŽง้กต้ขๅ†…ๅฎน๏ผŒๅŸบๆœฌไธŠไธบๆ‚จๆไพ›ไบ†ไธ€ไธช็ฉบ็™ฝ็š„็”ปๅธƒใ€‚ + +่ฆๅฏ็”จ่‡ชๅฎšไน‰ๅธƒๅฑ€๏ผŒ่ฏทๅœจ `params.toml` ้…็ฝฎๆ–‡ไปถไธญ่ฎพ็ฝฎ `homepage.layout = "custom"`ใ€‚ + +้…็ฝฎๅ€ผ่ฎพ็ฝฎๅŽ๏ผŒๅˆ›ๅปบไธ€ไธชๆ–ฐ็š„ `custom.html` ๆ–‡ไปถๅนถๅฐ†ๅ…ถๆ”พ็ฝฎๅœจ `layouts/partials/home/custom.html`ใ€‚็Žฐๅœจ๏ผŒ`custom.html` ๆ–‡ไปถไธญ็š„ไปปไฝ•ๅ†…ๅฎน้ƒฝๅฐ†ๆ”พ็ฝฎๅœจ็ซ™็‚น้ฆ–้กต็š„ๅ†…ๅฎนๅŒบๅŸŸใ€‚ๆ‚จๅฏไปฅไฝฟ็”จไปปไฝ• HTMLใ€Tailwind ๆˆ– Hugo ๆจกๆฟๅ‡ฝๆ•ฐๆฅๅฎšไน‰ๅธƒๅฑ€ใ€‚ + +่ฆๅœจ่‡ชๅฎšไน‰ๅธƒๅฑ€ไธญๅŒ…ๅซ[ๆœ€่ฟ‘็š„ๆ–‡็ซ ](#recent-articles)๏ผŒ่ฏทไฝฟ็”จ `recent-articles.html` ้ƒจๅˆ†ใ€‚ + +ไพ‹ๅฆ‚๏ผŒ่ฟ™ไธช็ซ™็‚น็š„[้ฆ–้กต]({{< ref "/" >}})ไฝฟ็”จ่‡ชๅฎšไน‰ๅธƒๅฑ€๏ผŒๅ…่ฎธๅœจprofileๅ’Œpageๅธƒๅฑ€ไน‹้—ดๅˆ‡ๆขใ€‚่ฎฟ้—ฎ [GitHub ไป“ๅบ“](https://github.com/jpanther/congo/blob/dev/exampleSite/layouts/partials/home/custom.html) ๆŸฅ็œ‹ๅฎƒๆ˜ฏๅฆ‚ไฝ•ๅทฅไฝœ็š„ใ€‚ + +## ๆœ€่ฟ‘็š„ๆ–‡็ซ  + +ๆ‰€ๆœ‰้ฆ–้กตๅธƒๅฑ€้ƒฝๅฏไปฅ้€‰ๆ‹ฉๅœจไธป้กต้ขๅ†…ๅฎนไธ‹ๆ–นๆ˜พ็คบๆœ€่ฟ‘็š„ๆ–‡็ซ ใ€‚่ฆๅฏ็”จๆญคๅŠŸ่ƒฝ๏ผŒๅช้œ€ๅœจ `params.toml` ้…็ฝฎๆ–‡ไปถไธญๅฐ† `homepage.showRecent` ่ฎพ็ฝฎไธบ `true`ใ€‚ + +![ๅ…ทๆœ‰ๆœ€่ฟ‘ๆ–‡็ซ ็š„ไธชไบบ่ต„ๆ–™ๅธƒๅฑ€](home-profile-list.jpg) + +ๆญค้ƒจๅˆ†ไธญๅˆ—ๅ‡บ็š„ๆ–‡็ซ ๆฅ่‡ช `mainSections` ่ฎพ็ฝฎ๏ผŒ่ฏฅ่ฎพ็ฝฎๅ…่ฎธไฝฟ็”จๆ‚จ็ฝ‘็ซ™ไธŠไฝฟ็”จ็š„ๆ‰€ๆœ‰ๅ†…ๅฎน็ฑปๅž‹ใ€‚ไพ‹ๅฆ‚๏ผŒๅฆ‚ๆžœๆ‚จๆœ‰็”จไบŽ _posts_ ๅ’Œ _projects_ ็š„ๅ†…ๅฎน้ƒจๅˆ†๏ผŒๅฏไปฅๅฐ†ๆญค่ฎพ็ฝฎ่ฎพ็ฝฎไธบ `["posts", "projects"]`๏ผŒๆ‰€ๆœ‰่ฟ™ไธคไธช้ƒจๅˆ†ไธญ็š„ๆ–‡็ซ ้ƒฝๅฐ†็”จไบŽๅกซๅ……ๆœ€่ฟ‘็š„ๅˆ—่กจใ€‚ไธป้ข˜ๆœŸๆœ›ๆญค่ฎพ็ฝฎไธบๆ•ฐ็ป„๏ผŒๅ› ๆญคๅฆ‚ๆžœๆ‚จๅชไฝฟ็”จไธ€ไธช้ƒจๅˆ†ๆฅๅญ˜ๅ‚จๆ‰€ๆœ‰ๅ†…ๅฎน๏ผŒๆ‚จๅบ”็›ธๅบ”ๅœฐ่ฎพ็ฝฎไธบ `["blog"]`ใ€‚ diff --git a/themes/congo/exampleSite/content/docs/homepage-layout/thumb-heatmap.svg b/themes/congo/exampleSite/content/docs/homepage-layout/thumb-heatmap.svg new file mode 100644 index 0000000..35a64ca --- /dev/null +++ b/themes/congo/exampleSite/content/docs/homepage-layout/thumb-heatmap.svg @@ -0,0 +1 @@ +heatmap \ No newline at end of file diff --git a/themes/congo/exampleSite/content/docs/hosting-deployment/github-pages-source.jpg b/themes/congo/exampleSite/content/docs/hosting-deployment/github-pages-source.jpg new file mode 100644 index 0000000..27ef3fe Binary files /dev/null and b/themes/congo/exampleSite/content/docs/hosting-deployment/github-pages-source.jpg differ diff --git a/themes/congo/exampleSite/content/docs/hosting-deployment/github-workflow-permissions.jpg b/themes/congo/exampleSite/content/docs/hosting-deployment/github-workflow-permissions.jpg new file mode 100644 index 0000000..e76efac Binary files /dev/null and b/themes/congo/exampleSite/content/docs/hosting-deployment/github-workflow-permissions.jpg differ diff --git a/themes/congo/exampleSite/content/docs/hosting-deployment/index.ja.md b/themes/congo/exampleSite/content/docs/hosting-deployment/index.ja.md new file mode 100644 index 0000000..f0fc278 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/hosting-deployment/index.ja.md @@ -0,0 +1,146 @@ +--- +title: "ใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใจใƒ‡ใƒ—ใƒญใ‚ค" +date: 2020-08-07 +draft: false +description: "Congoใ‚ตใ‚คใƒˆใฎใƒ‡ใƒ—ใƒญใ‚คใซใคใ„ใฆ" +summary: "Congoใฏใ€ใปใจใ‚“ใฉใ™ในใฆใฎใƒ‡ใƒ—ใƒญใ‚คใ‚ทใƒŠใƒชใ‚ชใซๆŸ”่ปŸใซๅฏพๅฟœใงใใ‚‹ใ‚ˆใ†ใซ่จญ่จˆใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไธ€่ˆฌ็š„ใชใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใซใƒ‡ใƒ—ใƒญใ‚คใ™ใ‚‹ๆ–นๆณ•ใซใคใ„ใฆใฏใ€ใ“ใกใ‚‰ใ‚’ใ”่ฆงใใ ใ•ใ„ใ€‚" +slug: "hosting-deployment" +tags: ["hosting", "deployment", "docs", "github", "netlify", "render"] +--- + +Congoใงๆง‹็ฏ‰ใ—ใŸHugoใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใ‚’ๅฑ•้–‹ใ™ใ‚‹ๆ–นๆณ•ใฏใŸใใ•ใ‚“ใ‚ใ‚Šใพใ™ใ€‚ใ“ใฎใƒ†ใƒผใƒžใฏใ€ใปใจใ‚“ใฉใ™ในใฆใฎใƒ‡ใƒ—ใƒญใ‚คใ‚ทใƒŠใƒชใ‚ชใซๆŸ”่ปŸใซๅฏพๅฟœใงใใ‚‹ใ‚ˆใ†ใซ่จญ่จˆใ•ใ‚Œใฆใ„ใพใ™ใ€‚ + +Congoใฏใƒ†ใƒผใƒžๅ…จไฝ“ใง็›ธๅฏพURLใ‚’ไฝฟใฃใฆๆง‹็ฏ‰ใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใ‚ตใ‚คใƒˆใ‚’ใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚„GitHub Pagesใฎใ‚ˆใ†ใชใƒ›ใ‚นใƒˆใซ็ฐกๅ˜ใซ้…็ฝฎใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚้€šๅธธใ€ `config.toml` ใƒ•ใ‚กใ‚คใƒซใง `baseURL` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚Œใฐใ€็‰นๅˆฅใช่จญๅฎšใฏๅฟ…่ฆใ‚ใ‚Šใพใ›ใ‚“ใ€‚ + +Hugoๅ…ฌๅผใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฎ[Hosting and Deployment](https://gohugo.io/hosting-and-deployment/)ใฏใ€ใ‚ใชใŸใฎใ‚ตใ‚คใƒˆใ‚’ใƒ‡ใƒ—ใƒญใ‚คใ™ใ‚‹ๆ–นๆณ•ใ‚’ๅญฆใถใฎใซๆœ€้ฉใชๅ ดๆ‰€ใงใ™ใ€‚ไปฅไธ‹ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใซใฏใ€็‰นๅฎšใฎใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใงๅฝน็ซ‹ใคใ€็‰นๅฎšใฎใƒ†ใƒผใƒž่จญๅฎšใฎ่ฉณ็ดฐใŒๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ + +**ใƒ‡ใƒ—ใƒญใ‚คๅ…ˆใ‚’้ธใ‚“ใงใใ ใ•ใ„:** + +- [GitHub Pages](#github-pages) +- [Netlify](#netlify) +- [Render](#render) +- [Cloudflare Pages](#cloudflare-pages) +- [ๅ…ฑๆœ‰ใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใ€VPSใ€ใพใŸใฏ่‡ช่บซใฎWebใ‚ตใƒผใƒใƒผ](#ๅ…ฑๆœ‰ใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐvpsใพใŸใฏ่‡ช่บซใฎwebใ‚ตใƒผใƒใƒผ) + +--- + +## GitHub Pages + +GitHubใงใฏใ€Actionsใ‚’ไฝฟใฃใฆ[GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages)ไธŠใงใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ“ใฎๆฉŸ่ƒฝใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏใ€ใƒชใƒใ‚ธใƒˆใƒชใงPagesใ‚’ๆœ‰ๅŠนใซใ—ใ€ๆ–ฐใ—ใ„Actionsใƒฏใƒผใ‚ฏใƒ•ใƒญใƒผใ‚’ไฝœๆˆใ—ใฆใ‚ตใ‚คใƒˆใ‚’ใƒ“ใƒซใƒ‰ใ€ใƒ‡ใƒ—ใƒญใ‚คใ—ใพใ™ใ€‚ + +ใƒ•ใ‚กใ‚คใƒซใฏYAMLๅฝขๅผใงใ€GitHubใƒชใƒใ‚ธใƒˆใƒชใฎ `.github/workflows/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ็ฝฎใใ€ๆ‹กๅผตๅญใ‚’ `.yml` ใจใ—ใพใ™ใ€‚ + +{{< alert >}} +**้‡่ฆ:** `branches` ใจใƒ‡ใƒ—ใƒญใ‚คใ‚นใƒ†ใƒƒใƒ—ใฎ `if` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใซใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงไฝฟ็”จใ—ใฆใ„ใ‚‹ใƒ–ใƒฉใƒณใƒๅใ‚’ๆญฃใ—ใ่จญๅฎšใ—ใฆใใ ใ•ใ„ใ€‚ +{{< /alert >}} + +```yaml +# .github/workflows/gh-pages.yml + +name: GitHub Pages + +on: + push: + branches: + - main + +jobs: + build-deploy: + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: true + fetch-depth: 0 + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: "latest" + + - name: Build + run: hugo --minify + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + if: ${{ github.ref == 'refs/heads/main' }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: gh-pages + publish_dir: ./public +``` + +่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’GitHubใซใƒ—ใƒƒใ‚ทใƒฅใ™ใ‚‹ใจใ€ใ‚ขใ‚ฏใ‚ทใƒงใƒณใŒ่‡ชๅ‹•็š„ใซๅฎŸ่กŒใ•ใ‚Œใ‚‹ใฏใšใงใ™ใ€‚ๅˆๅ›žใฏๅคฑๆ•—ใ™ใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใชใ„ใฎใงใ€GitHubใƒชใƒใ‚ธใƒˆใƒชใฎ **Settings > Pages** ใซใ‚ขใ‚ฏใ‚ปใ‚นใ—ใฆใ€ใ‚ฝใƒผใ‚นใŒๆญฃใ—ใ„ใ‹็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ `gh-pages` ใƒ–ใƒฉใƒณใƒใ‚’ไฝฟใ†ใ‚ˆใ†ใซ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹ในใใงใ™ใ€‚ + +{{< screenshot src="github-pages-source.jpg" alt="Screen capture of GitHub Pages source" >}} + +่จญๅฎšใŒๅฎŒไบ†ใ—ใŸใ‚‰ใ€ใ‚ขใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ†ๅฎŸ่กŒใ—ใ€ใ‚ตใ‚คใƒˆใ‚’ๆญฃใ—ใใƒ“ใƒซใƒ‰ใ—ใฆใƒ‡ใƒ—ใƒญใ‚คใ—ใพใ™ใ€‚ใ™ในใฆใŒๆญฃๅธธใซใƒ‡ใƒ—ใƒญใ‚คใ•ใ‚ŒใŸใ“ใจใ‚’็ขบ่ชใ™ใ‚‹ใŸใ‚ใซใ‚ขใ‚ฏใ‚ทใƒงใƒณใƒญใ‚ฐใ‚’ๅ‚็…งใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +## Netlify + +[Netlify](https://www.netlify.com)ใซใƒ‡ใƒ—ใƒญใ‚คใ™ใ‚‹ใซใฏใ€Netlifyๅดใซๆ–ฐใ—ใ„ใƒ‡ใƒ—ใƒญใ‚คใ‚ตใ‚คใƒˆใ‚’ไฝœๆˆใ—ใ€ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใจใƒชใƒณใ‚ฏใ—ใพใ™ใ€‚Netlify UIใงใฏใ€ใƒ“ใƒซใƒ‰่จญๅฎšใฏ็ฉบ็™ฝใฎใพใพใ€ไฝฟ็”จใ™ใ‚‹ใƒ‰ใƒกใ‚คใƒณใ ใ‘ใ‚’่จญๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + +{{< screenshot src="netlify-build-settings.jpg" alt="Screen capture of Netlify build settings" >}} + +ๆฌกใซใ€ใ‚ตใ‚คใƒˆใƒปใƒชใƒใ‚ธใƒˆใƒชใฎใƒซใƒผใƒˆใซ `netlify.toml` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใพใ™: + +```toml +# netlify.toml + +[build] + command = "hugo mod get -u && hugo --gc --minify -b $URL" + publish = "public" + +[build.environment] + HUGO_VERSION = "0.147.8" + NODE_ENV = "production" + GO_VERSION = "1.20" + TZ = "UTC" # Set to preferred timezone + +[context.production.environment] + HUGO_ENV = "production" +``` + +ไธŠใฎไพ‹ใฏใ€Congoใ‚’Hugoใƒขใ‚ธใƒฅใƒผใƒซใจใ—ใฆใƒ‡ใƒ—ใƒญใ‚คใ™ใ‚‹ใ“ใจใ‚’ๆƒณๅฎšใ—ใฆใ„ใพใ™ใ€‚ๅˆฅใฎๆ–นๆณ•ใงใƒ†ใƒผใƒžใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใŸๅ ดๅˆใฏใ€ใƒ“ใƒซใƒ‰ใ‚ณใƒžใƒณใƒ‰ใ‚’ `hugo --gc --minify -b $URL` ใซๅค‰ๆ›ดใ—ใฆใใ ใ•ใ„ใ€‚ + +่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ใƒชใƒใ‚ธใƒˆใƒชใซใƒ—ใƒƒใ‚ทใƒฅใ™ใ‚‹ใจใ€Netlifyใฏ่‡ชๅ‹•็š„ใซใ‚ตใ‚คใƒˆใ‚’ใƒ‡ใƒ—ใƒญใ‚คใ—ใพใ™ใ€‚Netlify UIใงใƒ‡ใƒ—ใƒญใ‚คใฎใƒญใ‚ฐใ‚’็ขบ่ชใ—ใ€ใ‚จใƒฉใƒผใŒใชใ„ใ‹ใƒใ‚งใƒƒใ‚ฏใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +## Render + +[Render](https://render.com)ใธใฎใƒ‡ใƒ—ใƒญใ‚คใฏ้žๅธธใซ็ฐกๅ˜ใงใ€ใ™ในใฆใฎ่จญๅฎšใฏRender UIใ‚’ไป‹ใ—ใฆ่กŒใ„ใพใ™ใ€‚ + +ๆ–ฐใ—ใ„**้™็š„ใ‚ตใ‚คใƒˆ**ใ‚’ไฝœๆˆใ—ใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใ‚ณใƒผใƒ‰ใƒปใƒชใƒใ‚ธใƒˆใƒชใซใƒชใƒณใ‚ฏใ—ใพใ™ใ€‚ใใ—ใฆใ€ใƒ“ใƒซใƒ‰ใ‚ณใƒžใƒณใƒ‰ใ‚’ `hugo --gc --minify` ใซใ€ๅ…ฌ้–‹ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ `public` ใซ่จญๅฎšใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +{{< screenshot src="render-settings.jpg" alt="Screen capture of Render settings" >}} + +ใ‚ใชใŸใŒๅค‰ๆ›ดใ‚’ใƒชใƒใ‚ธใƒˆใƒชใซใƒ—ใƒƒใ‚ทใƒฅใ™ใ‚‹ใŸใณใซใ€่‡ชๅ‹•็š„ใซใƒ“ใƒซใƒ‰ใจใƒ‡ใƒ—ใƒญใ‚คใ‚’่กŒใ„ใพใ™ใ€‚ + +## Cloudflare Pages + +CloudflareใฏHugoใ‚ตใ‚คใƒˆใ‚’ใƒ›ใ‚นใƒˆใงใใ‚‹[Pages](https://pages.cloudflare.com/)ใ‚ตใƒผใƒ“ใ‚นใ‚’ๆไพ›ใ—ใฆใ„ใพใ™ใ€‚Gitใƒชใƒใ‚ธใƒˆใƒชใ‹ใ‚‰ใ‚ตใ‚คใƒˆใ‚’ๆง‹็ฏ‰ใ—ใ€CloudflareใฎCDNใงใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใ—ใพใ™ใ€‚[Hugoใƒ‡ใƒ—ใƒญใ‚คใƒกใƒณใƒˆใ‚ฌใ‚คใƒ‰](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site)ใซๅพ“ใฃใฆๅง‹ใ‚ใฆใใ ใ•ใ„ใ€‚ + +The Rocket Loaderโ„ข feature offered by Cloudflare tries to speed up rendering of web pages with JavaScript, but it breaks the appearance switcher in the theme. It can also cause an annoying light/dark screen flash when browsing your site due to scripts loading in the wrong order. + +CloudflareใŒๆไพ›ใ™ใ‚‹Rocket Loaderโ„ขใฏใ€JavaScriptใ‚’ไฝฟ็”จใ—ใŸใ‚ฆใ‚งใƒ–ใƒšใƒผใ‚ธใฎใƒฌใƒณใƒ€ใƒชใƒณใ‚ฐใ‚’้ซ˜้€ŸๅŒ–ใ™ใ‚‹ใ‚‚ใฎใงใ™ใŒใ€ใƒ†ใƒผใƒžใฎๅค–่ฆณใ‚นใ‚คใƒƒใƒใƒฃใƒผใ‚’ๅฃŠใ—ใฆใ—ใพใ„ใพใ™ใ€‚ใพใŸใ€ใ‚นใ‚ฏใƒชใƒ—ใƒˆใฎใƒญใƒผใƒ‰้ †ๅบใŒๆญฃใ—ใใชใ„ใŸใ‚ใ€ใ‚ตใ‚คใƒˆใ‚’้–ฒ่ฆงใ™ใ‚‹้š›ใซ็…ฉใ‚ใ—ใ„็”ป้ขใฎๆ˜Žๆš—ใŒ็‚นๆป…ใ™ใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚ + +ใ“ใ‚Œใ‚‰ใฎๅ•้กŒใฏไธ‹่จ˜ใ‚’็„กๅŠนใซใ™ใ‚‹ใ“ใจใง่งฃๆฑบใงใใพใ™: + +- [Cloudflare dashboard](https://dash.cloudflare.com)ใซใ‚ขใ‚ฏใ‚ปใ‚นใ™ใ‚‹ +- ใ‚ใชใŸใฎใƒ‰ใƒกใ‚คใƒณๅใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ +- _Speed_ ใ‚ปใ‚ฏใ‚ทใƒงใƒณใฎไธญใซใ‚ใ‚‹ _Optimization_ ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ +- _Rocket Loaderโ„ข_ ใพใงใ‚นใ‚ฏใƒญใƒผใƒซใ—ใ€ใ“ใ‚Œใ‚’็„กๅŠนใซใ™ใ‚‹ + +Congoใงๆง‹็ฏ‰ใ•ใ‚ŒใŸใ‚ตใ‚คใƒˆใฏใ€ใ“ใฎๆฉŸ่ƒฝใ‚’็„กๅŠนใซใ—ใฆใ‚‚ๅๅˆ†ใซ่ชญใฟ่พผใฟใŒ้€Ÿใ„ใงใ™ใ€‚ + +## ๅ…ฑๆœ‰ใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใ€VPSใ€ใพใŸใฏ่‡ช่บซใฎWebใ‚ตใƒผใƒใƒผ + +ๅพ“ๆฅใฎใ‚ฆใ‚งใƒ–ใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใ‚’ไฝฟ็”จใ™ใ‚‹ๅ ดๅˆใ‚„่‡ชๅˆ†ใฎใ‚ตใƒผใƒใƒผใซใƒ‡ใƒ—ใƒญใ‚คใ™ใ‚‹ๅ ดๅˆใฏใ€Hugoใ‚ตใ‚คใƒˆใ‚’ๆง‹็ฏ‰ใ—ใฆใƒ•ใ‚กใ‚คใƒซใ‚’ใƒ›ใ‚นใƒˆใซ่ปข้€ใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚ + +`config.toml` ใฎ `baseURL` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใซใ€ใ‚ใชใŸใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใƒซใƒผใƒˆใธใฎๅฎŒๅ…จใชURLใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ + +ใใ‚Œใ‹ใ‚‰ `hugo` ใ‚ณใƒžใƒณใƒ‰ใ‚’ไฝฟใฃใฆใ‚ตใ‚คใƒˆใ‚’ๆง‹็ฏ‰ใ—ใ€ๅ‡บๅŠ›ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฎๅ†…ๅฎนใ‚’ใ‚ฆใ‚งใƒ–ใ‚ตใƒผใƒใฎใƒซใƒผใƒˆใซใ‚ณใƒ”ใƒผใ™ใ‚Œใฐๆบ–ๅ‚™ๅฎŒไบ†ใงใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€ๅ‡บๅŠ›ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฏ `public` ใจใ„ใ†ๅๅ‰ใซใชใฃใฆใ„ใพใ™ใ€‚ + +_ใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใƒ—ใƒญใƒใ‚คใƒ€ใƒผใŒๅฟ…่ฆใชๅ ดๅˆใฏใ€[Vultr](https://www.vultr.com/?ref=8957394-8H)ใพใŸใฏ[DigitalOcean](https://m.do.co/c/36841235e565)ใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„ใ€‚ใ“ใ‚Œใ‚‰ใฎใ‚ขใƒ•ใ‚ฃใƒชใ‚จใ‚คใƒˆใƒชใƒณใ‚ฏใ‚’ไฝฟ็”จใ—ใฆใ‚ตใ‚คใƒณใ‚ขใƒƒใƒ—ใ™ใ‚‹ใจใ€ๆœ€ๅคง100ใƒ‰ใƒซใฎ็„กๆ–™ใ‚ฏใƒฌใ‚ธใƒƒใƒˆใŒใ‚‚ใ‚‰ใˆใพใ™ใ€‚_ diff --git a/themes/congo/exampleSite/content/docs/hosting-deployment/index.md b/themes/congo/exampleSite/content/docs/hosting-deployment/index.md new file mode 100644 index 0000000..42ccbdf --- /dev/null +++ b/themes/congo/exampleSite/content/docs/hosting-deployment/index.md @@ -0,0 +1,148 @@ +--- +title: "Hosting & Deployment" +date: 2020-08-07 +draft: false +description: "Learn how to deploy a Congo site." +summary: "Congo is designed to be flexible in almost any deployment scenario. Learn more about how to deploy your project to some common hosting platforms." +slug: "hosting-deployment" +tags: ["hosting", "deployment", "docs", "github", "netlify", "render"] +--- + +There are many ways to deploy your Hugo website built with Congo. The theme is designed to be flexible in almost any deployment scenario. + +Congo is built using relative URLs throughout the theme. This enables sites to easily be deployed to sub-folders and hosts like GitHub Pages. There's usually no special configuration required for this to work as long as the `baseURL` parameter has been configured in the `hugo.toml` file. + +The official Hugo [Hosting and Deployment](https://gohugo.io/hosting-and-deployment/) docs are the best place to learn how to deploy your site. The sections below contain some specific theme configuration details that can help you deploy smoothly with certain providers. + +**Choose your provider:** + +- [GitHub Pages](#github-pages) +- [Netlify](#netlify) +- [Render](#render) +- [Cloudflare Pages](#cloudflare-pages) +- [Shared hosting, VPS or private web server](#shared-hosting-vps-or-private-web-server) + +--- + +## GitHub Pages + +GitHub allows hosting on [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages) using Actions. To enable this functionality, enable Pages on your repo and create a new Actions workflow to build and deploy your site. + +The file needs to be in YAML format, placed within the `.github/workflows/` directory of your GitHub repository and named with a `.yml` extension. + +{{< alert >}} +**Important:** Ensure you set the correct branch name under `branches` and in the deploy step `if` parameter to the source branch used in your project. +{{< /alert >}} + +```yaml +# .github/workflows/gh-pages.yml + +name: GitHub Pages + +on: + push: + branches: + - main + +jobs: + build-deploy: + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: true + fetch-depth: 0 + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: "latest" + extended: true + + - name: Build + run: hugo --minify + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + if: ${{ github.ref == 'refs/heads/main' }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: gh-pages + publish_dir: ./public +``` + +Push the config file to GitHub and the action should automatically run. It may fail the first time and you'll need to visit the **Settings > Pages** section of your GitHub repo to check the source is correct. It should be set to use the `gh-pages` branch. + +{{< screenshot src="github-pages-source.jpg" alt="Screen capture of GitHub Pages source settings" >}} + +You should also visit the **Settings > Actions > General** section and check that the workflow permissions allow actions to make changes to your repo. + +{{< screenshot src="github-workflow-permissions.jpg" alt="Screen capture of GitHub Workflow Permissions settings" >}} + +Once the settings are configured, re-run the action and the site should build and deploy correctly. You can consult the actions log to check everything deployed successfully. + +## Netlify + +To deploy to [Netlify](https://www.netlify.com), create a new continuous deployment site and link it to your source code. The build settings can be left blank in the Netlify UI. You will only need to configure the domain you'll be using. + +{{< screenshot src="netlify-build-settings.jpg" alt="Screen capture of Netlify build settings" >}} + +Then in the root of your site repository, create a `netlify.toml` file: + +```toml +# netlify.toml + +[build] + command = "hugo mod get -u && hugo --gc --minify -b $URL" + publish = "public" + +[build.environment] + HUGO_VERSION = "0.147.8" + NODE_ENV = "production" + TZ = "UTC" # Set to preferred timezone + +[context.production.environment] + HUGO_ENV = "production" +``` + +This configuration assumes you are deploying Congo as a Hugo module. If you have installed the theme using another method, change the build command to simply `hugo --gc --minify -b $URL`. + +When you push the config file to your repo, Netlify should automatically deploy your site. You can check the deploy logs in the Netlify UI to check for any errors. + +## Render + +Deploying to [Render](https://render.com) is very straightforward and all configuration is via the Render UI. + +Create a new **Static Site** and link it to your project's code repository. Then simply configure the build command to be `hugo --gc --minify` and publish directory to be `public`. + +{{< screenshot src="render-settings.jpg" alt="Screen capture of Render settings" >}} + +The site will automatically build and deploy whenever you push a change to your repo. + +## Cloudflare Pages + +Cloudflare offers the [Pages](https://pages.cloudflare.com/) service that can host Hugo blogs. It builds the site from a git repository and then hosts it on Cloudflare's CDN. Follow their [Hugo deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site) to get started. + +The Rocket Loaderโ„ข feature offered by Cloudflare tries to speed up rendering of web pages with JavaScript, but it breaks the appearance switcher in the theme. It can also cause an annoying light/dark screen flash when browsing your site due to scripts loading in the wrong order. + +This problem can be fixed by disabling it: + +- Go to the [Cloudflare dashboard](https://dash.cloudflare.com) +- Click on your domain name in the list +- Click _Optimization_ in the _Speed_ section +- Scroll down to _Rocket Loaderโ„ข_ and disable it + +Hugo sites built with Congo still load very quickly, even with this feature disabled. + +## Shared hosting, VPS or private web server + +Using traditional web hosting, or deploying to your own web server, is as simple as building your Hugo site and transferring the files to your host. + +Make sure that the `baseURL` parameter in `hugo.toml` is set to the full URL to the root of your website (including any sub domains or sub-folders). + +Then build your site using `hugo` and copy the contents of the output directory to the root of your web server and you will be ready to go. By default, the output directory is named `public`. + +_If you need a hosting provider, check out [Vultr](https://www.vultr.com/?ref=8957394-8H) or [DigitalOcean](https://m.do.co/c/36841235e565). Signing up using these affiliate links will give you up to $100 in free credit so you can try the service._ diff --git a/themes/congo/exampleSite/content/docs/hosting-deployment/index.zh-Hans.md b/themes/congo/exampleSite/content/docs/hosting-deployment/index.zh-Hans.md new file mode 100644 index 0000000..c97c7b4 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/hosting-deployment/index.zh-Hans.md @@ -0,0 +1,148 @@ +--- +title: "้ƒจ็ฝฒ" +date: 2020-08-07 +draft: false +description: "ๅญฆไน ๅฆ‚ไฝ•้ƒจ็ฝฒ Congo ็ฝ‘็ซ™ใ€‚" +summary: "Congo ่ขซ่ฎพ่ฎกไธบๅœจๅ‡ ไนŽไปปไฝ•้ƒจ็ฝฒๅœบๆ™ฏไธญ้ƒฝๅ…ทๆœ‰็ตๆดปๆ€งใ€‚ไบ†่งฃๅฆ‚ไฝ•ๅฐ†้กน็›ฎ้ƒจ็ฝฒๅˆฐไธ€ไบ›ๅธธ่ง็š„ไธปๆœบๅนณๅฐใ€‚" +slug: "hosting-deployment" +tags: ["hosting", "deployment", "docs", "github", "netlify", "render"] +--- + +ๆœ‰่ฎธๅคšๆ–นๆณ•ๅฏไปฅ้ƒจ็ฝฒไฝฟ็”จ Congo ๆž„ๅปบ็š„ Hugo ็ฝ‘็ซ™ใ€‚่ฏฅไธป้ข˜่ขซ่ฎพ่ฎกไธบๅœจๅ‡ ไนŽไปปไฝ•้ƒจ็ฝฒๅœบๆ™ฏไธญ้ƒฝๅ…ทๆœ‰็ตๆดปๆ€งใ€‚ + +Congo ๅœจๆ•ดไธชไธป้ข˜ไธญไฝฟ็”จ็›ธๅฏน URLใ€‚่ฟ™ไฝฟๅพ—็ซ™็‚นๅฏไปฅ่ฝปๆพ้ƒจ็ฝฒๅˆฐๅญๆ–‡ไปถๅคนๅ’Œๅƒ GitHub Pages ่ฟ™ๆ ท็š„ไธปๆœบใ€‚้€šๅธธๆƒ…ๅ†ตไธ‹๏ผŒๅช่ฆๅœจ config.toml ๆ–‡ไปถไธญ้…็ฝฎไบ† baseURL ๅ‚ๆ•ฐ๏ผŒๅฐฑไธ้œ€่ฆ็‰นๆฎŠ็š„้…็ฝฎใ€‚ + +่ฆๅญฆไน ๅฆ‚ไฝ•้ƒจ็ฝฒๆ‚จ็š„็ซ™็‚น๏ผŒHugo ๅฎ˜ๆ–น็š„ไธปๆœบไธŽ้ƒจ็ฝฒๆ–‡ๆกฃๆ˜ฏๆœ€ไฝณ้€‰ๆ‹ฉใ€‚ไธ‹้ข็š„้ƒจๅˆ†ๅŒ…ๅซไธ€ไบ›็‰นๅฎš็š„ไธป้ข˜้…็ฝฎ็ป†่Š‚๏ผŒๅฏไปฅๅธฎๅŠฉๆ‚จๅœจๆŸไบ›ๆไพ›ๅ•†้‚ฃ้‡Œ้กบๅˆฉ้ƒจ็ฝฒใ€‚ + +**้€‰ๆ‹ฉๆ‚จ็š„ๆไพ›ๅ•†๏ผš** + +- [GitHub Pages](#github-pages) +- [Netlify](#netlify) +- [Render](#render) +- [Cloudflare Pages](#cloudflare-pages) +- [ๅ…ฑไบซไธปๆœบใ€VPS ๆˆ–็งๆœ‰ Web ๆœๅŠกๅ™จ](#shared-hosting-vps-or-private-web-server) + +--- + +## GitHub Pages + +GitHub ๅ…่ฎธไฝฟ็”จ [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages) ๅœจ Actions ไธญๆ‰˜็ฎก็ฝ‘็ซ™ใ€‚่ฆๅฏ็”จๆญคๅŠŸ่ƒฝ๏ผŒ่ฏทๅœจๆ‚จ็š„ๅญ˜ๅ‚จๅบ“ไธŠๅฏ็”จ Pages๏ผŒๅนถๅˆ›ๅปบไธ€ไธชๆ–ฐ็š„ Actions ๅทฅไฝœๆตๆฅๆž„ๅปบๅ’Œ้ƒจ็ฝฒๆ‚จ็š„็ซ™็‚นใ€‚ + +่ฏฅๆ–‡ไปถ้œ€่ฆ้‡‡็”จ YAML ๆ ผๅผ๏ผŒๆ”พ็ฝฎๅœจๆ‚จ็š„ GitHub ๅญ˜ๅ‚จๅบ“็š„ `.github/workflows/` ็›ฎๅฝ•ไธญ๏ผŒๅนถไปฅ `.yml` ๆ‰ฉๅฑ•ๅๅ‘ฝๅใ€‚ + +{{< alert >}} +**้‡่ฆๆ็คบ๏ผš**็กฎไฟๅœจ `branches` ไธ‹่ฎพ็ฝฎๆญฃ็กฎ็š„ๅˆ†ๆ”ฏๅ็งฐ๏ผŒๅนถๅœจ้ƒจ็ฝฒๆญฅ้ชค็š„ `if` ๅ‚ๆ•ฐไธญ่ฎพ็ฝฎ็”จไบŽ้กน็›ฎ็š„ๆบๅˆ†ๆ”ฏใ€‚ +{{< /alert >}} + +```yaml +# .github/workflows/gh-pages.yml + +name: GitHub Pages + +on: + push: + branches: + - main + +jobs: + build-deploy: + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: true + fetch-depth: 0 + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: "latest" + + - name: Build + run: hugo --minify + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + if: ${{ github.ref == 'refs/heads/main' }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: gh-pages + publish_dir: ./public +``` + +ๅฐ†้…็ฝฎๆ–‡ไปถๆŽจ้€ๅˆฐ GitHub๏ผŒๆ“ไฝœๅบ”ไผš่‡ชๅŠจ่ฟ่กŒใ€‚็ฌฌไธ€ๆฌกๅฏ่ƒฝไผšๅคฑ่ดฅ๏ผŒๆ‚จ้œ€่ฆ่ฎฟ้—ฎ GitHub ๅญ˜ๅ‚จๅบ“็š„ **Settings > Pages** ้ƒจๅˆ†ไปฅๆฃ€ๆŸฅๆบๆ˜ฏๅฆๆญฃ็กฎใ€‚ๅฎƒๅบ”่ฏฅ่ฎพ็ฝฎไธบไฝฟ็”จ `gh-pages` ๅˆ†ๆ”ฏใ€‚ + +{{< screenshot src="github-pages-source.jpg" alt="GitHub Pages source settings ๅฑๅน•ๆˆชๅ›พ" >}} + +ๆ‚จ่ฟ˜ๅบ”่ฏฅ่ฎฟ้—ฎ **Settings > Actions > General** ้ƒจๅˆ†๏ผŒๆฃ€ๆŸฅๅทฅไฝœๆตๆƒ้™ๆ˜ฏๅฆๅ…่ฎธๆ“ไฝœๅฏนๆ‚จ็š„ๅญ˜ๅ‚จๅบ“่ฟ›่กŒๆ›ดๆ”นใ€‚ + +{{< screenshot src="github-workflow-permissions.jpg" alt="GitHub Workflow Permissions ่ฎพ็ฝฎๅฑๅน•ๆˆชๅ›พ" >}} + +้…็ฝฎ่ฎพ็ฝฎๅŽ๏ผŒ้‡ๆ–ฐ่ฟ่กŒๆ“ไฝœ๏ผŒ็ซ™็‚นๅบ”่ฏฅ่ƒฝๅคŸๆญฃ็กฎๆž„ๅปบๅ’Œ้ƒจ็ฝฒใ€‚ๆ‚จๅฏไปฅๆŸฅ็œ‹ๆ“ไฝœๆ—ฅๅฟ—ไปฅ็กฎไฟไธ€ๅˆ‡้ƒฝๆˆๅŠŸ้ƒจ็ฝฒใ€‚ + +## Netlify + +่ฆ้ƒจ็ฝฒๅˆฐ [Netlify](https://www.netlify.com)๏ผŒๅˆ›ๅปบไธ€ไธชๆ–ฐ็š„ๆŒ็ปญ้ƒจ็ฝฒ็ซ™็‚นๅนถๅฐ†ๅ…ถ้“พๆŽฅๅˆฐๆ‚จ็š„ๆบไปฃ็ ใ€‚ๅœจ Netlify UI ไธญ๏ผŒๅฏไปฅๅฐ†ๆž„ๅปบ่ฎพ็ฝฎ็•™็ฉบใ€‚ๆ‚จๅช้œ€่ฆ้…็ฝฎๅฐ†่ฆไฝฟ็”จ็š„ๅŸŸใ€‚ + +{{< screenshot src="netlify-build-settings.jpg" alt="Netlify ๆž„ๅปบ่ฎพ็ฝฎๅฑๅน•ๆˆชๅ›พ" >}} + +็„ถๅŽๅœจๆ‚จ็ซ™็‚นๅญ˜ๅ‚จๅบ“็š„ๆ น็›ฎๅฝ•ไธญ๏ผŒๅˆ›ๅปบไธ€ไธช `netlify.toml` ๆ–‡ไปถ๏ผš + +```toml +# netlify.toml + +[build] + command = "hugo mod get -u && hugo --gc --minify -b $URL" + publish = "public" + +[build.environment] + HUGO_VERSION = "0.147.8" + NODE_ENV = "production" + GO_VERSION = "1.20" + TZ = "UTC" # Set to preferred timezone + +[context.production.environment] + HUGO_ENV = "production" +``` + +ๆญค้…็ฝฎๅ‡่ฎพๆ‚จๆญฃๅœจๅฐ† Congo ้ƒจ็ฝฒไธบ Hugo ๆจกๅ—ใ€‚ๅฆ‚ๆžœๆ‚จไฝฟ็”จๅ…ถไป–ๆ–นๆณ•ๅฎ‰่ฃ…ไบ†ไธป้ข˜๏ผŒ่ฏทๅฐ†ๆž„ๅปบๅ‘ฝไปคๆ›ดๆ”นไธบ็ฎ€ๅ•็š„ `hugo --gc --minify -b $URL`ใ€‚ + +ๅฝ“ๆ‚จๅฐ†้…็ฝฎๆ–‡ไปถๆŽจ้€ๅˆฐๅญ˜ๅ‚จๅบ“ๆ—ถ๏ผŒNetlify ๅบ”ไผš่‡ชๅŠจ้ƒจ็ฝฒๆ‚จ็š„็ซ™็‚นใ€‚ๆ‚จๅฏไปฅๅœจ Netlify UI ไธญๆฃ€ๆŸฅ้ƒจ็ฝฒๆ—ฅๅฟ—ไปฅๆŸฅ็œ‹ๆ˜ฏๅฆๆœ‰ไปปไฝ•้”™่ฏฏใ€‚ + +## Render + +้ƒจ็ฝฒๅˆฐ [Render](https://render.com) ้žๅธธ็ฎ€ๅ•๏ผŒๆ‰€ๆœ‰้…็ฝฎ้ƒฝ้€š่ฟ‡ Render UI ่ฟ›่กŒใ€‚ + +ๅˆ›ๅปบไธ€ไธชๆ–ฐ็š„ **Static Site** ๅนถๅฐ†ๅ…ถ้“พๆŽฅๅˆฐ้กน็›ฎ็š„ไปฃ็ ๅญ˜ๅ‚จๅบ“ใ€‚็„ถๅŽ็ฎ€ๅ•ๅœฐ้…็ฝฎๆž„ๅปบๅ‘ฝไปคไธบ `hugo --gc --minify`๏ผŒๅ‘ๅธƒ็›ฎๅฝ•ไธบ `public`ใ€‚ + +{{< screenshot src="render-settings.jpg" alt="Render ่ฎพ็ฝฎๅฑๅน•ๆˆชๅ›พ" >}} + +ๅช่ฆๆ‚จๅฏนๅญ˜ๅ‚จๅบ“่ฟ›่กŒๆ›ดๆ”น๏ผŒ็ซ™็‚นๅฐ†่‡ชๅŠจๆž„ๅปบๅ’Œ้ƒจ็ฝฒใ€‚ + +## Cloudflare Pages + +Cloudflare ๆไพ› [Pages](https://pages.cloudflare.com/) ๆœๅŠก๏ผŒๅฏไปฅๆ‰˜็ฎก Hugo ๅšๅฎขใ€‚ๅฎƒไปŽ git ๅญ˜ๅ‚จๅบ“ๆž„ๅปบ็ซ™็‚น๏ผŒ็„ถๅŽๅœจ Cloudflare ็š„ CDN ไธŠๆ‰˜็ฎกใ€‚่ฏทๆŒ‰็…งไป–ไปฌ็š„ [Hugo ้ƒจ็ฝฒๆŒ‡ๅ—](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site) ๅผ€ๅง‹ไฝฟ็”จใ€‚ + +Cloudflare ๆไพ›็š„ Rocket Loaderโ„ข ๅŠŸ่ƒฝ่ฏ•ๅ›พๅŠ ้€Ÿๅธฆๆœ‰ JavaScript ็š„็ฝ‘้กตๆธฒๆŸ“๏ผŒไฝ†ๅฎƒไผš็ ดๅไธป้ข˜ไธญ็š„ๅค–่ง‚ๅˆ‡ๆขๅ™จใ€‚ๅฎƒ่ฟ˜ๅฏ่ƒฝๅฏผ่‡ดๆต่งˆ็ซ™็‚นๆ—ถๅ› ่„šๆœฌๅŠ ่ฝฝ้กบๅบ้”™่ฏฏ่€Œๅ‡บ็Žฐไปคไบบ่ฎจๅŽŒ็š„ๆต…่‰ฒ/ๆทฑ่‰ฒๅฑๅน•้—ช็ƒใ€‚ + +ๅฏไปฅ้€š่ฟ‡็ฆ็”จๆญคๅŠŸ่ƒฝๆฅ่งฃๅ†ณ่ฟ™ไธช้—ฎ้ข˜๏ผš + +- ่ฝฌๅˆฐ [Cloudflare ไปช่กจๆฟ](https://dash.cloudflare.com) +- ๅœจๅˆ—่กจไธญ็‚นๅ‡ปๆ‚จ็š„ๅŸŸๅ +- ๅœจ _Speed_ ้ƒจๅˆ†ไธญ็‚นๅ‡ป _Optimization_ +- ๆปšๅŠจๅˆฐ _Rocket Loaderโ„ข_ ๅนถ็ฆ็”จๅฎƒ + +ไฝฟ็”จ Congo ๆž„ๅปบ็š„ Hugo ็ซ™็‚นๅณไฝฟ็ฆ็”จๆญคๅŠŸ่ƒฝไป็„ถๅŠ ่ฝฝ้žๅธธๅฟซใ€‚ + +## ๅ…ฑไบซๆ‰˜็ฎกใ€VPS ๆˆ–็งๆœ‰ Web ๆœๅŠกๅ™จ + +ไฝฟ็”จไผ ็ปŸ็š„ Web ๆ‰˜็ฎก๏ผŒๆˆ–้ƒจ็ฝฒๅˆฐ่‡ชๅทฑ็š„ Web ๆœๅŠกๅ™จ๏ผŒๅช้œ€ๆž„ๅปบ Hugo ็ซ™็‚นๅนถๅฐ†ๆ–‡ไปถไผ ่พ“ๅˆฐไธปๆœบๅณๅฏใ€‚ + +็กฎไฟ `config.toml` ไธญ็š„ `baseURL` ๅ‚ๆ•ฐ่ฎพ็ฝฎไธบๆ‚จ็ฝ‘็ซ™ๆ น็›ฎๅฝ•็š„ๅฎŒๆ•ด URL๏ผˆๅŒ…ๆ‹ฌไปปไฝ•ๅญๅŸŸๆˆ–ๅญๆ–‡ไปถๅคน๏ผ‰ใ€‚ + +็„ถๅŽไฝฟ็”จ `hugo` ๆž„ๅปบๆ‚จ็š„็ซ™็‚น๏ผŒๅฐ†่พ“ๅ‡บ็›ฎๅฝ•็š„ๅ†…ๅฎนๅคๅˆถๅˆฐ Web ๆœๅŠกๅ™จ็š„ๆ น็›ฎๅฝ•๏ผŒๆ‚จๅฐฑๅ‡†ๅค‡ๅฅฝไบ†ใ€‚้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒ่พ“ๅ‡บ็›ฎๅฝ•็š„ๅ็งฐไธบ `public`ใ€‚ + +_ๅฆ‚ๆžœๆ‚จ้œ€่ฆๆ‰˜็ฎกๆไพ›ๅ•†๏ผŒ่ฏทๆŸฅ็œ‹ [Vultr](https://www.vultr.com/?ref=8957394-8H) ๆˆ– [DigitalOcean](https://m.do.co/c/36841235e565)ใ€‚ไฝฟ็”จ่ฟ™ไบ›ๆŽจๅนฟ้“พๆŽฅๆณจๅ†Œๅฐ†ไธบๆ‚จๆไพ›ๆœ€ๅคš 100 ็พŽๅ…ƒ็š„ๅ…่ดนไฟก็”จ๏ผŒไปฅไพฟๆ‚จๅฏไปฅๅฐ่ฏ•่ฏฅๆœๅŠกใ€‚_ diff --git a/themes/congo/exampleSite/content/docs/hosting-deployment/netlify-build-settings.jpg b/themes/congo/exampleSite/content/docs/hosting-deployment/netlify-build-settings.jpg new file mode 100644 index 0000000..aa15005 Binary files /dev/null and b/themes/congo/exampleSite/content/docs/hosting-deployment/netlify-build-settings.jpg differ diff --git a/themes/congo/exampleSite/content/docs/hosting-deployment/render-settings.jpg b/themes/congo/exampleSite/content/docs/hosting-deployment/render-settings.jpg new file mode 100644 index 0000000..293b3c4 Binary files /dev/null and b/themes/congo/exampleSite/content/docs/hosting-deployment/render-settings.jpg differ diff --git a/themes/congo/exampleSite/content/docs/hosting-deployment/thumb-server-down.svg b/themes/congo/exampleSite/content/docs/hosting-deployment/thumb-server-down.svg new file mode 100644 index 0000000..e1bab07 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/hosting-deployment/thumb-server-down.svg @@ -0,0 +1 @@ +server down \ No newline at end of file diff --git a/themes/congo/exampleSite/content/docs/installation/index.ja.md b/themes/congo/exampleSite/content/docs/installation/index.ja.md new file mode 100644 index 0000000..725339d --- /dev/null +++ b/themes/congo/exampleSite/content/docs/installation/index.ja.md @@ -0,0 +1,178 @@ +--- +title: "ใ‚คใƒณใ‚นใƒˆใƒผใƒซ" +date: 2020-08-16 +draft: false +description: "Congoใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซ" +summary: "ๅ…จใไฝ•ใ‚‚ใชใ„็Šถๆ…‹ใ‹ใ‚‰HugoใจCongoใ‚’ไฝฟใ„ๅง‹ใ‚ใ‚‹ๆ–นๆณ•ใ‚’็ดนไป‹ใ—ใพใ™ใ€‚ๅˆใ‚ใฆใฎๆ–นใฏใ“ใ“ใ‹ใ‚‰ๅง‹ใ‚ใ‚‹ใฎใŒๆœ€้ฉใงใ™ใ€‚" +slug: "installation" +tags: ["installation", "docs"] +--- + +Hugoใฎๆจ™ๆบ–็š„ใช[Quick Start](https://gohugo.io/getting-started/quick-start/)ใซๅพ“ใ†ใ ใ‘ใงใ€ใ™ใใซไฝฟใ„ๅง‹ใ‚ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ + +่ฉณใ—ใ„ใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ–นๆณ•ใฏไปฅไธ‹ใ‚’ใ”่ฆงใใ ใ•ใ„ใ€‚[ๆ›ดๆ–ฐใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ](#ๆ›ดๆ–ฐใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ)ใซใคใ„ใฆใ‚‚่งฃ่ชฌใ—ใฆใ„ใพใ™ใ€‚ + +## ใ‚คใƒณใ‚นใƒˆใƒผใƒซ + +ใ“ใฎๆ‰‹้ †ใ‚’่ชญใ‚ใฐใ€HugoใจCongoใ‚’ใพใฃใŸใไฝ•ใ‚‚ใชใ„็Šถๆ…‹ใ‹ใ‚‰ไฝฟใ„ๅง‹ใ‚ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ“ใฎใ‚ฌใ‚คใƒ‰ใง่ฟฐในใ‚‰ใ‚Œใฆใ„ใ‚‹ไพๅญ˜้–ขไฟ‚ใฎใปใจใ‚“ใฉใฏใ€ใ‚ใชใŸใฎใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใง้ธๆŠžใ—ใŸใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใƒžใƒใƒผใ‚ธใƒฃใ‚’ไฝฟใฃใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใงใใพใ™ใ€‚ + +### Hugoใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ + +Hugoใ‚’ไฝฟใฃใŸใ“ใจใŒใชใ„ๅ ดๅˆใฏใ€[ใ‚คใƒณใ‚นใƒˆใƒผใƒซ](https://gohugo.io/getting-started/installing)ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใ™ใงใซใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใ„ใ‚‹ใ‹ใฏใ€ `hugo version` ใ‚ณใƒžใƒณใƒ‰ใง็ขบ่ชใงใใพใ™ใ€‚ + +{{< alert >}} +CongoใฏHugoใฎๆœ€ๆ–ฐๆฉŸ่ƒฝใฎไธ€้ƒจใ‚’ๅˆฉ็”จใ—ใฆใ„ใ‚‹ใŸใ‚ใ€ **Hugoใƒใƒผใ‚ธใƒงใƒณ0.87.0** ไปฅ้™ใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ +{{< /alert >}} + +[Hugo docs](https://gohugo.io/getting-started/installing)ใซใ€ใ‚ใชใŸใฎใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ็”จใฎ่ฉณใ—ใ„ใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ‰‹้ †ใŒใ‚ใ‚Šใพใ™ใ€‚ + +### ๆ–ฐใ—ใ„ใ‚ตใ‚คใƒˆใ‚’ไฝœๆˆ + +ใ‚ณใƒžใƒณใƒ‰ `hugo new site mywebsite` ใ‚’ๅฎŸ่กŒใ—ใฆใ€ `mywebsite` ใจใ„ใ†ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซๆ–ฐใ—ใ„Hugoใ‚ตใ‚คใƒˆใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ + +ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒปใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฏๅฅฝใใชๅๅ‰ใ‚’ใคใ‘ใ‚‹ใ“ใจใŒใงใใพใ™ใŒใ€ไปฅไธ‹ใงใฏ่ชฌๆ˜ŽใฎไพฟๅฎœไธŠ `mywebsite` ใจใ„ใ†ๅๅ‰ใ‚’ไฝฟใ„ใพใ™ใ€‚ใใ‚Œไปฅๅค–ใฎๅๅ‰ใ‚’ไฝฟใ†ๅ ดๅˆใฏใ€้ฉๅฎœ็ฝฎใๆ›ใˆใฆใใ ใ•ใ„ใ€‚ + +### Congoใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ + +Congoใ‚’Hugoใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใซใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ใซใฏใ€ใ„ใใคใ‹ใฎๆ–นๆณ•ใŒใ‚ใ‚Šใพใ™ใ€‚ใ‚คใƒณใ‚นใƒˆใƒผใƒซใจใƒกใƒณใƒ†ใƒŠใƒณใ‚นใŒๆœ€ใ‚‚็ฐกๅ˜ใชใ‚‚ใฎใ‹ใ‚‰ๆœ€ใ‚‚้›ฃใ—ใ„ใ‚‚ใฎใพใงใ€ๆฌกใฎใจใŠใ‚Šใงใ™: + +- [Hugo module](#install-using-hugo) (recommended) +- [Git submodule](#install-using-git) +- [Manual file copy](#install-manually) + +ใ‚ใ‹ใ‚‰ใชใ„ๅ ดๅˆใฏใ€ _Hugo module_ ใฎๆ–นๆณ•ใ‚’้ธใ‚“ใงใใ ใ•ใ„ใ€‚ + +#### Install using Hugo + +ใ“ใฎๆ–นๆณ•ใฏใƒ†ใƒผใƒžใ‚’ๆœ€ๆ–ฐใฎ็Šถๆ…‹ใซไฟใคใฎใซๆœ€ใ‚‚ๆ—ฉใใ€็ฐกๅ˜ใงใ™ใ€‚Hugoใฏใƒขใ‚ธใƒฅใƒผใƒซใฎๅˆๆœŸๅŒ–ใจ็ฎก็†ใซ **Go** ใ‚’ไฝฟใ†ใฎใงใ€ๅ…ˆใซ้€ฒใ‚€ๅ‰ใซ `go` ใŒใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใ‚’็ขบ่ชใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + +1. [Download](https://golang.org/dl/)ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใ€Goใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใฆใใ ใ•ใ„ใ€‚ใ™ใงใซใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใ„ใ‚‹ใ‹ใฏใ€ `go version` ใ‚ณใƒžใƒณใƒ‰ใง็ขบ่ชใงใใพใ™ใ€‚ + + {{< alert >}} + HugoใŒใƒขใ‚ธใƒฅใƒผใƒซใ‚’ๆญฃใ—ใๅ‹•ไฝœใ•ใ›ใ‚‹ใŸใ‚ใซใ€ **Goใƒใƒผใ‚ธใƒงใƒณ1.12** ไปฅ้™ใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ + {{< /alert >}} + +2. Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช (ไธŠ่จ˜ใงไฝœๆˆใ—ใŸใ‚‚ใฎ)ใ‹ใ‚‰ใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใƒขใ‚ธใƒฅใƒผใƒซใ‚’ๅˆๆœŸๅŒ–ใ—ใพใ™: + + ```shell + # GitHubใงใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’็ฎก็†ใ—ใฆใ„ใ‚‹ๅ ดๅˆ + hugo mod init github.com// + + # ใƒญใƒผใ‚ซใƒซใงใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’็ฎก็†ใ—ใฆใ„ใ‚‹ๅ ดๅˆ + hugo mod init my-project + ``` + +3. Congoใ‚’่จญๅฎšใซ่ฟฝๅŠ ใ™ใ‚‹ใซใฏใ€ `config/_default/module.toml` ใƒ•ใ‚กใ‚คใƒซใ‚’ๆ–ฐ่ฆไฝœๆˆใ—ใ€ไปฅไธ‹ใ‚’่ฟฝๅŠ ใ—ใพใ™: + + ```toml + [[imports]] + path = "github.com/jpanther/congo/v2" + ``` + +4. `hugo server` ใ‚’ไฝฟ็”จใ—ใฆใ‚ตใƒผใƒใƒผใ‚’่ตทๅ‹•ใ™ใ‚‹ใจใ€ใƒ†ใƒผใƒžใŒ่‡ชๅ‹•็š„ใซใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ•ใ‚Œใพใ™ใ€‚ +5. [ใƒ†ใƒผใƒž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—](#ใƒ†ใƒผใƒž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—)ใซ้€ฒใฟใพใ™ใ€‚ + +#### Install using Git + +ใ“ใฎๆ–นๆณ•ใงใฏใ€ใƒญใƒผใ‚ซใƒซใƒžใ‚ทใƒณใซ **Git** ใŒใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใ‚’็ขบ่ชใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + +Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช๏ผˆไธŠใงไฝœๆˆใ—ใŸใ‚‚ใฎ๏ผ‰ใซ็งปๅ‹•ใ—ใ€ๆ–ฐใ—ใ `git` ใƒชใƒใ‚ธใƒˆใƒชใ‚’ๅˆๆœŸๅŒ–ใ—ใฆCongoใ‚’ใ‚ตใƒ–ใƒขใ‚ธใƒฅใƒผใƒซใจใ—ใฆ่ฟฝๅŠ ใ—ใพใ™ใ€‚ + +```bash +cd mywebsite +git init +git submodule add -b stable https://github.com/jpanther/congo.git themes/congo +``` + +[ใƒ†ใƒผใƒž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—](#ใƒ†ใƒผใƒž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—)ใซ้€ฒใฟใพใ™ใ€‚ + +#### Install manually + +1. Congoใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฎๆœ€ๆ–ฐใƒชใƒชใƒผใ‚นใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ™ใ‚‹ใ€‚ + + {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}Download from Github{{< /button >}} + +2. ใ‚ขใƒผใ‚ซใ‚คใƒ–ใ‚’่งฃๅ‡ใ—ใ€ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๅใ‚’ `congo` ใซๅค‰ๆ›ดใ—ใฆใ€Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ†…ใฎ `themes/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ็งปๅ‹•ใ—ใพใ™ใ€‚ +3. [ใƒ†ใƒผใƒž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—](#ใƒ†ใƒผใƒž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—)ใซ้€ฒใฟใพใ™ใ€‚ + +### ใƒ†ใƒผใƒž่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ— + +ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใงใ€Hugoใซใ‚ˆใฃใฆ็”Ÿๆˆใ•ใ‚ŒใŸ `config.toml` ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ‰Š้™คใ—ใพใ™ใ€‚ใƒ†ใƒผใƒžใฎ `*.toml` ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ `config/_default/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚ณใƒ”ใƒผใ—ใพใ™ใ€‚ใ“ใ‚ŒใงCongoใฎ่จญๅฎšใŒใ™ในใฆๆญฃใ—ใใชใ‚Šใ€ๅฟ…่ฆใซๅฟœใ˜ใฆCongoใ‚’็ฐกๅ˜ใซใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใงใใ‚‹ใ‚ˆใ†ใซใชใ‚Šใพใ™ใ€‚ + +{{< alert >}} +**ๆณจ่จ˜:** ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ†…ใซใ™ใงใซ `module.toml` ใƒ•ใ‚กใ‚คใƒซใŒๅญ˜ๅœจใ™ใ‚‹ๅ ดๅˆใฏไธŠๆ›ธใใ—ใชใ„ใงใใ ใ•ใ„๏ผ +{{< /alert >}} + +ใƒ†ใƒผใƒžใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ–นๆณ•ใซใ‚ˆใฃใฆใ€ใƒ†ใƒผใƒžใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฏ็•ฐใชใ‚‹ๅ ดๆ‰€ใซใ‚ใ‚Šใพใ™ใ€‚: + +- **Hugo Modules:** Hugoใฎใ‚ญใƒฃใƒƒใ‚ทใƒฅใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ€ใพใŸใฏGitHubใ‹ใ‚‰[ใ‚ณใƒ”ใƒผใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/jpanther/congo/tree/stable/config/_default)ใ—ใฆใใ ใ•ใ„ใ€‚ +- **Git submodule or Manual install:** `themes/congo/config/_default` + +ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ณใƒ”ใƒผใ—ใŸใ‚‰ใ€่จญๅฎšใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฏไปฅไธ‹ใฎใ‚ˆใ†ใซใชใฃใฆใ„ใ‚‹ใฏใšใงใ™: + +```shell +config/_default/ +โ”œโ”€ config.toml +โ”œโ”€ markup.toml +โ”œโ”€ menus.toml +โ”œโ”€ module.toml # if you installed using Hugo Modules +โ””โ”€ params.toml +``` + +{{< alert >}} +**้‡่ฆ:** Hugoใƒขใ‚ธใƒฅใƒผใƒซใ‚’ไฝฟใฃใฆCongoใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใชใ‹ใฃใŸๅ ดๅˆใฏใ€ `config.toml` ใƒ•ใ‚กใ‚คใƒซใฎๅ…ˆ้ ญใซ `theme = "congo"` ใจใ„ใ†่กŒใ‚’่ฟฝๅŠ ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ +{{< /alert >}} + +### Next steps + +ใ“ใ‚ŒใงๅŸบๆœฌ็š„ใชCongoใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซใฏๅฎŒไบ†ใงใ™ใ€‚ใƒ†ใƒผใƒžใฎ่จญๅฎšใซใคใ„ใฆใฎ่ฉณ็ดฐใฏใ€[ใฏใ˜ใ‚ใซ]({{< ref "getting-started" >}})ใ‚ปใ‚ฏใ‚ทใƒงใƒณใซ้€ฒใ‚“ใงใใ ใ•ใ„ใ€‚ + +--- + +## ๆ›ดๆ–ฐใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ + +ๆ™‚ๆŠ˜ใ€ใƒ†ใƒผใƒžใซไฟฎๆญฃใ‚’้ฉ็”จใ—ใ€ๆ–ฐใ—ใ„ๆฉŸ่ƒฝใ‚’่ฟฝๅŠ ใ—ใŸ[ๆ–ฐใ—ใ„ใƒชใƒชใƒผใ‚น](https://github.com/jpanther/congo/releases)ใŒๆŠ•็จฟใ•ใ‚Œใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฎๅค‰ๆ›ดใ‚’ๅˆฉ็”จใ™ใ‚‹ใซใฏใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใƒ†ใƒผใƒžใƒ•ใ‚กใ‚คใƒซใ‚’ๆ›ดๆ–ฐใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + +ใ“ใฎๆ–นๆณ•ใฏใ€ใƒ†ใƒผใƒžใ‚’ๆœ€ๅˆใซใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใŸใจใใซ้ธๆŠžใ—ใŸใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ–นๆณ•ใซใ‚ˆใฃใฆ็•ฐใชใ‚Šใพใ™ใ€‚ๅ„ๆ–นๆณ•ใฎๆ‰‹้ †ใฏไปฅไธ‹ใซใ‚ใ‚Šใพใ™ใ€‚ + +- [Hugo module](#update-using-hugo) +- [Git submodule](#update-using-git) +- [Manual file copy](#update-manually) + +### Update using Hugo + +Hugoใฏใƒขใ‚ธใƒฅใƒผใƒซใฎใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใ‚’ใจใฆใ‚‚็ฐกๅ˜ใซใ—ใฆใใ‚Œใพใ™ใ€‚ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ็งปๅ‹•ใ—ใฆใ€ไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ™ใ‚‹ใ ใ‘ใงใ™: + +```shell +hugo mod get -u +``` + +Hugoใฏใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซๅฟ…่ฆใชใƒขใ‚ธใƒฅใƒผใƒซใ‚’่‡ชๅ‹•็š„ใซใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใ—ใพใ™ใ€‚ใ“ใ‚Œใฏ `module.toml` ใจ `go.mod` ใƒ•ใ‚กใ‚คใƒซใ‚’ๆคœๆŸปใ™ใ‚‹ใ“ใจใง่กŒใ‚ใ‚Œใพใ™ใ€‚ใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใซๅ•้กŒใŒใ‚ใ‚‹ๅ ดๅˆใฏใ€ใ“ใ‚Œใ‚‰ใฎใƒ•ใ‚กใ‚คใƒซใŒๆญฃใ—ใ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹ใ‹็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ + +ใใฎๅพŒใ€ใ‚ตใ‚คใƒˆใ‚’ๅ†ๆง‹็ฏ‰ใ—ใ€ใ™ในใฆใŒๆœŸๅพ…้€šใ‚Šใซๅ‹•ไฝœใ™ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ + +### Update using git + +Gitใ‚ตใƒ–ใƒขใ‚ธใƒฅใƒผใƒซใฏ `git` ใ‚ณใƒžใƒณใƒ‰ใ‚’ไฝฟใฃใฆๆ›ดๆ–ฐใงใใพใ™ใ€‚ๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ™ใ‚‹ใ ใ‘ใงใ€ใƒ†ใƒผใƒžใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใŒใƒญใƒผใ‚ซใƒซใƒชใƒใ‚ธใƒˆใƒชใซใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ•ใ‚Œใพใ™: + +```shell +git submodule update --remote --merge +``` + +ใ‚ตใƒ–ใƒขใ‚ธใƒฅใƒผใƒซใฎใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใŒๅฎŒไบ†ใ—ใŸใ‚‰ใ€ใ‚ตใ‚คใƒˆใ‚’ๅ†ๆง‹็ฏ‰ใ—ใ€ใ™ในใฆใŒๆœŸๅพ…้€šใ‚Šใซๅ‹•ไฝœใ™ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ + +### Update manually + +Congoใ‚’ๆ‰‹ๅ‹•ใงๆ›ดๆ–ฐใ™ใ‚‹ใซใฏใ€ใƒ†ใƒผใƒžใฎๆœ€ๆ–ฐใ‚ณใƒ”ใƒผใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใฆใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ†…ใฎๅคใ„ใƒใƒผใ‚ธใƒงใƒณใ‚’็ฝฎใๆ›ใˆใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + +{{< alert >}} +ใƒ†ใƒผใƒžใƒ•ใ‚กใ‚คใƒซใซๅฏพใ—ใฆ่กŒใฃใŸใƒญใƒผใ‚ซใƒซใงใฎใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใฏใ€ใ“ใฎๅ‡ฆ็†ไธญใซๅคฑใ‚ใ‚Œใพใ™ใฎใงใ”ๆณจๆ„ใใ ใ•ใ„ใ€‚ +{{< /alert >}} + +1. Congoใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฎๆœ€ๆ–ฐใƒชใƒชใƒผใ‚นใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ™ใ‚‹ใ€‚ + + {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}Download from Github{{< /button >}} + +2. ใ‚ขใƒผใ‚ซใ‚คใƒ–ใ‚’่งฃๅ‡ใ—ใ€ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๅใ‚’ `congo` ใซๅค‰ๆ›ดใ—ใฆใ€Hugoใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๅ†…ใฎ `themes/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ็งปๅ‹•ใ—ใพใ™ใ€‚ใ™ในใฆใฎใƒ†ใƒผใƒžใƒ•ใ‚กใ‚คใƒซใ‚’็ฝฎใๆ›ใˆใ‚‹ใซใฏใ€ๆ—ขๅญ˜ใฎใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ไธŠๆ›ธใใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + +3. ใ‚ตใ‚คใƒˆใ‚’ๅ†ๆง‹็ฏ‰ใ—ใ€ใ™ในใฆใŒๆœŸๅพ…้€šใ‚Šใซๅ‹•ไฝœใ™ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ diff --git a/themes/congo/exampleSite/content/docs/installation/index.md b/themes/congo/exampleSite/content/docs/installation/index.md new file mode 100644 index 0000000..0904233 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/installation/index.md @@ -0,0 +1,183 @@ +--- +title: "Installation" +date: 2020-08-16 +draft: false +description: "How to install the Congo theme." +summary: "Learn how to get up and running using Hugo and Congo from a completely blank state. It's the best place to start if you're a new user." +slug: "installation" +tags: ["installation", "docs"] +--- + +Simply follow the standard Hugo [Quick Start](https://gohugo.io/getting-started/quick-start/) procedure to get up and running quickly. + +Detailed installation instructions can be found below. Instructions for [updating the theme](#installing-updates) are also available. + +## Installation + +These instructions will get you up and running using Hugo and Congo from a completely blank state. Most of the dependencies mentioned in this guide can be installed using the package manager of choice for your platform. + +### Install Hugo + +If you haven't used Hugo before, you will need to [install it onto your local machine](https://gohugo.io/getting-started/installing). You can check if it's already installed by running the command `hugo version`. + +{{< alert >}} +Make sure you are using **Hugo extended version 0.128.0** or later as the theme takes advantage of some of the latest Hugo features. +{{< /alert >}} + +You can find detailed installation instructions for your platform in the [Hugo docs](https://gohugo.io/getting-started/installing). + +### Create a new site + +Run the command `hugo new site mywebsite` to create a new Hugo site in a directory named `mywebsite`. + +Note that you can name the project directory whatever you choose, but the instructions below will assume it's named `mywebsite`. If you use a different name, be sure to substitute it accordingly. + +### Download the Congo theme + +There several different ways to install the Congo theme into your Hugo website. From easiest to most difficult to install and maintain, they are: + +- [Hugo module](#install-using-hugo) (recommended) +- [Git submodule](#install-using-git) +- [Manual file copy](#install-manually) + +If you're unsure, choose the Hugo module method. + +#### Install using Hugo + +This method is the quickest and easiest for keeping the theme up-to-date. Hugo uses **Go** to initialise and manage modules so you need to ensure you have `go` installed before proceeding. + +1. [Download](https://golang.org/dl/) and install Go. You can check if it's already installed by using the command `go version`. + + {{< alert >}} + Make sure you are using **Go version 1.12** or later as Hugo requires this for modules to work correctly. + {{< /alert >}} + +2. From your Hugo project directory (that you created above), initialise modules for your website: + + ```shell + # If you're managing your project on GitHub + hugo mod init github.com// + + # If you're managing your project locally + hugo mod init my-project + ``` + +3. Add the theme to your configuration by creating a new file `config/_default/module.toml` and adding the following: + + ```toml + [[imports]] + path = "github.com/jpanther/congo/v2" + ``` + +4. Start your server using `hugo server` and the theme will be downloaded automatically. +5. Continue to [set up the theme configuration files](#set-up-theme-configuration-files). + +#### Install using git + +For this method you'll need to ensure you have **Git** installed on your local machine. + +Change into the directory for your Hugo website (that you created above), initialise a new `git` repository and add Congo as a submodule. + +```bash +cd mywebsite +git init +git submodule add -b stable https://github.com/jpanther/congo.git themes/congo +``` + +Then continue to [set up the theme configuration files](#set-up-theme-configuration-files). + +#### Install manually + +1. Download the latest release of the theme source code. + + {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}Download from Github{{< /button >}} + +2. Extract the archive, rename the folder to `congo` and move it to the `themes/` directory inside your Hugo project's root folder. +3. Continue to [set up the theme configuration files](#set-up-theme-configuration-files). + +### Set up theme configuration files + +In the root folder of your website, delete the `hugo.toml` file that was generated by Hugo. Copy the `*.toml` config files from the theme into your `config/_default/` folder. This will ensure you have all the correct theme settings and will enable you to easily customise the theme to your needs. + +{{< alert >}} +**Note:** You should not overwrite the `module.toml` file if one already exists in your project! +{{< /alert >}} + +Depending on how you installed the theme you will find the theme config files in different places: + +- **Hugo Modules:** In the Hugo cache directory, or [download a copy](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/jpanther/congo/tree/stable/config/_default) from GitHub +- **Git submodule or Manual install:** `themes/congo/config/_default` + +Once you've copied the files, your config folder should look like this: + +```shell +config/_default/ +โ”œโ”€ hugo.toml +โ”œโ”€ languages.en.toml +โ”œโ”€ markup.toml +โ”œโ”€ menus.toml +โ”œโ”€ module.toml # if you installed using Hugo Modules +โ””โ”€ params.toml +``` + +{{< alert >}} +**Important:** If you didn't use Hugo Modules to install Congo, you must add the line `theme = "congo"` to the top of your `hugo.toml` file. +{{< /alert >}} + +### Next steps + +The basic Congo installation is now complete. Continue to the [Getting Started]({{< ref "getting-started" >}}) section to learn more about configuring the theme. + +--- + +## Installing updates + +From time to time there will be [new releases](https://github.com/jpanther/congo/releases) posted that apply fixes and add new functionality to the theme. In order to take advantage of these changes, you will need to update the theme files on your website. + +How you go about this will depend on the installation method you chose when the theme was originally installed. Instructions for each method can be found below. + +- [Hugo module](#update-using-hugo) +- [Git submodule](#update-using-git) +- [Manual file copy](#update-manually) + +### Update using Hugo + +Hugo makes updating modules super easy. Simply change into your project directory and execute the following command: + +```shell +hugo mod get -u +``` + +Hugo will automatically update any modules that are required for your project. It does this by inspecting your `module.toml` and `go.mod` files. If you have any issues with the update, check to ensure these files are still configured correctly. + +Then simply rebuild your site and check everything works as expected. + +{{< alert >}} +When updating modules, sometimes Hugo will cache an older version of the theme. If this happens, clear your local cache by using the `hugo mod clean` command and then rebuild your site. +{{< /alert >}} + +### Update using git + +Git submodules can be updated using the `git` command. Simply execute the following command and the latest version of the theme will be downloaded into your local repository: + +```shell +git submodule update --remote --merge +``` + +Once the submodule has been updated, rebuild your site and check everything works as expected. + +### Update manually + +Updating Congo manually requires you to download the latest copy of the theme and replace the old version in your project. + +{{< alert >}} +Note that any local customisations you have made to the theme files will be lost during this process. +{{< /alert >}} + +1. Download the latest release of the theme source code. + + {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}Download from Github{{< /button >}} + +2. Extract the archive, rename the folder to `congo` and move it to the `themes/` directory inside your Hugo project's root folder. You will need to overwrite the existing directory to replace all the theme files. + +3. Rebuild your site and check everything works as expected. diff --git a/themes/congo/exampleSite/content/docs/installation/index.zh-Hans.md b/themes/congo/exampleSite/content/docs/installation/index.zh-Hans.md new file mode 100644 index 0000000..e6c6a3d --- /dev/null +++ b/themes/congo/exampleSite/content/docs/installation/index.zh-Hans.md @@ -0,0 +1,173 @@ +--- +title: "ๅฎ‰่ฃ…" +date: 2020-08-16 +draft: false +description: "ๅฆ‚ไฝ•ๅฎ‰่ฃ…Congoไธป้ข˜" +summary: "ๅญฆไน ๅฆ‚ไฝ•ไปŽ0ๅผ€ๅง‹ไฝฟ็”จHugoๅ’ŒCongoใ€‚ๅฆ‚ๆžœๆ‚จๆ˜ฏๆ–ฐ็”จๆˆท๏ผŒ่ฟ™ๆ˜ฏๅผ€ๅง‹็š„ๆœ€ไฝณไฝ็ฝฎใ€‚" +slug: "installation" +tags: ["installation", "docs"] +--- + +ๅช้œ€ๆŒ‰็…งๆ ‡ๅ‡†็š„Hugo [ๅฟซ้€Ÿๅ…ฅ้—จ](https://gohugo.io/getting-started/quick-start/)ๆต็จ‹๏ผŒๅณๅฏๅฟซ้€ŸๅฏๅŠจๅ’Œ่ฟ่กŒใ€‚ + +ไธ‹้ขๆไพ›ไบ†่ฏฆ็ป†็š„ๅฎ‰่ฃ…่ฏดๆ˜Žใ€‚่ฟ˜ๆœ‰ๅ…ณไบŽ[ๆ›ดๆ–ฐไธป้ข˜](#installing-updates)็š„่ฏดๆ˜Žใ€‚ + +## ๅฎ‰่ฃ… + +ไปฅไธ‹่ฏดๆ˜Žๅฐ†ๅธฎๅŠฉๆ‚จไปŽ0ไฝฟ็”จHugoๅ’ŒCongoๅฏๅŠจๅ’Œ่ฟ่กŒใ€‚ๆญคๆŒ‡ๅ—ไธญๆๅˆฐ็š„ๅคงๅคšๆ•ฐไพ่ต–้กนๅฏไปฅไฝฟ็”จๆ‚จๅนณๅฐไธŠ้€‰ๆ‹ฉ็š„ๅŒ…็ฎก็†ๅ™จ่ฟ›่กŒๅฎ‰่ฃ…ใ€‚ + +### ๅฎ‰่ฃ…Hugo + +ๅฆ‚ๆžœๆ‚จไปฅๅ‰ๆฒกๆœ‰ไฝฟ็”จ่ฟ‡Hugo๏ผŒๆ‚จ้œ€่ฆ[ๅฐ†ๅ…ถๅฎ‰่ฃ…ๅˆฐๆœฌๅœฐ่ฎก็ฎ—ๆœบไธŠ](https://gohugo.io/getting-started/installing)ใ€‚ๆ‚จๅฏไปฅ้€š่ฟ‡่ฟ่กŒๅ‘ฝไปค `hugo version` ๆฅๆฃ€ๆŸฅๆ˜ฏๅฆๅทฒ็ปๅฎ‰่ฃ…ใ€‚ + +{{< alert >}} +็กฎไฟๆ‚จไฝฟ็”จ็š„ๆ˜ฏ **Hugo็‰ˆๆœฌ0.87.0** ๆˆ–ๆ›ด้ซ˜็‰ˆๆœฌ๏ผŒๅ› ไธบ่ฏฅไธป้ข˜ๅˆฉ็”จไบ†ไธ€ไบ›ๆœ€ๆ–ฐ็š„HugoๅŠŸ่ƒฝใ€‚ +{{< /alert >}} + +ๆ‚จๅฏไปฅๅœจ[Hugoๆ–‡ๆกฃ](https://gohugo.io/getting-started/installing)ไธญๆ‰พๅˆฐๆœ‰ๅ…ณๆ‚จๅนณๅฐ็š„่ฏฆ็ป†ๅฎ‰่ฃ…่ฏดๆ˜Žใ€‚ + +### ๅˆ›ๅปบๆ–ฐ็ซ™็‚น + +่ฟ่กŒๅ‘ฝไปค `hugo new site mywebsite` ๅœจๅไธบ `mywebsite` ็š„็›ฎๅฝ•ไธญๅˆ›ๅปบไธ€ไธชๆ–ฐ็š„Hugo็ซ™็‚นใ€‚ + +่ฏทๆณจๆ„๏ผŒๆ‚จๅฏไปฅๅฐ†้กน็›ฎ็›ฎๅฝ•ๅ‘ฝๅไธบไปปไฝ•ๆ‚จ้€‰ๆ‹ฉ็š„ๅ็งฐ๏ผŒไฝ†ไธ‹้ข็š„่ฏดๆ˜Žๅฐ†ๅ‡ๅฎšๅ…ถๅ็งฐไธบ `mywebsite`ใ€‚ๅฆ‚ๆžœไฝฟ็”จๅ…ถไป–ๅ็งฐ๏ผŒ่ฏท็กฎไฟ็›ธๅบ”ๅœฐ่ฟ›่กŒๆ›ฟๆขใ€‚ + +### ไธ‹่ฝฝCongoไธป้ข˜ + +ๆœ‰ๅ‡ ็งไธๅŒ็š„ๆ–นๆณ•ๅฏไปฅๅฐ†Congoไธป้ข˜ๅฎ‰่ฃ…ๅˆฐๆ‚จ็š„Hugo็ฝ‘็ซ™ไธญใ€‚ไปŽๆœ€็ฎ€ๅ•ๅˆฐๆœ€้šพๅฎ‰่ฃ…ๅ’Œ็ปดๆŠค็š„ๆ–นๅผ๏ผŒๅฎƒไปฌๅˆ†ๅˆซๆ˜ฏ๏ผš + +- [Hugoๆจกๅ—](#ไฝฟ็”จhugoๅฎ‰่ฃ…)๏ผˆๆŽจ่๏ผ‰ +- [Gitๅญๆจกๅ—](#ไฝฟ็”จgitๅฎ‰่ฃ…) +- [ๆ‰‹ๅŠจๆ–‡ไปถๅคๅˆถ](#ๆ‰‹ๅŠจๅฎ‰่ฃ…) + +ๅฆ‚ๆžœไธ็กฎๅฎš๏ผŒ่ฏท้€‰ๆ‹ฉHugoๆจกๅ—ๆ–นๆณ•ใ€‚ + +#### ไฝฟ็”จHugoๅฎ‰่ฃ… + +่ฟ™็งๆ–นๆณ•ๆ˜ฏไฟๆŒไธป้ข˜ๆœ€ๆ–ฐ็š„ๆœ€ๅฟซๆœ€็ฎ€ๅ•็š„ๆ–นๆณ•ใ€‚Hugoไฝฟ็”จ **Go** ๆฅๅˆๅง‹ๅŒ–ๅ’Œ็ฎก็†ๆจกๅ—๏ผŒๅ› ๆญคๅœจ็ปง็ปญไน‹ๅ‰๏ผŒๆ‚จ้œ€่ฆ็กฎไฟๅทฒๅฎ‰่ฃ… `go`ใ€‚ + +1. [ไธ‹่ฝฝ](https://golang.org/dl/)ๅนถๅฎ‰่ฃ…Goใ€‚ๆ‚จๅฏไปฅ้€š่ฟ‡ไฝฟ็”จๅ‘ฝไปค `go version` ๆฅๆฃ€ๆŸฅๆ˜ฏๅฆๅทฒๅฎ‰่ฃ…ใ€‚ + + {{< alert >}} + ็กฎไฟๆ‚จไฝฟ็”จ็š„ๆ˜ฏ **Go็‰ˆๆœฌ1.12** ๆˆ–ๆ›ด้ซ˜็‰ˆๆœฌ๏ผŒๅ› ไธบHugo้œ€่ฆ่ฟ™ไธช็‰ˆๆœฌไปฅไฝฟๆจกๅ—ๆญฃๅธธๅทฅไฝœใ€‚ + {{< /alert >}} + +2. ไปŽHugo้กน็›ฎ็›ฎๅฝ•๏ผˆๆ‚จไธŠ้ขๅˆ›ๅปบ็š„็›ฎๅฝ•๏ผ‰ไธญ๏ผŒไธบๆ‚จ็š„็ฝ‘็ซ™ๅˆๅง‹ๅŒ–ๆจกๅ—๏ผš + + ```shell + # ๅฆ‚ๆžœๆ‚จๅœจGitHubไธŠ็ฎก็†้กน็›ฎ + hugo mod init github.com// + + # ๅฆ‚ๆžœๆ‚จๅœจๆœฌๅœฐ็ฎก็†้กน็›ฎ + hugo mod init my-project + ``` + +3. ้€š่ฟ‡ๅˆ›ๅปบไธ€ไธชๆ–ฐๆ–‡ไปถ `config/_default/module.toml` ๅนถๆทปๅŠ ไปฅไธ‹ๅ†…ๅฎน๏ผŒๅฐ†ไธป้ข˜ๆทปๅŠ ๅˆฐ้…็ฝฎไธญ๏ผš + + ```toml + [[imports]] + path = "github.com/jpanther/congo/v2" + ``` + +4. ไฝฟ็”จ `hugo server` ๅฏๅŠจๆ‚จ็š„ๆœๅŠกๅ™จ๏ผŒไธป้ข˜ๅฐ†่‡ชๅŠจไธ‹่ฝฝใ€‚ +5. ็ปง็ปญ [่ฎพ็ฝฎไธป้ข˜้…็ฝฎๆ–‡ไปถ](#่ฎพ็ฝฎไธป้ข˜้…็ฝฎๆ–‡ไปถ)ใ€‚ + +#### ไฝฟ็”จGitๅฎ‰่ฃ… + +ๅฏนไบŽ่ฟ™็งๆ–นๆณ•๏ผŒๆ‚จ้œ€่ฆ็กฎไฟๅœจๆœฌๅœฐ่ฎก็ฎ—ๆœบไธŠๅฎ‰่ฃ…ไบ† **Git**ใ€‚ + +ๅˆ‡ๆขๅˆฐๆ‚จ็š„Hugo็ฝ‘็ซ™็›ฎๅฝ•๏ผˆไธŠ้ขๅˆ›ๅปบ็š„็›ฎๅฝ•๏ผ‰๏ผŒๅˆๅง‹ๅŒ–ไธ€ไธชๆ–ฐ็š„ `git` ๅญ˜ๅ‚จๅบ“ๅนถๅฐ†ๅˆšๆžœๆทปๅŠ ไธบๅญๆจกๅ—ใ€‚ + +```bash +cd mywebsite +git init +git submodule add -b stable https://github.com/jpanther/congo.git themes/congo +``` + +็„ถๅŽ็ปง็ปญ [่ฎพ็ฝฎไธป้ข˜้…็ฝฎๆ–‡ไปถ](#่ฎพ็ฝฎไธป้ข˜้…็ฝฎๆ–‡ไปถ)ใ€‚ + +### ่ฎพ็ฝฎไธป้ข˜้…็ฝฎๆ–‡ไปถ + +ๅœจๆ‚จ็š„็ฝ‘็ซ™ๆ น็›ฎๅฝ•ไธญ๏ผŒๅˆ ้™ค็”ฑHugo็”Ÿๆˆ็š„ `config.toml` ๆ–‡ไปถใ€‚ๅฐ†ไธป้ข˜ไธญ็š„ `*.toml` ้…็ฝฎๆ–‡ไปถๅคๅˆถๅˆฐๆ‚จ็š„ `config/_default/` ๆ–‡ไปถๅคนไธญใ€‚่ฟ™ๅฐ†็กฎไฟๆ‚จๅ…ทๆœ‰ๆ‰€ๆœ‰ๆญฃ็กฎ็š„ไธป้ข˜่ฎพ็ฝฎ๏ผŒๅนถไฝฟๆ‚จ่ƒฝๅคŸ่ฝปๆพๅœฐๆ นๆฎ้œ€่ฆ่‡ชๅฎšไน‰ไธป้ข˜ใ€‚ + +{{< alert >}} +**ๆณจๆ„๏ผš** ๅฆ‚ๆžœๆ‚จ็š„้กน็›ฎไธญๅทฒๅญ˜ๅœจ `module.toml` ๆ–‡ไปถ๏ผŒๅˆ™ไธๅบ”่ฆ†็›–ๅฎƒ๏ผ +{{< /alert >}} + +ๆ นๆฎๆ‚จๅฎ‰่ฃ…ไธป้ข˜็š„ๆ–นๅผ๏ผŒๆ‚จๅฐ†ๅœจไธๅŒ็š„ไฝ็ฝฎๆ‰พๅˆฐไธป้ข˜้…็ฝฎๆ–‡ไปถ๏ผš + +- **Hugoๆจกๅ—๏ผš** ๅœจHugo็ผ“ๅญ˜็›ฎๅฝ•ไธญ๏ผŒๆˆ–่€…ไปŽGitHub[ไธ‹่ฝฝไธ€ไปฝๅ‰ฏๆœฌ](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/jpanther/congo/tree/stable/config/_default) +- **Gitๅญๆจกๅ—ๆˆ–ๆ‰‹ๅŠจๅฎ‰่ฃ…๏ผš** `themes/congo/config/_default` + +ๅคๅˆถๆ–‡ไปถๅŽ๏ผŒๆ‚จ็š„้…็ฝฎๆ–‡ไปถๅคนๅบ”ๅฆ‚ไธ‹ๆ‰€็คบ๏ผš + +```shell +config/_default/ +โ”œโ”€ config.toml +โ”œโ”€ markup.toml +โ”œโ”€ menus.toml +โ”œโ”€ module.toml # ๅฆ‚ๆžœไฝฟ็”จHugoๆจกๅ—ๅฎ‰่ฃ… +โ””โ”€ params.toml +``` + +{{< alert >}} +**้‡่ฆ๏ผš** ๅฆ‚ๆžœๆ‚จไธๆ˜ฏไฝฟ็”จHugoๆจกๅ—็š„ๆ–นๆณ•ๅฎ‰่ฃ…Congo๏ผŒๅˆ™ๅฟ…้กปๅœจๆ‚จ็š„ `config.toml` ๆ–‡ไปถ้กถ้ƒจๆทปๅŠ  `theme = "congo"` ่ฟ™ไธ€่กŒใ€‚ +{{< /alert >}} + +### ไธ‹ไธ€ๆญฅ + +ๅŸบๆœฌ็š„ๅˆšๆžœๅฎ‰่ฃ…็Žฐๅœจๅทฒ็ปๅฎŒๆˆใ€‚็ปง็ปญๆŸฅ็œ‹ [ๅ…ฅ้—จ](#ๅ…ฅ้—จ) ้ƒจๅˆ†๏ผŒไบ†่งฃๆœ‰ๅ…ณ้…็ฝฎไธป้ข˜็š„ๆ›ดๅคšไฟกๆฏใ€‚ + +--- + +## ๅฎ‰่ฃ…ๆ›ดๆ–ฐ + +ๆˆ‘ไปฌไธๆ—ถไผšๅ‘ๅธƒ[ๆ–ฐ็š„็‰ˆๆœฌ](https://github.com/jpanther/congo/releases)๏ผŒๅ…ถไธญๅŒ…ๅซๅฏนไธป้ข˜็š„ไฟฎๅคๅ’Œๆ–ฐๅŠŸ่ƒฝใ€‚ไธบไบ†ๅˆฉ็”จ่ฟ™ไบ›ๆ›ดๆ”น๏ผŒๆ‚จ้œ€่ฆๆ›ดๆ–ฐ็ฝ‘็ซ™ไธŠ็š„ไธป้ข˜ๆ–‡ไปถใ€‚ + +ๆ‚จๆ‰ง่กŒๆญคๆ“ไฝœ็š„ๆ–นๅผๅฐ†ๅ–ๅ†ณไบŽไธป้ข˜ๆœ€ๅˆๅฎ‰่ฃ…ๆ—ถ้€‰ๆ‹ฉ็š„ๅฎ‰่ฃ…ๆ–นๆณ•ใ€‚ไธ‹้ขๆ˜ฏๆฏ็งๆ–นๆณ•็š„่ฏดๆ˜Žใ€‚ + +- [Hugoๆจกๅ—](#ไฝฟ็”จHugoๆ›ดๆ–ฐ) +- [Gitๅญๆจกๅ—](#ไฝฟ็”จGitๆ›ดๆ–ฐ) +- [ๆ‰‹ๅŠจๆ–‡ไปถๅคๅˆถ](#ๆ‰‹ๅŠจๆ›ดๆ–ฐ) + +### ไฝฟ็”จHugoๆ›ดๆ–ฐ + +Hugoไฝฟๆ›ดๆ–ฐๆจกๅ—ๅ˜ๅพ—้žๅธธๅฎนๆ˜“ใ€‚ๅช้œ€ๅˆ‡ๆขๅˆฐ้กน็›ฎ็›ฎๅฝ•ๅนถๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผš + +```shell +hugo mod get -u +``` + +Hugoๅฐ†่‡ชๅŠจๆ›ดๆ–ฐ้กน็›ฎๆ‰€้œ€็š„ไปปไฝ•ๆจกๅ—ใ€‚ๅฎƒ้€š่ฟ‡ๆฃ€ๆŸฅๆ‚จ็š„ `module.toml` ๅ’Œ `go.mod` ๆ–‡ไปถๆฅๅฎŒๆˆใ€‚ๅฆ‚ๆžœๆ›ดๆ–ฐๆ—ถๅ‡บ็Žฐไปปไฝ•้—ฎ้ข˜๏ผŒ่ฏทๆฃ€ๆŸฅ่ฟ™ไบ›ๆ–‡ไปถๆ˜ฏๅฆไป็„ถๆญฃ็กฎ้…็ฝฎใ€‚ + +็„ถๅŽๅช้œ€้‡ๆ–ฐๆž„ๅปบๆ‚จ็š„็ซ™็‚น๏ผŒๅนถๆฃ€ๆŸฅไธ€ๅˆ‡ๆ˜ฏๅฆๆŒ‰้ข„ๆœŸๅทฅไฝœใ€‚ + +{{< alert >}} +ๅœจๆ›ดๆ–ฐๆจกๅ—ๆ—ถ๏ผŒๆœ‰ๆ—ถHugoไผš็ผ“ๅญ˜ไธป้ข˜็š„่พƒๆ—ง็‰ˆๆœฌใ€‚ๅฆ‚ๆžœๅ‘็”Ÿ่ฟ™็งๆƒ…ๅ†ต๏ผŒ่ฏทไฝฟ็”จ `hugo mod clean` ๅ‘ฝไปคๆธ…้™คๆœฌๅœฐ็ผ“ๅญ˜๏ผŒ็„ถๅŽ้‡ๆ–ฐๆž„ๅปบๆ‚จ็š„็ซ™็‚นใ€‚ +{{< /alert >}} + +### ไฝฟ็”จGitๆ›ดๆ–ฐ + +ๅฏไปฅไฝฟ็”จ `git` ๅ‘ฝไปคๆ›ดๆ–ฐGitๅญๆจกๅ—ใ€‚ๅช้œ€ๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผŒๆœ€ๆ–ฐ็‰ˆๆœฌ็š„ไธป้ข˜ๅฐ†่ขซไธ‹่ฝฝๅˆฐๆœฌๅœฐๅญ˜ๅ‚จๅบ“ไธญ๏ผš + +```shell +git submodule update --remote --merge +``` + +ไธ€ๆ—ฆๅญๆจกๅ—ๅทฒๆ›ดๆ–ฐ๏ผŒ้‡ๆ–ฐๆž„ๅปบๆ‚จ็š„็ซ™็‚นๅนถๆฃ€ๆŸฅไธ€ๅˆ‡ๆ˜ฏๅฆๆŒ‰้ข„ๆœŸๅทฅไฝœใ€‚ + +### ๆ‰‹ๅŠจๆ›ดๆ–ฐ + +ๆ‰‹ๅŠจๆ›ดๆ–ฐๅˆšๆžœ้œ€่ฆๆ‚จไธ‹่ฝฝไธป้ข˜็š„ๆœ€ๆ–ฐๅ‰ฏๆœฌ๏ผŒๅนถๆ›ฟๆข้กน็›ฎไธญ็š„ๆ—ง็‰ˆๆœฌใ€‚ + +{{< alert >}} +่ฏทๆณจๆ„๏ผŒๅœจๆญค่ฟ‡็จ‹ไธญ๏ผŒๆ‚จๅฏนไธป้ข˜ๆ–‡ไปถ็š„ไปปไฝ•ๆœฌๅœฐ่‡ชๅฎšไน‰ๅฐ†ไธขๅคฑใ€‚ +{{< /alert >}} + +1. ไธ‹่ฝฝไธป้ข˜ๆบไปฃ็ ็š„ๆœ€ๆ–ฐๅ‘ๅธƒ็‰ˆๆœฌใ€‚ + + {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}ไปŽGithubไธ‹่ฝฝ{{< /button >}} + +2. ่งฃๅŽ‹็ผฉๅญ˜ๆกฃ๏ผŒๅฐ†ๆ–‡ไปถๅคน้‡ๅ‘ฝๅไธบ `congo`๏ผŒๅนถๅฐ†ๅ…ถ็งปๅŠจๅˆฐHugo้กน็›ฎๆ นๆ–‡ไปถๅคนๅ†…็š„ `themes/` ็›ฎๅฝ•ใ€‚ๆ‚จ้œ€่ฆ่ฆ†็›–็Žฐๆœ‰็›ฎๅฝ•ไปฅๆ›ฟๆขๆ‰€ๆœ‰ไธป้ข˜ๆ–‡ไปถใ€‚ + +3. ้‡ๆ–ฐๆž„ๅปบๆ‚จ็š„็ซ™็‚น diff --git a/themes/congo/exampleSite/content/docs/installation/thumb-cloud-files.svg b/themes/congo/exampleSite/content/docs/installation/thumb-cloud-files.svg new file mode 100644 index 0000000..545fd91 --- /dev/null +++ b/themes/congo/exampleSite/content/docs/installation/thumb-cloud-files.svg @@ -0,0 +1 @@ +cloud_files \ No newline at end of file diff --git a/themes/congo/exampleSite/content/docs/partials/fathom-analytics.jpg b/themes/congo/exampleSite/content/docs/partials/fathom-analytics.jpg new file mode 100644 index 0000000..ed862c6 Binary files /dev/null and b/themes/congo/exampleSite/content/docs/partials/fathom-analytics.jpg differ diff --git a/themes/congo/exampleSite/content/docs/partials/index.ja.md b/themes/congo/exampleSite/content/docs/partials/index.ja.md new file mode 100644 index 0000000..469edac --- /dev/null +++ b/themes/congo/exampleSite/content/docs/partials/index.ja.md @@ -0,0 +1,99 @@ +--- +title: "ใƒ‘ใƒผใ‚ทใƒฃใƒซ" +date: 2020-08-10 +draft: false +description: "Congoใงๅˆฉ็”จใงใใ‚‹ใ™ในใฆใฎใƒ‘ใƒผใ‚ทใƒฃใƒซใซใคใ„ใฆ" +summary: "ใƒ‘ใƒผใ‚ทใƒฃใƒซใฏใ€ใ‚ขใƒŠใƒชใƒ†ใ‚ฃใ‚ฏใ‚นใ€ใ‚ณใƒกใƒณใƒˆใ€ใƒ•ใ‚กใƒ“ใ‚ณใƒณใ€ใ‚ซใ‚นใ‚ฟใƒ ใ‚นใ‚ฏใƒชใƒ—ใƒˆใชใฉใฎ็‰นๅˆฅใชๆฉŸ่ƒฝใ‚’ใƒ†ใƒผใƒžใซ่ฟฝๅŠ ใ™ใ‚‹ใŸใ‚ใซไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚" +slug: "partials" +tags: ["partials", "analytics", "privacy", "comments", "favicons", "icon", "docs"] +--- + +## ใ‚ขใƒŠใƒชใƒ†ใ‚ฃใ‚ฏใ‚น + +CongoใฏFathom AnalyticsใจGoogle Analyticsใ‚’ใƒ“ใƒซใƒˆใ‚คใƒณใงใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใพใ™ใ€‚Fathomใฏใƒฆใƒผใ‚ถใƒผใฎใƒ—ใƒฉใ‚คใƒใ‚ทใƒผใ‚’ๅฐŠ้‡ใ™ใ‚‹Google Analyticsใฎๆœ‰ๆ–™ไปฃๆ›ฟใ‚ตใƒผใƒ“ใ‚นใงใ™ใ€‚ใ”่ˆˆๅ‘ณใฎใ‚ใ‚‹ๆ–นใฏใ€ใ“ใฎใ‚ขใƒ•ใ‚ฃใƒชใ‚จใ‚คใƒˆใƒชใƒณใ‚ฏใ‹ใ‚‰[10ใƒ‰ใƒซใฎใ‚ฏใƒฌใ‚ธใƒƒใƒˆ](https://usefathom.com/ref/RLAJSV)ใ‚’ๅ—ใ‘ๅ–ใฃใฆใใ ใ•ใ„ใ€‚ + +### Fathom Analytics + +Fathom Analyticsใฎใ‚ตใƒใƒผใƒˆใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใซใฏใ€ `config/_default/params.toml` ใƒ•ใ‚กใ‚คใƒซใซFathomใ‚ตใ‚คใƒˆใ‚ณใƒผใƒ‰ใ‚’่จ˜่ฟฐใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚Fathomใฎใ‚ซใ‚นใ‚ฟใƒ ใƒ‰ใƒกใ‚คใƒณๆฉŸ่ƒฝใ‚’ไฝฟ็”จใ—ใ€ใƒ‰ใƒกใ‚คใƒณใ‹ใ‚‰ใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚’ๆไพ›ใ—ใŸใ„ๅ ดๅˆใฏใ€ `domain` ่จญๅฎšๅ€คใ‚’่ฟฝๅŠ ใงๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ `domain` ใฎๅ€คใ‚’ๆŒ‡ๅฎšใ—ใชใ„ๅ ดๅˆใ€ใ‚นใ‚ฏใƒชใƒ—ใƒˆใฏFathom DNSใ‹ใ‚‰็›ดๆŽฅ่ชญใฟ่พผใพใ‚Œใพใ™ใ€‚ + +```toml +# config/_default/params.toml + +[fathomAnalytics] + site = "ABC12345" + domain = "llama.yoursite.com" +``` + +### Google Analytics + +Google Analyticsใฎใ‚ตใƒใƒผใƒˆใฏๅ†…้ƒจใฎHugoใƒ‘ใƒผใ‚ทใƒฃใƒซใ‚’้€šใ—ใฆๆไพ›ใ•ใ‚Œใพใ™ใ€‚ `config/_default/config.toml` ใƒ•ใ‚กใ‚คใƒซใซ `googleAnalytics` ใ‚ญใƒผใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใ ใ‘ใงใ€ใ‚นใ‚ฏใƒชใƒ—ใƒˆใŒ่‡ชๅ‹•็š„ใซ่ฟฝๅŠ ใ•ใ‚Œใพใ™ใ€‚ + +ๆไพ›ใ•ใ‚ŒใŸ่จญๅฎšๅ€คใซๅŸบใฅใ„ใฆใ€ใƒใƒผใ‚ธใƒงใƒณ3๏ผˆanalytics.js๏ผ‰ใจใƒใƒผใ‚ธใƒงใƒณ4๏ผˆgtag.js๏ผ‰ใฎไธกๆ–นใŒใ‚ตใƒใƒผใƒˆใ•ใ‚Œใฆใ„ใพใ™: + +```toml +# config/_default/config.toml + +# version 3 +googleAnalytics = "UA-PROPERTY_ID" +# version 4 +googleAnalytics = "G-MEASUREMENT_ID" +``` + +### Custom analytics providers + +ๅˆฅใฎใ‚ขใƒŠใƒชใƒ†ใ‚ฃใ‚ฏใ‚นใƒ—ใƒญใƒใ‚คใƒ€ใƒผใ‚’ไฝฟใ„ใŸใ„ๅ ดๅˆใฏใ€ใ‚ขใƒŠใƒชใƒ†ใ‚ฃใ‚ฏใ‚นใƒ‘ใƒผใ‚ทใƒฃใƒซใ‚’ใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใ—ใฆ็‹ฌ่‡ชใฎใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚’ๆไพ›ใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ `layouts/partials/analytics.html` ใƒ•ใ‚กใ‚คใƒซใ‚’ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซไฝœๆˆใ™ใ‚‹ใ ใ‘ใงใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎ `` ใซ่‡ชๅ‹•็š„ใซใ‚คใƒณใ‚ฏใƒซใƒผใƒ‰ใ•ใ‚Œใพใ™ใ€‚ + +## ใ‚ณใƒกใƒณใƒˆ + +่จ˜ไบ‹ใซใ‚ณใƒกใƒณใƒˆๆฉŸ่ƒฝใ‚’่ฟฝๅŠ ใ™ใ‚‹ใŸใ‚ใซใ€Congoใฏๅ„่จ˜ไบ‹ใƒšใƒผใ‚ธใฎใƒ™ใƒผใ‚นใซๅซใพใ‚Œใ‚‹ใ‚ณใƒกใƒณใƒˆใƒ‘ใƒผใ‚ทใƒฃใƒซใฎใ‚ตใƒใƒผใƒˆใ‚’ๅซใ‚“ใงใ„ใพใ™ใ€‚ `layouts/partials/comments.html` ใ‚’ๆไพ›ใ™ใ‚‹ใ ใ‘ใงใ€้ธๆŠžใ—ใŸใ‚ณใƒกใƒณใƒˆใ‚’่กจ็คบใ™ใ‚‹ใŸใ‚ใซๅฟ…่ฆใชใ‚ณใƒผใƒ‰ใŒๅซใพใ‚Œใพใ™ใ€‚ + +็ต„ใฟ่พผใฟใฎHugo Disqusใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’ไฝฟ็”จใ™ใ‚‹ใ‹ใ€็‹ฌ่‡ชใฎใ‚ซใ‚นใ‚ฟใƒ ใ‚ณใƒผใƒ‰ใ‚’ๆไพ›ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚่ฉณใ—ใใฏ[Hugo docs](https://gohugo.io/content-management/comments/)ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚ + +ใ‚ณใƒกใƒณใƒˆใ‚’่กจ็คบใ™ใ‚‹ๅ ดๆ‰€ใ‚’ใ‚ˆใ‚Š็ดฐใ‹ใๅˆถๅพกใ™ใ‚‹ใŸใ‚ใซ `showComments` ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚ใ“ใฎๅ€คใฏ `params.toml` ใฎ[ใƒ†ใƒผใƒžใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผ]({{< ref "configuration#ใƒ†ใƒผใƒžใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผ" >}})ใจใ—ใฆ่จญๅฎšใ™ใ‚‹ใ‹ใ€[ใƒ•ใƒญใƒณใƒˆใƒžใ‚ฟใƒผ]({{< ref "front-matter" >}})ใซๅซใ‚ใ‚‹ใ“ใจใง่จ˜ไบ‹ใ”ใจใซ่จญๅฎšใ™ใ‚‹ใ‹ใ€้ธใถใ“ใจใŒใงใใพใ™ใ€‚ใ“ใฎใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใง `false` ใซ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹ใฎใงใ€ใ‚ณใƒกใƒณใƒˆใ‚’่กจ็คบใ•ใ›ใ‚‹ใซใฏใ“ใ‚Œใ‚‰ใฎๅ ดๆ‰€ใฎใ„ใšใ‚Œใ‹ใง `true` ใซ่จญๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ + +## ใƒ•ใ‚กใƒ“ใ‚ณใƒณ + +Congoใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใง็ฉบ็™ฝใฎใƒ•ใ‚กใƒ“ใ‚ณใƒณใ‚ปใƒƒใƒˆใ‚’ๆไพ›ใ—ใพใ™ใŒใ€ใใ‚Œใ‚’ไธŠๆ›ธใใ™ใ‚‹ใŸใ‚ใซ็‹ฌ่‡ชใฎใ‚ขใ‚ปใƒƒใƒˆใ‚’่จญๅฎšใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ๆ–ฐใ—ใ„ใƒ•ใ‚กใƒ“ใ‚ณใƒณใ‚’ๅ…ฅๆ‰‹ใ™ใ‚‹ๆœ€ใ‚‚็ฐกๅ˜ใชๆ–นๆณ•ใฏใ€[favicon.io](https://favicon.io)ใฎใ‚ˆใ†ใชใ‚ตใƒผใƒ‰ใƒ‘ใƒผใƒ†ใ‚ฃใƒ—ใƒญใƒใ‚คใƒ€ใƒผใ‚’ไฝฟใฃใฆ็”Ÿๆˆใ™ใ‚‹ใ“ใจใงใ™ใ€‚ + +ใ‚ขใ‚คใ‚ณใƒณใ‚ขใ‚ปใƒƒใƒˆใฏใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎ `static/` ใซ็›ดๆŽฅ้…็ฝฎใ—ใ€ไปฅไธ‹ใฎใƒชใ‚นใƒˆใซๅพ“ใฃใฆๅๅ‰ใ‚’ไป˜ใ‘ใฆใใ ใ•ใ„ใ€‚[favicon.io](https://favicon.io)ใ‚’ไฝฟ็”จใ™ใ‚‹ๅ ดๅˆใ€ใ“ใ‚Œใ‚‰ใฏ่‡ชๅ‹•็š„ใซ็”Ÿๆˆใ•ใ‚Œใ‚‹ใƒ•ใ‚กใ‚คใƒซๅใซใชใ‚Šใพใ™ใŒใ€ๅฟ…่ฆใซๅฟœใ˜ใฆ็‹ฌ่‡ชใฎใ‚ขใ‚ปใƒƒใƒˆใ‚’ๆไพ›ใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ + +```shell +static/ +โ”œโ”€ android-chrome-192x192.png +โ”œโ”€ android-chrome-512x512.png +โ”œโ”€ apple-touch-icon.png +โ”œโ”€ favicon-16x16.png +โ”œโ”€ favicon-32x32.png +โ”œโ”€ favicon.ico +โ””โ”€ site.webmanifest +``` + +ใพใŸใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒ•ใ‚กใƒ“ใ‚ณใƒณใฎๅ‹•ไฝœใ‚’ๅฎŒๅ…จใซใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ `layouts/partials/favicons.html` ใƒ•ใ‚กใ‚คใƒซใ‚’ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซๆไพ›ใ™ใ‚‹ใ ใ‘ใงใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใ‚ขใ‚ปใƒƒใƒˆใฎไปฃใ‚ใ‚Šใซ `` ใซๆณจๅ…ฅใ•ใ‚Œใพใ™ใ€‚ + +## ใ‚ขใ‚คใ‚ณใƒณ + +[ใ‚ทใƒงใƒผใƒˆใ‚ณใƒผใƒ‰ - ใ‚ขใ‚คใ‚ณใƒณ]({{< ref "shortcodes#ใ‚ขใ‚คใ‚ณใƒณ" >}})ใจๅŒๆง˜ใซใ€Congoใฎ `icon.html` ใƒ‘ใƒผใ‚ทใƒฃใƒซใ‚’ไฝฟใ†ใ“ใจใงใ€็‹ฌ่‡ชใฎใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚„ใƒ‘ใƒผใ‚ทใƒฃใƒซใซใ‚ขใ‚คใ‚ณใƒณใ‚’ๅซใ‚ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ“ใฎใƒ‘ใƒผใ‚ทใƒฃใƒซใซใฏใ‚ขใ‚คใ‚ณใƒณใฎๅๅ‰ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ + +**ไพ‹:** + +```go + {{ partial "icon.html" "github" }} +``` + +ใ‚ขใ‚คใ‚ณใƒณใฏHugo Pipesใ‚’ไฝฟใฃใฆ้…็ฝฎใ•ใ‚Œใ‚‹ใŸใ‚ใ€้žๅธธใซๆŸ”่ปŸๆ€งใŒใ‚ใ‚Šใพใ™ใ€‚Congoใซใฏใ€ใ‚ฝใƒผใ‚ทใƒฃใƒซใ€ใƒชใƒณใ‚ฏใ€ใใฎไป–ใฎ็›ฎ็š„ใฎใŸใ‚ใซๅคšใใฎใƒ“ใƒซใƒˆใ‚คใƒณใ‚ขใ‚คใ‚ณใƒณใŒๅซใพใ‚Œใฆใ„ใพใ™ใ€‚ใ‚ตใƒใƒผใƒˆใ•ใ‚Œใฆใ„ใ‚‹ใ‚ขใ‚คใ‚ณใƒณใฎๅฎŒๅ…จใชใƒชใ‚นใƒˆใฏใ€[ใ‚ตใƒณใƒ—ใƒซ - ใ‚ขใ‚คใ‚ณใƒณ]({{< ref "samples/icons" >}}) ใƒšใƒผใ‚ธใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„ใ€‚ + +ใ‚ซใ‚นใ‚ฟใƒ ใ‚ขใ‚คใ‚ณใƒณใฏใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎ `assets/icons/` ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ็‹ฌ่‡ชใฎใ‚ขใ‚คใ‚ณใƒณใ‚ขใ‚ปใƒƒใƒˆใ‚’ๆไพ›ใ™ใ‚‹ใ“ใจใง่ฟฝๅŠ ใงใใพใ™ใ€‚ใ‚ขใ‚คใ‚ณใƒณใฏๆ‹กๅผตๅญ `.svg` ใ‚’้™คใ„ใŸSVGใƒ•ใ‚กใ‚คใƒซๅใงใƒ‘ใƒผใ‚ทใƒฃใƒซใ‹ใ‚‰ๅ‚็…งใงใใพใ™ใ€‚ + +## Extensions + +CongoใฏๅŸบๆœฌๆฉŸ่ƒฝใฎๆ‹กๅผตใ‚’ๅฏ่ƒฝใซใ™ใ‚‹ๅคšใใฎใƒ‘ใƒผใ‚ทใƒฃใƒซใ‚’ๆไพ›ใ—ใฆใ„ใพใ™ใ€‚ + +### ่จ˜ไบ‹ใƒชใƒณใ‚ฏ + +่จ˜ไบ‹ใƒชใƒณใ‚ฏใฎๅพŒใซ่ฟฝๅŠ ใฎใ‚ณใƒผใƒ‰ใ‚’ๆŒฟๅ…ฅใ—ใŸใ„ๅ ดๅˆใฏใ€ `layouts/partials/extend-article-link.html` ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใฆใใ ใ•ใ„ใ€‚ใ“ใ‚Œใฏใ€็‰นๅฎšใฎ่จ˜ไบ‹ใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚’ใƒใ‚คใƒฉใ‚คใƒˆใ™ใ‚‹ใŸใ‚ใซไฝฟ็”จใงใใ‚‹[`ใƒใƒƒใ‚ธ`]({{< ref "shortcodes#ใƒใƒƒใ‚ธ" >}})ใ‚ทใƒงใƒผใƒˆใ‚ณใƒผใƒ‰ใจ็ต„ใฟๅˆใ‚ใ›ใ‚‹ใจ็‰นใซๅผทๅŠ›ใงใ™ใ€‚ + +### HeadใจFooter + +ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใฎ `` ใจ `