From 4267b32c4c9bc792ff062daaa87a2c09f1d11962 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Tue, 17 Aug 2021 10:55:25 +1000 Subject: [PATCH 01/15] =?UTF-8?q?=F0=9F=93=9D=20Add=20Changelog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..f303543b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,33 @@ +# Changelog + +All notable changes to Congo will be documented in this file. + +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). + +--- + +## [1.0.0] - 2020-08-16 + +### Initial release 🎉 + +- 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 + +[1.0.0]: https://github.com/jpanther/Congo/releases/tag/v1.0.0 From c51f34ca357f8a1e42b89428edb1fe4168d27c30 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Tue, 17 Aug 2021 11:03:22 +1000 Subject: [PATCH 02/15] =?UTF-8?q?=F0=9F=90=9B=20Fix=20incorrect=20URL=20wh?= =?UTF-8?q?en=20deploying=20to=20a=20subfolder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 7 +++++ exampleSite/config.toml | 5 ++-- layouts/partials/head.html | 8 +++--- layouts/partials/header.html | 2 +- layouts/shortcodes/figure.html | 52 ++++++++++++++-------------------- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f303543b..87b4be32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [Unreleased] + +### Fixed + +- Fixes URLs being incorrect in some cases when the site is deployed in a subfolder + ## [1.0.0] - 2020-08-16 ### Initial release 🎉 @@ -30,4 +36,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Advanced customisation using simple Tailwind colour definitions and styles - Fully documented +[unreleased]: https://github.com/jpanther/Congo/compare/v1.0.0...HEAD [1.0.0]: https://github.com/jpanther/Congo/releases/tag/v1.0.0 diff --git a/exampleSite/config.toml b/exampleSite/config.toml index 97990d99..bb9f7327 100755 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -4,14 +4,15 @@ # as it does not contain all the required theme settings! # # Refer to the theme docs for configuration instructions if you're unsure. -# https://github.com/jpanther/Congo#readme +# https://jpanther.github.io/Congo/docs/ # -------------------------------------------------------------------------- -baseURL = "https://example.com" +baseURL = "https://jpanther.github.io/Congo/" theme = "Congo" languageCode = "en-AU" title = "Congo" enableEmoji = true +relativeURLs = true [author] name = "Congo" diff --git a/layouts/partials/head.html b/layouts/partials/head.html index f9fb7ad1..d53a5705 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -35,10 +35,10 @@ {{ if templates.Exists "partials/favicons.html" }} {{ partialCached "favicons.html" .Site }} {{ else }} - - - - + + + + {{ end }} {{/* Site Verification */}} {{ with .Site.Params.verification.google }} diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 10dca7f9..4637df64 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -6,7 +6,7 @@ diff --git a/layouts/shortcodes/figure.html b/layouts/shortcodes/figure.html index c1de4995..ac0f6ab2 100644 --- a/layouts/shortcodes/figure.html +++ b/layouts/shortcodes/figure.html @@ -1,37 +1,29 @@ {{ if .Get "src" }} {{ $image := .Page.Resources.GetMatch (printf "*%s*" (.Get "src")) }} - - {{- if .Get "link" -}} - - {{- end -}} - {{ with .Get - {{- if .Get "link" }}{{ end -}} - {{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}} -
- {{ with (.Get "title") -}} -

{{ . }}

- {{- end -}} - {{- if or (.Get "caption") (.Get "attr") -}}

- {{- .Get "caption" | markdownify -}} - {{- with .Get "attrlink" }} - - {{- end -}} - {{- .Get "attr" | markdownify -}} - {{- if .Get "attrlink" }}{{ end }}

- {{- end }} -
+ + {{- if .Get "link" -}} + + {{- end -}} + {{ with .Get + {{- if .Get "link" }}{{ end -}} + {{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}} +
+ {{ with (.Get "title") -}}

{{ . }}

{{- end -}} + {{- if or (.Get "caption") (.Get "attr") -}}

+ {{- .Get "caption" | markdownify -}} + {{- with .Get "attrlink" }}{{- end -}} + {{- .Get "attr" | markdownify -}} + {{- if .Get "attrlink" }}{{ end }}

{{- end }} +
+ {{- end }} {{ end }} - - - - From b7c2dcd6b2661f5a4526376582b54f156b1b18e2 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Tue, 17 Aug 2021 11:03:47 +1000 Subject: [PATCH 03/15] =?UTF-8?q?=F0=9F=94=A7=20Update=20Prettier=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.prettierrc b/.prettierrc index f5f5a075..3031bfbc 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,9 @@ { + "htmlWhitespaceSensitivity": "css", "printWidth": 100, + "singleQuote": false, + "tabWidth": 2, + "trailingComma": "es5", "overrides": [ { "files": ["*.html"], From 154383068e4584bfe5494ce8750b67da92be6b0f Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Tue, 17 Aug 2021 13:14:34 +1000 Subject: [PATCH 04/15] =?UTF-8?q?=F0=9F=94=A7=20Update=20theme=20metadata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- theme.toml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/theme.toml b/theme.toml index ceb3a4ac..8140820c 100644 --- a/theme.toml +++ b/theme.toml @@ -2,13 +2,17 @@ name = "Congo" license = "MIT" -licenselink = "https://github.com/jpanther/hugo-congo/blob/master/LICENSE" -description = "A simple, clean Hugo theme based on Tailwind CSS" -homepage = "http://github.com/jpanther/hugo-congo/" -tags = ["blog", "minimal", "dark mode", "dark", "light", "tailwind"] -features = ["syntax higlighting", "dark mode", "emoji"] +licenselink = "https://github.com/jpanther/Congo/blob/master/LICENSE" +description = "A simple, lightweight theme for Hugo built with Tailwind CSS." + min_version = "0.86.1" +homepage = "https://github.com/jpanther/Congo/" +demosite = "https://jpanther.github.io/Congo/" + +tags = ["blog", "minimal", "responsive", "dark mode", "dark", "light", "tailwind", "personal"] +features = ["syntax higlighting", "dark mode", "emoji"] + [author] name = "James Panther" homepage = "https://jamespanther.com/" From 18ed642ae4658b93b75fa200ce23e2626bfc8070 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Tue, 17 Aug 2021 15:35:04 +1000 Subject: [PATCH 05/15] =?UTF-8?q?=F0=9F=94=A7=20Consolidate=20author=20con?= =?UTF-8?q?figuration=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++ README.md | 9 +---- config/_default/author.toml | 34 ---------------- config/_default/config.toml | 45 +++++++++++++++------ config/_default/params.toml | 3 +- exampleSite/content/docs/configuration.md | 27 ++++++++++++- exampleSite/content/docs/getting-started.md | 12 +++--- 7 files changed, 71 insertions(+), 63 deletions(-) delete mode 100644 config/_default/author.toml diff --git a/CHANGELOG.md b/CHANGELOG.md index 87b4be32..725b24b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Consolidated author configuration parameters into `config.toml` + ### Fixed - Fixes URLs being incorrect in some cases when the site is deployed in a subfolder diff --git a/README.md b/README.md index 6ceb5aa5..511be018 100644 --- a/README.md +++ b/README.md @@ -69,19 +69,12 @@ A few things you need to set for a new installation: baseURL = "https://your_domain.com" languageCode = "en-AU" - title = "My awesome website" -``` - -It's also useful to set the author configuration in the `config/_default/author.toml` file. You can also add links to your profiles here to enable them in the theme. - -```toml -# config/_default/author.toml [author] name = "Your name" links = [ - { twitter = "https://twitter.com/username" } + { twitter = "https://twitter.com/jpanther" } ] ``` diff --git a/config/_default/author.toml b/config/_default/author.toml deleted file mode 100644 index 5aa0e4f9..00000000 --- a/config/_default/author.toml +++ /dev/null @@ -1,34 +0,0 @@ -# -- Site Author Details -- -# To display the author box below each article, configure the settings below. -# The author image should be placed inside the `/static` folder. -# Uncomment any links to enable them. The icons will be displayed in the order listed. - -[author] - # name = "Your name here" - # image = "/img/author.jpg" - # links = [ - # { email = "mailto:hello@your_domain.com" }, - # { link = "https://link-to-some-website.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" }, - # { github = "https://github.com/username" }, - # { gitlab = "https://gitlab.com/username" }, - # { instagram = "https://instagram.com/username" }, - # { keybase = "https://keybase.io/username" }, - # { lastfm = "https://lastfm.com/user/username" }, - # { linkedin = "https://linkedin.com/in/username" }, - # { mastodon = "https://mastodon.instance/@username" }, - # { medium = "https://medium.com/username" }, - # { reddit = "https://reddit.com/user/username" }, - # { slack = "https://workspace.url/team/userid" }, - # { snapchat = "https://snapchat.com/add/username" }, - # { soundcloud = "https://soundcloud.com/username" }, - # { steam = "https://steamcommunity.com/profiles/userid" }, - # { tiktok = "https://tiktok.com/@username" }, - # { twitch = "https://twitch.tv/username" }, - # { twitter = "https://twitter.com/username" }, - # { youtube = "https://youtube.com/username" }, - # ] diff --git a/config/_default/config.toml b/config/_default/config.toml index fda0ff81..b9e1ebd6 100644 --- a/config/_default/config.toml +++ b/config/_default/config.toml @@ -1,23 +1,44 @@ # -- 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" -# Speficiy the base URL for the website. # baseURL = "https://your_domain.com/" - -# The language code of the language that the website is written in. -# This can be a base language (ie. "en") or a specific variant (ie. "en-AU"). languageCode = "en" -# The website title. This will be displayed in the site header. title = "Congo" - -# A default copyright message is generated automatically. -# Uncomment the line below to provide a custom copyright Markdown string. # copyright = "Copy, _right?_ :thinking_face:" -# To automatically convert strings such as :bang: to emoji, set this to true. enableEmoji = true - -# Congo will generate a robots file that allows search engines to index -# the entire site. If you don't want a robots file, set this to false. enableRobotsTXT = true + +[author] + # name = "Your name here" + # image = "img/author.jpg" + # links = [ + # { email = "mailto:hello@your_domain.com" }, + # { link = "https://link-to-some-website.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" }, + # { github = "https://github.com/username" }, + # { gitlab = "https://gitlab.com/username" }, + # { instagram = "https://instagram.com/username" }, + # { keybase = "https://keybase.io/username" }, + # { lastfm = "https://lastfm.com/user/username" }, + # { linkedin = "https://linkedin.com/in/username" }, + # { mastodon = "https://mastodon.instance/@username" }, + # { medium = "https://medium.com/username" }, + # { reddit = "https://reddit.com/user/username" }, + # { slack = "https://workspace.url/team/userid" }, + # { snapchat = "https://snapchat.com/add/username" }, + # { soundcloud = "https://soundcloud.com/username" }, + # { steam = "https://steamcommunity.com/profiles/userid" }, + # { tiktok = "https://tiktok.com/@username" }, + # { twitch = "https://twitch.tv/username" }, + # { twitter = "https://twitter.com/username" }, + # { youtube = "https://youtube.com/username" }, + # ] diff --git a/config/_default/params.toml b/config/_default/params.toml index 99730681..93d02588 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -2,7 +2,8 @@ # These options control how the theme functions and allow you to # customise the display of your website. # -# Refer to the README for more details about each of these parameters. +# Refer to the theme docs for more details about each of these parameters. +# https://jpanther.github.io/Congo/docs/configuration/#theme-parameters [homepage] layout = "page" # valid options: page, profile, custom diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index f0720377..e1600225 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -21,7 +21,32 @@ The default theme configuration is documented in each file so you can freely adj As outlined in the [installation instructions](/docs/installation/#set-up-your-configuration-files), you should adjust your theme configuration by modifying the files in the `config/_default/` folder of your Hugo project and delete the `config.toml` file in your project root. {{< /alert >}} -## Parameters +## 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/config.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. `author.name` refers to `[author] name`). + + +|Name|Type|Default|Description| +| --- | --- | --- | --- | +|`theme`|string|`"congo"`|This must be set to `"congo"` for the theme to function.| +|`baseURL`|string|_Not set_|The URL to the root of the website.| +|`languageCode`|string|`"en"`|The language of the website. It can be a top-level language (ie. `"en"`) or a sub-variant (ie. `"en-AU"`)." +|`title`|string|`"Congo"`|The title of the website. This will be displayed in the site header and footer.| +|`copyright`|string|_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`. +|`enableEmoji`|boolean|`true`|Whether emoji strings in content should be converted to emoji symbols.| +|`enableRobotsTXT`|boolean|`true`|When enabled a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. Set to `false` if you wish to provide your own file.| +|`author.name`|string|_Not set_|The author's name. This will be displayed in article footers, and on the homepage when the profile layout is used.| +|`author.image`|string|_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 `static/` folder.| +|`author.links`|array of objects|_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/`.| +|`[permalinks]`||_Not set_|Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration.| +|`[taxonomies]`||_Not set_|Refer to the [Hugo docs](https://gohugo.io/content-management/taxonomies/) for taxonomy configuration.| + + +## 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. diff --git a/exampleSite/content/docs/getting-started.md b/exampleSite/content/docs/getting-started.md index 6dd36e4a..9ddc2d7f 100644 --- a/exampleSite/content/docs/getting-started.md +++ b/exampleSite/content/docs/getting-started.md @@ -22,22 +22,20 @@ A few things you need to set for a new installation: baseURL = "https://your_domain.com" languageCode = "en-AU" - title = "My awesome website" -``` - -It's also useful to set the author configuration in the `config/_default/author.toml` file. You can also add links to your profiles here to enable them in the theme. - -```toml -# config/_default/author.toml [author] name = "Your name" +image = "img/author.jpg" links = [ { twitter = "https://twitter.com/username" } ] ``` +The `[author]` configuration determines how the author information is displayed on the website. The image should be placed in the site's `static/` folder. Links will be displayed in the order they are listed. + +Further detail about these configuration options is covered in the [Configuration](/docs/configuration/) section. + ## 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. From 64dd424b80da5e1908882c63551393fddfa8b25f Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Tue, 17 Aug 2021 16:48:08 +1000 Subject: [PATCH 06/15] =?UTF-8?q?=E2=9C=A8=20Add=20i18n=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 6 +++- config/_default/config.toml | 1 + data/sharing.json | 10 +++--- exampleSite/config.toml | 1 + exampleSite/content/docs/configuration.md | 3 +- i18n/en.yaml | 35 ++++++++++++++++++++ layouts/404.html | 6 ++-- layouts/_default/_markup/render-heading.html | 2 +- layouts/_default/list.html | 2 +- layouts/_default/single.html | 2 +- layouts/index.html | 2 +- layouts/partials/article-link.html | 2 +- layouts/partials/article-meta.html | 5 ++- layouts/partials/author.html | 3 ++ layouts/partials/footer.html | 2 +- layouts/partials/sharing-links.html | 2 +- layouts/shortcodes/icon.html | 2 +- static/css/main.css | 2 +- 18 files changed, 66 insertions(+), 22 deletions(-) create mode 100644 i18n/en.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index 725b24b9..66b50d79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,13 +9,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- i18n support + ### Changed - Consolidated author configuration parameters into `config.toml` ### Fixed -- Fixes URLs being incorrect in some cases when the site is deployed in a subfolder +- URLs being incorrect in some cases when the site is deployed in a subfolder ## [1.0.0] - 2020-08-16 diff --git a/config/_default/config.toml b/config/_default/config.toml index b9e1ebd6..07f63055 100644 --- a/config/_default/config.toml +++ b/config/_default/config.toml @@ -6,6 +6,7 @@ theme = "congo" # baseURL = "https://your_domain.com/" languageCode = "en" +defaultContentLanguage = "en" title = "Congo" # copyright = "Copy, _right?_ :thinking_face:" diff --git a/data/sharing.json b/data/sharing.json index 327c9b1d..ff9dbc54 100644 --- a/data/sharing.json +++ b/data/sharing.json @@ -1,27 +1,27 @@ { "email": { "icon": "email", - "title": "Send via email", + "title": "sharing.email", "url": "mailto:?body=%s&subject=%s" }, "facebook": { "icon": "facebook", - "title": "Share on Facebook", + "title": "sharing.facebook", "url": "https://www.facebook.com/sharer/sharer.php?u=%s"e=%s" }, "linkedin": { "icon": "linkedin", - "title": "Share on LinkedIn", + "title": "sharing.linkedin", "url": "https://www.linkedin.com/shareArticle?mini=true&url=%s&title=%s" }, "reddit": { "icon": "reddit", - "title": "Submit to Reddit", + "title": "sharing.reddit", "url": "https://reddit.com/submit/?url=%s&resubmit=true&title=%s" }, "twitter": { "icon": "twitter", - "title": "Tweet on Twitter", + "title": "sharing.twitter", "url": "https://twitter.com/intent/tweet/?url=%s&text=%s" } } diff --git a/exampleSite/config.toml b/exampleSite/config.toml index bb9f7327..5d24a325 100755 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -10,6 +10,7 @@ baseURL = "https://jpanther.github.io/Congo/" theme = "Congo" languageCode = "en-AU" +defaultContentLanguage = "en" title = "Congo" enableEmoji = true relativeURLs = true diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index e1600225..534cd900 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -34,7 +34,8 @@ Note that the variable names provided in this table use dot notation to simplify | --- | --- | --- | --- | |`theme`|string|`"congo"`|This must be set to `"congo"` for the theme to function.| |`baseURL`|string|_Not set_|The URL to the root of the website.| -|`languageCode`|string|`"en"`|The language of the website. It can be a top-level language (ie. `"en"`) or a sub-variant (ie. `"en-AU"`)." +|`languageCode`|string|`"en"`|The language of the website for site metadata purposes. It can be a top-level language (ie. `"en"`) or a sub-variant (ie. `"en-AU"`)."| +|`defaultContentLanguage`|string|`"en"`|This value determines the language of theme components."| |`title`|string|`"Congo"`|The title of the website. This will be displayed in the site header and footer.| |`copyright`|string|_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`. |`enableEmoji`|boolean|`true`|Whether emoji strings in content should be converted to emoji symbols.| diff --git a/i18n/en.yaml b/i18n/en.yaml new file mode 100644 index 00000000..fafffa69 --- /dev/null +++ b/i18n/en.yaml @@ -0,0 +1,35 @@ +article: + anchor_label: "Anchor" + draft: "Draft" + reading_time: + one: "{{ .Count }} min" + other: "{{ .Count }} mins" + reading_time_title: "Reading time" + +author: + byline_title: "Author" + +error: + 404_title: "Page Not Found :confused:" + 404_error: "Error 404" + 404_description: "It seems that the page you've requested does not exist." + +footer: + powered_by: "Powered by" + +homepage: + recent: "Recent" + +list: + externalurl_title: "Link to external site" + no_articles: "There's no articles to list here yet." + +sharing: + email: "Send via email" + facebook: "Share on Facebook" + linkedin: "Share on LinkedIn" + reddit: "Submit to Reddit" + twitter: "Tweet on Twitter" + +shortcode: + no_icon: "Icon not found." diff --git a/layouts/404.html b/layouts/404.html index 464b13bc..2e14bb2f 100644 --- a/layouts/404.html +++ b/layouts/404.html @@ -1,7 +1,7 @@ {{ define "main" }} -

Page Not Found 🤷‍♂️

-

Error 404

+

{{ i18n "error.404_title" | emojify }}

+

{{ i18n "error.404_error" | emojify }}

-

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

+

{{ i18n "error.404_description" | emojify }}

{{ end }} diff --git a/layouts/_default/_markup/render-heading.html b/layouts/_default/_markup/render-heading.html index 84253591..7415d617 100644 --- a/layouts/_default/_markup/render-heading.html +++ b/layouts/_default/_markup/render-heading.html @@ -1 +1 @@ -{{ .Text | safeHTML }} {{ if .Page.Params.showHeadingAnchors | default (.Page.Site.Params.article.showHeadingAnchors | default true) }}#{{ end }} +{{ .Text | safeHTML }} {{ if .Page.Params.showHeadingAnchors | default (.Page.Site.Params.article.showHeadingAnchors | default true) }}#{{ end }} diff --git a/layouts/_default/list.html b/layouts/_default/list.html index e2081674..7801e583 100644 --- a/layouts/_default/list.html +++ b/layouts/_default/list.html @@ -16,7 +16,7 @@ {{ else }}

- There's no articles to list here yet. + {{ i18n "list.no_articles" | emojify }}

{{ end }} diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 2d7653c8..aba47122 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -8,7 +8,7 @@ - Draft + {{ i18n "article.draft" | emojify }} {{ end }} diff --git a/layouts/index.html b/layouts/index.html index 3caa782c..d102ee56 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -7,7 +7,7 @@ {{ end }} {{ if .Site.Params.homepage.showList | default false }}
-

Recent

+

{{ i18n "homepage.recent" | emojify }}

{{ range first 5 (.Paginate (where .Site.RegularPages "Type" "in" .Site.Params.homepage.listSections)).Pages }} {{ partial "article-link.html" . }} {{ end }} diff --git a/layouts/partials/article-link.html b/layouts/partials/article-link.html index e4ee5fc1..8d3efe67 100644 --- a/layouts/partials/article-link.html +++ b/layouts/partials/article-link.html @@ -7,7 +7,7 @@ {{ else }} diff --git a/layouts/partials/article-meta.html b/layouts/partials/article-meta.html index 0718f513..a0414232 100644 --- a/layouts/partials/article-meta.html +++ b/layouts/partials/article-meta.html @@ -11,8 +11,7 @@ · {{ end }} {{ if and (.Params.showReadingTime | default (.Site.Params.article.showReadingTime | default true)) (ne .ReadingTime 0) }} - - {{ .ReadingTime }} - min{{ if gt .ReadingTime 1 }}s{{ end }} + + {{ i18n "article.reading_time" .ReadingTime | emojify }} {{ end }} diff --git a/layouts/partials/author.html b/layouts/partials/author.html index befd7805..7f739c35 100644 --- a/layouts/partials/author.html +++ b/layouts/partials/author.html @@ -5,6 +5,9 @@ {{ end }}
{{ with .Site.Author.name }} +
+ {{ i18n "author.byline_title" | emojify }} +
{{ . }}
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index f19a05ba..913af90d 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -12,7 +12,7 @@ {{/* Theme attribution */}} {{ if .Site.Params.attribution | default true }}

- Powered by + {{ i18n "footer.powered_by" }} Hugo & Congo diff --git a/layouts/partials/sharing-links.html b/layouts/partials/sharing-links.html index dbd5b9cb..e4f5f3f3 100644 --- a/layouts/partials/sharing-links.html +++ b/layouts/partials/sharing-links.html @@ -6,7 +6,7 @@ {{ partial "icon.html" .icon }} {{ end }} diff --git a/layouts/shortcodes/icon.html b/layouts/shortcodes/icon.html index e9251eac..4c627260 100644 --- a/layouts/shortcodes/icon.html +++ b/layouts/shortcodes/icon.html @@ -3,6 +3,6 @@ {{ if $icon }} {{ $icon.Content | safeHTML }} {{ else }} - Icon not found. + {{ i18n "shortcode.no_icon" }} {{ end }} diff --git a/static/css/main.css b/static/css/main.css index 6fadbde9..95c80953 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1 +1 @@ -/*! tailwindcss v2.2.7 | MIT License | https://tailwindcss.com*//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:initial;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a1a1aa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#a1a1aa}input::placeholder,textarea::placeholder{opacity:1;color:#a1a1aa}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(228,228,231,var(--tw-border-opacity))}.prose{color:#3f3f46;max-width:65ch}.prose [class~=lead]{color:#52525b;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:#6d28d9;text-decoration:underline;font-weight:500}.prose a:hover{background-color:#7c3aed;color:#fff;text-decoration:none}.prose strong{color:#18181b;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#71717a;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d4d4d8;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e4e4e7;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#18181b;border-left-width:.25rem;border-left-color:#e4e4e7;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#18181b;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#18181b;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333;position:relative}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#18181b;font-weight:600;position:relative}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#71717a;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#a21caf;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#18181b}.prose pre{color:#e4e4e7;background-color:#fafafa;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:400;color:#3f3f46;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:#18181b;font-weight:600;border-bottom-width:1px;border-bottom-color:#d4d4d8}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e4e4e7}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose kbd{background-color:#e4e4e7;padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:#f5d0fe;padding:.1rem .2rem;border-radius:.12rem}.icon svg{height:1em;width:1em}.prose .heading-anchor{position:absolute;top:0;text-decoration:none;opacity:0;width:1.1em;left:-1.1em}.prose .heading-anchor:hover{background-color:initial;--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity));text-decoration:underline}.prose .heading-anchor:focus,.prose .heading-anchor:hover,.prose h2:hover>.heading-anchor,.prose h3:hover>.heading-anchor,.prose h4:hover>.heading-anchor{opacity:1}.no-prose>p{margin-top:0}.no-prose>p:last-child{margin-bottom:0}.prose .chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.prose .chroma{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(228,228,231,var(--tw-text-opacity))}}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding:.75rem 1rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity));padding-left:1rem;padding-right:1rem}@media (prefers-color-scheme:dark){.chroma .hl{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .lnt{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ln{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .k{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kc{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .kd{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kd{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kp{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kp{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kr{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kr{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kt{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kt{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .n{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .n{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .na{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .na{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nb{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nb{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .bp{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .bp{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .no{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .no{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nd{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nd{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ni{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ni{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ne{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ne{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nf{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .fm{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .fm{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nl{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nl{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .nn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nx{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nx{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .py{color:#cebc3a}.chroma .nt{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nt{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nv{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nv{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vg{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .vi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vm{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vm{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .l{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .l{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ld{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ld{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sa{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sa{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sb{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sb{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sc{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sc{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .dl{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .dl{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sd{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sd{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s2{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s2{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .se{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .sh{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sh{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .si{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .si{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sx{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sx{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sr{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sr{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s1{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s1{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ss{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .m{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .m{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mb{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mb{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mf{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mh{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mh{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .il{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .il{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mo{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mo{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .o{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ow{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}}.chroma .c{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ch{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cm{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cm{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .c1{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c1{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cs{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cs{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cp{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cp{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cpf{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gi{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gi{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .go{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .go{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gp{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gp{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gs{font-weight:600}.chroma .gt,.chroma .gu{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gl{text-decoration:underline}.relative{position:relative}.m-auto{margin:auto}.m-1{margin:.25rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-3{margin-bottom:.75rem}.mt-8{margin-top:2rem}.mb-12{margin-bottom:3rem}.mt-12{margin-top:3rem}.mt-10{margin-top:2.5rem}.mt-0{margin-top:0}.ml-2{margin-left:.5rem}.mb-1{margin-bottom:.25rem}.mt-6{margin-top:1.5rem}.mr-3{margin-right:.75rem}.-mt-1{margin-top:-.25rem}.ml-3{margin-left:.75rem}.\!mt-0{margin-top:0!important}.\!mb-0{margin-bottom:0!important}.mr-4{margin-right:1rem}.ml-1{margin-left:.25rem}.\!mb-9{margin-bottom:2.25rem!important}.mb-8{margin-bottom:2rem}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.h-screen{height:100vh}.h-24{height:6rem}.h-full{height:100%}.h-36{height:9rem}.w-36{width:9rem}.w-full{width:100%}.w-24{width:6rem}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-7xl{max-width:80rem}.max-w-prose{max-width:65ch}.max-w-full{max-width:100%}.flex-grow{flex-grow:1}.cursor-default{cursor:default}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-hidden{overflow:hidden}.rounded-md{border-radius:.375rem}.rounded-full{border-radius:9999px}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-gray-400{--tw-border-opacity:1;border-color:rgba(161,161,170,var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(167,139,250,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(221,214,254,var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(212,212,216,var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.p-1{padding:.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-\[2px\]{padding-top:2px;padding-bottom:2px}.px-2{padding-left:.5rem;padding-right:.5rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-8{padding-top:2rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-7{line-height:1.75rem}.leading-6{line-height:1.5rem}.text-gray-400{--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.\!text-white{--tw-text-opacity:1!important;color:rgba(255,255,255,var(--tw-text-opacity))!important}.\!no-underline{text-decoration:none!important}.first\:mt-8:first-child{margin-top:2rem}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(139,92,246,var(--tw-bg-opacity))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1!important;background-color:rgba(139,92,246,var(--tw-bg-opacity))!important}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:underline:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.dark\:prose-light{color:#a1a1aa}.dark\:prose-light a{color:#a78bfa}.dark\:prose-light strong{color:#fff}.dark\:prose-light ol>li:before{color:#a1a1aa}.dark\:prose-light ul>li:before{background-color:#52525b}.dark\:prose-light hr{border-color:#e4e4e7}.dark\:prose-light blockquote{color:#e4e4e7;border-left-color:#52525b}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:#fff}.dark\:prose-light figure figcaption{color:#a1a1aa}.dark\:prose-light code{color:#e879f9}.dark\:prose-light a code{color:#fff}.dark\:prose-light pre{color:#e4e4e7;background-color:#3f3f46}.dark\:prose-light pre code{color:#e4e4e7}.dark\:prose-light thead{color:#fff;border-bottom-color:#a1a1aa}.dark\:prose-light tbody tr{border-bottom-color:#52525b}.dark\:prose-light kbd{background-color:#3f3f46;color:#d4d4d8}.dark\:prose-light mark{background-color:#e879f9}.dark\:border-primary-600{--tw-border-opacity:1;border-color:rgba(124,58,237,var(--tw-border-opacity))}.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgba(82,82,91,var(--tw-border-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgba(39,39,42,var(--tw-bg-opacity))}.dark\:bg-primary-400{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity))}.dark\:bg-primary-900{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}.dark\:bg-primary-800{--tw-bg-opacity:1;background-color:rgba(91,33,182,var(--tw-bg-opacity))}.dark\:text-gray-500{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.dark\:text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.dark\:text-gray-600{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}.dark\:text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.dark\:hover\:bg-primary-400:hover{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:hover\:\!bg-primary-700:hover{--tw-bg-opacity:1!important;background-color:rgba(109,40,217,var(--tw-bg-opacity))!important}.dark\:hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}}@media (min-width:640px){.sm\:mr-7{margin-right:1.75rem}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:last\:mr-0:last-child{margin-right:0}}@media (min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media (min-width:1024px){.lg\:w-1\/4{width:25%}.lg\:px-32{padding-left:8rem;padding-right:8rem}}@media (min-width:1280px){.xl\:w-1\/5{width:20%}} \ No newline at end of file +/*! tailwindcss v2.2.7 | MIT License | https://tailwindcss.com*//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:initial;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a1a1aa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#a1a1aa}input::placeholder,textarea::placeholder{opacity:1;color:#a1a1aa}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(228,228,231,var(--tw-border-opacity))}.prose{color:#3f3f46;max-width:65ch}.prose [class~=lead]{color:#52525b;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:#6d28d9;text-decoration:underline;font-weight:500}.prose a:hover{background-color:#7c3aed;color:#fff;text-decoration:none}.prose strong{color:#18181b;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#71717a;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d4d4d8;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e4e4e7;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#18181b;border-left-width:.25rem;border-left-color:#e4e4e7;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#18181b;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#18181b;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333;position:relative}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#18181b;font-weight:600;position:relative}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#71717a;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#a21caf;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#18181b}.prose pre{color:#e4e4e7;background-color:#fafafa;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:400;color:#3f3f46;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:#18181b;font-weight:600;border-bottom-width:1px;border-bottom-color:#d4d4d8}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e4e4e7}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose kbd{background-color:#e4e4e7;padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:#f5d0fe;padding:.1rem .2rem;border-radius:.12rem}.icon svg{height:1em;width:1em}.prose .heading-anchor{position:absolute;top:0;text-decoration:none;opacity:0;width:1.1em;left:-1.1em}.prose .heading-anchor:hover{background-color:initial;--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity));text-decoration:underline}.prose .heading-anchor:focus,.prose .heading-anchor:hover,.prose h2:hover>.heading-anchor,.prose h3:hover>.heading-anchor,.prose h4:hover>.heading-anchor{opacity:1}.no-prose>p{margin-top:0}.no-prose>p:last-child{margin-bottom:0}.prose .chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.prose .chroma{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(228,228,231,var(--tw-text-opacity))}}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding:.75rem 1rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity));padding-left:1rem;padding-right:1rem}@media (prefers-color-scheme:dark){.chroma .hl{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .lnt{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ln{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .k{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kc{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .kd{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kd{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kp{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kp{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kr{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kr{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kt{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kt{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .n{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .n{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .na{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .na{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nb{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nb{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .bp{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .bp{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .no{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .no{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nd{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nd{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ni{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ni{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ne{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ne{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nf{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .fm{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .fm{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nl{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nl{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .nn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nx{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nx{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .py{color:#cebc3a}.chroma .nt{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nt{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nv{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nv{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vg{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .vi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vm{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vm{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .l{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .l{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ld{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ld{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sa{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sa{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sb{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sb{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sc{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sc{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .dl{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .dl{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sd{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sd{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s2{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s2{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .se{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .sh{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sh{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .si{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .si{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sx{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sx{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sr{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sr{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s1{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s1{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ss{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .m{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .m{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mb{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mb{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mf{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mh{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mh{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .il{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .il{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mo{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mo{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .o{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ow{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}}.chroma .c{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ch{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cm{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cm{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .c1{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c1{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cs{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cs{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cp{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cp{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cpf{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gi{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gi{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .go{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .go{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gp{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gp{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gs{font-weight:600}.chroma .gt,.chroma .gu{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gl{text-decoration:underline}.relative{position:relative}.m-auto{margin:auto}.m-1{margin:.25rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-3{margin-bottom:.75rem}.mt-8{margin-top:2rem}.mb-12{margin-bottom:3rem}.mt-12{margin-top:3rem}.mt-10{margin-top:2.5rem}.mt-0{margin-top:0}.ml-2{margin-left:.5rem}.mb-1{margin-bottom:.25rem}.mt-6{margin-top:1.5rem}.mr-3{margin-right:.75rem}.-mt-1{margin-top:-.25rem}.ml-3{margin-left:.75rem}.\!mt-0{margin-top:0!important}.\!mb-0{margin-bottom:0!important}.mr-4{margin-right:1rem}.ml-1{margin-left:.25rem}.\!mb-9{margin-bottom:2.25rem!important}.mb-8{margin-bottom:2rem}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.h-screen{height:100vh}.h-24{height:6rem}.h-full{height:100%}.h-36{height:9rem}.w-36{width:9rem}.w-full{width:100%}.w-24{width:6rem}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-7xl{max-width:80rem}.max-w-prose{max-width:65ch}.max-w-full{max-width:100%}.flex-grow{flex-grow:1}.cursor-default{cursor:default}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-hidden{overflow:hidden}.rounded-md{border-radius:.375rem}.rounded-full{border-radius:9999px}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-gray-400{--tw-border-opacity:1;border-color:rgba(161,161,170,var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(167,139,250,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(221,214,254,var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(212,212,216,var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.p-1{padding:.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-\[2px\]{padding-top:2px;padding-bottom:2px}.px-2{padding-left:.5rem;padding-right:.5rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-8{padding-top:2rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\[0\.6rem\]{font-size:.6rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-7{line-height:1.75rem}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.text-gray-400{--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.\!text-white{--tw-text-opacity:1!important;color:rgba(255,255,255,var(--tw-text-opacity))!important}.\!no-underline{text-decoration:none!important}.first\:mt-8:first-child{margin-top:2rem}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(139,92,246,var(--tw-bg-opacity))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1!important;background-color:rgba(139,92,246,var(--tw-bg-opacity))!important}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:underline:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.dark\:prose-light{color:#a1a1aa}.dark\:prose-light a{color:#a78bfa}.dark\:prose-light strong{color:#fff}.dark\:prose-light ol>li:before{color:#a1a1aa}.dark\:prose-light ul>li:before{background-color:#52525b}.dark\:prose-light hr{border-color:#e4e4e7}.dark\:prose-light blockquote{color:#e4e4e7;border-left-color:#52525b}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:#fff}.dark\:prose-light figure figcaption{color:#a1a1aa}.dark\:prose-light code{color:#e879f9}.dark\:prose-light a code{color:#fff}.dark\:prose-light pre{color:#e4e4e7;background-color:#3f3f46}.dark\:prose-light pre code{color:#e4e4e7}.dark\:prose-light thead{color:#fff;border-bottom-color:#a1a1aa}.dark\:prose-light tbody tr{border-bottom-color:#52525b}.dark\:prose-light kbd{background-color:#3f3f46;color:#d4d4d8}.dark\:prose-light mark{background-color:#e879f9}.dark\:border-primary-600{--tw-border-opacity:1;border-color:rgba(124,58,237,var(--tw-border-opacity))}.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgba(82,82,91,var(--tw-border-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgba(39,39,42,var(--tw-bg-opacity))}.dark\:bg-primary-400{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity))}.dark\:bg-primary-900{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}.dark\:bg-primary-800{--tw-bg-opacity:1;background-color:rgba(91,33,182,var(--tw-bg-opacity))}.dark\:text-gray-500{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.dark\:text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.dark\:text-gray-600{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}.dark\:text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.dark\:hover\:bg-primary-400:hover{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:hover\:\!bg-primary-700:hover{--tw-bg-opacity:1!important;background-color:rgba(109,40,217,var(--tw-bg-opacity))!important}.dark\:hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}}@media (min-width:640px){.sm\:mr-7{margin-right:1.75rem}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:last\:mr-0:last-child{margin-right:0}}@media (min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media (min-width:1024px){.lg\:w-1\/4{width:25%}.lg\:px-32{padding-left:8rem;padding-right:8rem}}@media (min-width:1280px){.xl\:w-1\/5{width:20%}} \ No newline at end of file From 85b0f11c772d6f4edcd9f9234ca42a60702a9995 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 18 Aug 2021 10:08:06 +1000 Subject: [PATCH 07/15] =?UTF-8?q?=E2=9C=A8=20Add=20breadcrumbs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + config/_default/params.toml | 2 ++ exampleSite/config.toml | 4 ++++ exampleSite/content/docs/configuration.md | 4 +++- layouts/_default/single.html | 3 +++ layouts/partials/breadcrumbs.html | 13 +++++++++++++ layouts/partials/section-heading.html | 3 +++ static/css/main.css | 2 +- 8 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 layouts/partials/breadcrumbs.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 66b50d79..999fc1d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Breadcrumbs - i18n support ### Changed diff --git a/config/_default/params.toml b/config/_default/params.toml index 93d02588..1485d7fd 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -14,6 +14,7 @@ showDate = true dateFormat = "2 January 2006" showAuthor = true + showBreadcrumbs = false showDraftLabel = true showHeadingAnchors = true showPagination = true @@ -21,6 +22,7 @@ # sharingLinks = ["facebook", "twitter", "reddit", "linkedin", "email"] [list] + showBreadcrumbs = false groupByYear = true [taxonomy] diff --git a/exampleSite/config.toml b/exampleSite/config.toml index 5d24a325..aaa6c652 100755 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -35,6 +35,10 @@ relativeURLs = true [params.list] groupByYear = false + showBreadcrumbs = true + +[params.article] + showBreadcrumbs = true [[menu.main]] name = "Docs" diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index 534cd900..4871d82d 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -62,12 +62,14 @@ Many of the article defaults here can be overridden on a per article basis by sp |`article.showDate`|boolean|`true`|Whether or not article dates are displayed.| |`article.dateFormat`|string|`"2 January 2006"`|How article dates are formatted. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats.| |`article.showAuthor`|boolean|`true`|Whether or not the author box is displayed in the article footer.| +|`article.showBreadcrumbs`|boolean|`false`|Whether or not breadcrumbs are displayed in the article header.| |`article.showDraftLabel`|boolean|`true`|Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`.| |`article.showHeadingAnchors`|boolean|`true`|Whether or not heading anchor links are displayed alongside headings within articles.| |`article.showPagination`|boolean|`true`|Whether or not the next/previous article links are displayed in the article footer.| |`article.showReadingTime`|boolean|`true`|Whether or not article reading times are displayed.| |`article.sharingLinks`|array of strings|_Not set_|Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed.| -|`list.groupByYear`|boolean|`true`|Whether or not articles are grouped under years in the article listing.| +|`list.showBreadcrumbs`|boolean|`false`|Whether or not breadcrumbs are displayed in the header on list pages.| +|`list.groupByYear`|boolean|`true`|Whether or not articles are grouped by year on list pages.| |`sitemap.excludedKinds`|array of strings|`["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`|boolean|`true`|Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing.| |`fathomAnalytics.site`|string|_Not set_|The site code generated by Fathom Analytics for the website. Refer to the [Analytics docs](#analyticshtml) below for more details.| diff --git a/layouts/_default/single.html b/layouts/_default/single.html index aba47122..7cfc30c6 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,6 +1,9 @@ {{ define "main" }}

+ {{ if .Site.Params.article.showBreadcrumbs | default false }} + {{ partial "breadcrumbs.html" . }} + {{ end }}

{{ .Title | emojify }}

{{ partial "article-meta.html" . }} diff --git a/layouts/partials/breadcrumbs.html b/layouts/partials/breadcrumbs.html new file mode 100644 index 00000000..2840fd5d --- /dev/null +++ b/layouts/partials/breadcrumbs.html @@ -0,0 +1,13 @@ +
    + {{ template "crumb" (dict "p1" . "p2" .) }} +
+{{ define "crumb" }} + {{ if .p1.Parent }} + {{ template "crumb" (dict "p1" .p1.Parent "p2" .p2 ) }} + {{ else if not .p1.IsHome }} + {{ template "crumb" (dict "p1" .p1.Site.Home "p2" .p2 ) }} + {{ end }} +
  • + {{ .p1.Title }}/ +
  • +{{ end }} diff --git a/layouts/partials/section-heading.html b/layouts/partials/section-heading.html index a6bd7184..19d9abc7 100644 --- a/layouts/partials/section-heading.html +++ b/layouts/partials/section-heading.html @@ -1,3 +1,6 @@ +{{ if .Site.Params.list.showBreadcrumbs | default false }} + {{ partial "breadcrumbs.html" . }} +{{ end }}

    {{ .Title }}

    {{ .Content }}
    diff --git a/static/css/main.css b/static/css/main.css index 95c80953..fe08985d 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1 +1 @@ -/*! tailwindcss v2.2.7 | MIT License | https://tailwindcss.com*//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:initial;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a1a1aa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#a1a1aa}input::placeholder,textarea::placeholder{opacity:1;color:#a1a1aa}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(228,228,231,var(--tw-border-opacity))}.prose{color:#3f3f46;max-width:65ch}.prose [class~=lead]{color:#52525b;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:#6d28d9;text-decoration:underline;font-weight:500}.prose a:hover{background-color:#7c3aed;color:#fff;text-decoration:none}.prose strong{color:#18181b;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#71717a;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d4d4d8;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e4e4e7;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#18181b;border-left-width:.25rem;border-left-color:#e4e4e7;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#18181b;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#18181b;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333;position:relative}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#18181b;font-weight:600;position:relative}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#71717a;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#a21caf;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#18181b}.prose pre{color:#e4e4e7;background-color:#fafafa;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:400;color:#3f3f46;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:#18181b;font-weight:600;border-bottom-width:1px;border-bottom-color:#d4d4d8}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e4e4e7}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose kbd{background-color:#e4e4e7;padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:#f5d0fe;padding:.1rem .2rem;border-radius:.12rem}.icon svg{height:1em;width:1em}.prose .heading-anchor{position:absolute;top:0;text-decoration:none;opacity:0;width:1.1em;left:-1.1em}.prose .heading-anchor:hover{background-color:initial;--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity));text-decoration:underline}.prose .heading-anchor:focus,.prose .heading-anchor:hover,.prose h2:hover>.heading-anchor,.prose h3:hover>.heading-anchor,.prose h4:hover>.heading-anchor{opacity:1}.no-prose>p{margin-top:0}.no-prose>p:last-child{margin-bottom:0}.prose .chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.prose .chroma{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(228,228,231,var(--tw-text-opacity))}}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding:.75rem 1rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity));padding-left:1rem;padding-right:1rem}@media (prefers-color-scheme:dark){.chroma .hl{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .lnt{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ln{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .k{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kc{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .kd{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kd{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kp{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kp{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kr{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kr{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kt{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kt{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .n{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .n{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .na{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .na{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nb{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nb{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .bp{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .bp{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .no{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .no{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nd{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nd{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ni{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ni{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ne{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ne{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nf{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .fm{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .fm{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nl{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nl{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .nn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nx{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nx{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .py{color:#cebc3a}.chroma .nt{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nt{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nv{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nv{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vg{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .vi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vm{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vm{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .l{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .l{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ld{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ld{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sa{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sa{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sb{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sb{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sc{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sc{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .dl{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .dl{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sd{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sd{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s2{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s2{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .se{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .sh{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sh{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .si{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .si{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sx{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sx{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sr{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sr{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s1{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s1{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ss{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .m{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .m{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mb{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mb{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mf{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mh{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mh{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .il{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .il{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mo{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mo{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .o{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ow{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}}.chroma .c{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ch{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cm{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cm{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .c1{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c1{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cs{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cs{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cp{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cp{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cpf{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gi{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gi{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .go{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .go{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gp{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gp{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gs{font-weight:600}.chroma .gt,.chroma .gu{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gl{text-decoration:underline}.relative{position:relative}.m-auto{margin:auto}.m-1{margin:.25rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-3{margin-bottom:.75rem}.mt-8{margin-top:2rem}.mb-12{margin-bottom:3rem}.mt-12{margin-top:3rem}.mt-10{margin-top:2.5rem}.mt-0{margin-top:0}.ml-2{margin-left:.5rem}.mb-1{margin-bottom:.25rem}.mt-6{margin-top:1.5rem}.mr-3{margin-right:.75rem}.-mt-1{margin-top:-.25rem}.ml-3{margin-left:.75rem}.\!mt-0{margin-top:0!important}.\!mb-0{margin-bottom:0!important}.mr-4{margin-right:1rem}.ml-1{margin-left:.25rem}.\!mb-9{margin-bottom:2.25rem!important}.mb-8{margin-bottom:2rem}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.h-screen{height:100vh}.h-24{height:6rem}.h-full{height:100%}.h-36{height:9rem}.w-36{width:9rem}.w-full{width:100%}.w-24{width:6rem}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-7xl{max-width:80rem}.max-w-prose{max-width:65ch}.max-w-full{max-width:100%}.flex-grow{flex-grow:1}.cursor-default{cursor:default}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-hidden{overflow:hidden}.rounded-md{border-radius:.375rem}.rounded-full{border-radius:9999px}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-gray-400{--tw-border-opacity:1;border-color:rgba(161,161,170,var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(167,139,250,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(221,214,254,var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(212,212,216,var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.p-1{padding:.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-\[2px\]{padding-top:2px;padding-bottom:2px}.px-2{padding-left:.5rem;padding-right:.5rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-8{padding-top:2rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\[0\.6rem\]{font-size:.6rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-7{line-height:1.75rem}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.text-gray-400{--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.\!text-white{--tw-text-opacity:1!important;color:rgba(255,255,255,var(--tw-text-opacity))!important}.\!no-underline{text-decoration:none!important}.first\:mt-8:first-child{margin-top:2rem}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(139,92,246,var(--tw-bg-opacity))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1!important;background-color:rgba(139,92,246,var(--tw-bg-opacity))!important}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:underline:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.dark\:prose-light{color:#a1a1aa}.dark\:prose-light a{color:#a78bfa}.dark\:prose-light strong{color:#fff}.dark\:prose-light ol>li:before{color:#a1a1aa}.dark\:prose-light ul>li:before{background-color:#52525b}.dark\:prose-light hr{border-color:#e4e4e7}.dark\:prose-light blockquote{color:#e4e4e7;border-left-color:#52525b}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:#fff}.dark\:prose-light figure figcaption{color:#a1a1aa}.dark\:prose-light code{color:#e879f9}.dark\:prose-light a code{color:#fff}.dark\:prose-light pre{color:#e4e4e7;background-color:#3f3f46}.dark\:prose-light pre code{color:#e4e4e7}.dark\:prose-light thead{color:#fff;border-bottom-color:#a1a1aa}.dark\:prose-light tbody tr{border-bottom-color:#52525b}.dark\:prose-light kbd{background-color:#3f3f46;color:#d4d4d8}.dark\:prose-light mark{background-color:#e879f9}.dark\:border-primary-600{--tw-border-opacity:1;border-color:rgba(124,58,237,var(--tw-border-opacity))}.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgba(82,82,91,var(--tw-border-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgba(39,39,42,var(--tw-bg-opacity))}.dark\:bg-primary-400{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity))}.dark\:bg-primary-900{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}.dark\:bg-primary-800{--tw-bg-opacity:1;background-color:rgba(91,33,182,var(--tw-bg-opacity))}.dark\:text-gray-500{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.dark\:text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.dark\:text-gray-600{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}.dark\:text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.dark\:hover\:bg-primary-400:hover{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:hover\:\!bg-primary-700:hover{--tw-bg-opacity:1!important;background-color:rgba(109,40,217,var(--tw-bg-opacity))!important}.dark\:hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}}@media (min-width:640px){.sm\:mr-7{margin-right:1.75rem}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:last\:mr-0:last-child{margin-right:0}}@media (min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media (min-width:1024px){.lg\:w-1\/4{width:25%}.lg\:px-32{padding-left:8rem;padding-right:8rem}}@media (min-width:1280px){.xl\:w-1\/5{width:20%}} \ No newline at end of file +/*! tailwindcss v2.2.7 | MIT License | https://tailwindcss.com*//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:initial;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a1a1aa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#a1a1aa}input::placeholder,textarea::placeholder{opacity:1;color:#a1a1aa}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(228,228,231,var(--tw-border-opacity))}.prose{color:#3f3f46;max-width:65ch}.prose [class~=lead]{color:#52525b;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:#6d28d9;text-decoration:underline;font-weight:500}.prose a:hover{background-color:#7c3aed;color:#fff;text-decoration:none}.prose strong{color:#18181b;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#71717a;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d4d4d8;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e4e4e7;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#18181b;border-left-width:.25rem;border-left-color:#e4e4e7;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#18181b;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#18181b;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333;position:relative}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#18181b;font-weight:600;position:relative}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#71717a;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#a21caf;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#18181b}.prose pre{color:#e4e4e7;background-color:#fafafa;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:400;color:#3f3f46;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:#18181b;font-weight:600;border-bottom-width:1px;border-bottom-color:#d4d4d8}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e4e4e7}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose kbd{background-color:#e4e4e7;padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:#f5d0fe;padding:.1rem .2rem;border-radius:.12rem}.icon svg{height:1em;width:1em}.prose .heading-anchor{position:absolute;top:0;text-decoration:none;opacity:0;width:1.1em;left:-1.1em}.prose .heading-anchor:hover{background-color:initial;--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity));text-decoration:underline}.prose .heading-anchor:focus,.prose .heading-anchor:hover,.prose h2:hover>.heading-anchor,.prose h3:hover>.heading-anchor,.prose h4:hover>.heading-anchor{opacity:1}.no-prose>p{margin-top:0}.no-prose>p:last-child{margin-bottom:0}.prose .chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.prose .chroma{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(228,228,231,var(--tw-text-opacity))}}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding:.75rem 1rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity));padding-left:1rem;padding-right:1rem}@media (prefers-color-scheme:dark){.chroma .hl{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .lnt{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ln{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .k{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kc{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .kd{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kd{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kp{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kp{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kr{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kr{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kt{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kt{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .n{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .n{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .na{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .na{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nb{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nb{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .bp{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .bp{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .no{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .no{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nd{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nd{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ni{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ni{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ne{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ne{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nf{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .fm{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .fm{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nl{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nl{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .nn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nx{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nx{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .py{color:#cebc3a}.chroma .nt{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nt{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nv{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nv{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vg{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .vi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vm{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vm{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .l{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .l{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ld{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ld{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sa{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sa{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sb{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sb{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sc{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sc{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .dl{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .dl{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sd{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sd{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s2{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s2{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .se{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .sh{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sh{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .si{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .si{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sx{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sx{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sr{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sr{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s1{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s1{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ss{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .m{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .m{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mb{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mb{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mf{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mh{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mh{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .il{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .il{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mo{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mo{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .o{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ow{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}}.chroma .c{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ch{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cm{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cm{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .c1{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c1{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cs{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cs{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cp{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cp{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cpf{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gi{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gi{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .go{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .go{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gp{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gp{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gs{font-weight:600}.chroma .gt,.chroma .gu{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gl{text-decoration:underline}.relative{position:relative}.m-auto{margin:auto}.m-1{margin:.25rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-3{margin-bottom:.75rem}.mt-8{margin-top:2rem}.mb-12{margin-bottom:3rem}.mt-12{margin-top:3rem}.mt-10{margin-top:2.5rem}.mt-0{margin-top:0}.ml-2{margin-left:.5rem}.mb-1{margin-bottom:.25rem}.mt-6{margin-top:1.5rem}.mr-3{margin-right:.75rem}.-mt-1{margin-top:-.25rem}.ml-3{margin-left:.75rem}.\!mt-0{margin-top:0!important}.\!mb-0{margin-bottom:0!important}.mr-4{margin-right:1rem}.ml-1{margin-left:.25rem}.\!mb-9{margin-bottom:2.25rem!important}.mb-8{margin-bottom:2rem}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-screen{height:100vh}.h-24{height:6rem}.h-full{height:100%}.h-36{height:9rem}.w-36{width:9rem}.w-full{width:100%}.w-24{width:6rem}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-7xl{max-width:80rem}.max-w-prose{max-width:65ch}.max-w-full{max-width:100%}.flex-grow{flex-grow:1}.cursor-default{cursor:default}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-hidden{overflow:hidden}.rounded-md{border-radius:.375rem}.rounded-full{border-radius:9999px}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-gray-400{--tw-border-opacity:1;border-color:rgba(161,161,170,var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(167,139,250,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(221,214,254,var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(212,212,216,var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.p-1{padding:.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-\[2px\]{padding-top:2px;padding-bottom:2px}.px-2{padding-left:.5rem;padding-right:.5rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-8{padding-top:2rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\[0\.6rem\]{font-size:.6rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-7{line-height:1.75rem}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.text-gray-400{--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(139,92,246,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.\!text-white{--tw-text-opacity:1!important;color:rgba(255,255,255,var(--tw-text-opacity))!important}.\!no-underline{text-decoration:none!important}.first\:mt-8:first-child{margin-top:2rem}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(139,92,246,var(--tw-bg-opacity))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1!important;background-color:rgba(139,92,246,var(--tw-bg-opacity))!important}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:underline:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.dark\:prose-light{color:#a1a1aa}.dark\:prose-light a{color:#a78bfa}.dark\:prose-light strong{color:#fff}.dark\:prose-light ol>li:before{color:#a1a1aa}.dark\:prose-light ul>li:before{background-color:#52525b}.dark\:prose-light hr{border-color:#e4e4e7}.dark\:prose-light blockquote{color:#e4e4e7;border-left-color:#52525b}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:#fff}.dark\:prose-light figure figcaption{color:#a1a1aa}.dark\:prose-light code{color:#e879f9}.dark\:prose-light a code{color:#fff}.dark\:prose-light pre{color:#e4e4e7;background-color:#3f3f46}.dark\:prose-light pre code{color:#e4e4e7}.dark\:prose-light thead{color:#fff;border-bottom-color:#a1a1aa}.dark\:prose-light tbody tr{border-bottom-color:#52525b}.dark\:prose-light kbd{background-color:#3f3f46;color:#d4d4d8}.dark\:prose-light mark{background-color:#e879f9}.dark\:border-primary-600{--tw-border-opacity:1;border-color:rgba(124,58,237,var(--tw-border-opacity))}.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgba(82,82,91,var(--tw-border-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgba(39,39,42,var(--tw-bg-opacity))}.dark\:bg-primary-400{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity))}.dark\:bg-primary-900{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}.dark\:bg-primary-800{--tw-bg-opacity:1;background-color:rgba(91,33,182,var(--tw-bg-opacity))}.dark\:text-gray-500{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.dark\:text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.dark\:text-gray-600{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}.dark\:text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.dark\:hover\:bg-primary-400:hover{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:hover\:\!bg-primary-700:hover{--tw-bg-opacity:1!important;background-color:rgba(109,40,217,var(--tw-bg-opacity))!important}.dark\:hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}}@media (min-width:640px){.sm\:mr-7{margin-right:1.75rem}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:last\:mr-0:last-child{margin-right:0}}@media (min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media (min-width:1024px){.lg\:w-1\/4{width:25%}.lg\:px-32{padding-left:8rem;padding-right:8rem}}@media (min-width:1280px){.xl\:w-1\/5{width:20%}} \ No newline at end of file From 7f59d04d392ab884f79c0cdbb5bd066a62c3564f Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 18 Aug 2021 12:03:51 +1000 Subject: [PATCH 08/15] =?UTF-8?q?=E2=9E=95=20Add=20tailwind-underline-util?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 13 +++++++++++++ package.json | 1 + tailwind.config.js | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 90db93c2..ca705215 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@tailwindcss/typography": "^0.4.1", "prettier": "^2.3.2", "prettier-plugin-go-template": "^0.0.11", + "tailwind-underline-utils": "^1.1.3", "tailwindcss": "^2.2.7" } }, @@ -1379,6 +1380,12 @@ "node": ">=4" } }, + "node_modules/tailwind-underline-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tailwind-underline-utils/-/tailwind-underline-utils-1.1.3.tgz", + "integrity": "sha512-8FSynb8KOBFj7Y1wurCzx0MBAQtdOuRWlCk5wXFImI5ZfJ2yiRLvNbybiJ6pjWz5Htr+lStnowcTXl/00s8xRw==", + "dev": true + }, "node_modules/tailwindcss": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.7.tgz", @@ -2587,6 +2594,12 @@ "has-flag": "^3.0.0" } }, + "tailwind-underline-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tailwind-underline-utils/-/tailwind-underline-utils-1.1.3.tgz", + "integrity": "sha512-8FSynb8KOBFj7Y1wurCzx0MBAQtdOuRWlCk5wXFImI5ZfJ2yiRLvNbybiJ6pjWz5Htr+lStnowcTXl/00s8xRw==", + "dev": true + }, "tailwindcss": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.7.tgz", diff --git a/package.json b/package.json index c8c5bc36..fb535aef 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@tailwindcss/typography": "^0.4.1", "prettier": "^2.3.2", "prettier-plugin-go-template": "^0.0.11", + "tailwind-underline-utils": "^1.1.3", "tailwindcss": "^2.2.7" } } diff --git a/tailwind.config.js b/tailwind.config.js index 3e8fa598..8af04257 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -143,5 +143,5 @@ module.exports = { typography: ["dark"], }, }, - plugins: [require("@tailwindcss/typography")], + plugins: [require("@tailwindcss/typography"), require("tailwind-underline-utils")], }; From 70300226205b1c19367fe05bd570ecb646f92d81 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 18 Aug 2021 12:54:18 +1000 Subject: [PATCH 09/15] =?UTF-8?q?=F0=9F=92=84=20Style=20updates=20to=20enh?= =?UTF-8?q?ance=20design=20consistency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 +- assets/css/main.css | 14 +++++ exampleSite/content/_index.md | 15 +++++ exampleSite/layouts/partials/home/custom.html | 55 ++++++++----------- layouts/_default/list.html | 2 +- layouts/_default/single.html | 6 +- layouts/_default/taxonomy.html | 8 ++- layouts/_default/term.html | 2 +- layouts/partials/article-link.html | 2 +- layouts/partials/article-meta.html | 2 +- layouts/partials/article-pagination.html | 10 ++-- layouts/partials/badge.html | 2 +- layouts/partials/breadcrumbs.html | 6 +- layouts/partials/footer.html | 14 ++++- layouts/partials/header.html | 14 ++++- layouts/partials/section-header.html | 9 +++ layouts/partials/section-heading.html | 7 --- layouts/shortcodes/button.html | 9 +-- static/css/main.css | 2 +- tailwind.config.js | 14 ++++- 20 files changed, 126 insertions(+), 72 deletions(-) create mode 100644 layouts/partials/section-header.html delete mode 100644 layouts/partials/section-heading.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 999fc1d2..f231c0fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,7 @@ All notable changes to Congo will be documented in this file. -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). +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). --- @@ -13,10 +12,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Breadcrumbs - i18n support +- CSS transitions ### Changed - Consolidated author configuration parameters into `config.toml` +- General style tweaks to enhance design consistency ### Fixed diff --git a/assets/css/main.css b/assets/css/main.css index daf510e1..9cbcfe92 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -1,6 +1,11 @@ @tailwind base; @tailwind components; +body a, +body button { + @apply transition; +} + /* Scale SVG icons to text size */ .icon svg { height: 1em; @@ -29,6 +34,15 @@ @apply mt-0 last:mb-0; } +/* Article pagination */ +.article-pagination a:hover .article-pagination-title { + @apply underline underline-primary-500; +} + +.article-pagination a:hover .article-pagination-direction { + @apply text-primary-700 dark:text-primary-400; +} + /* -- Chroma Highlight -- */ /* Background */ .prose .chroma { diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md index f228f37f..273d66f8 100755 --- a/exampleSite/content/_index.md +++ b/exampleSite/content/_index.md @@ -7,6 +7,21 @@ description: "This is a demo of the Congo theme for Hugo." A simple, lightweight theme for Hugo built with Tailwind CSS. {{< /lead >}} +
    + + {{< icon "exclamation-triangle" >}} + + + This is a demo of the page layout. + + +
    + This is a demo site built entirely using Congo. It also contains a complete set of [theme documentation](/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. Explore the [sample pages](/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](/docs/installation/) to get started. diff --git a/exampleSite/layouts/partials/home/custom.html b/exampleSite/layouts/partials/home/custom.html index 440c44a2..ea4f0452 100644 --- a/exampleSite/layouts/partials/home/custom.html +++ b/exampleSite/layouts/partials/home/custom.html @@ -1,38 +1,27 @@ - - -
    - - {{ partial "icon.html" "exclamation-triangle" }} - - - This is a demo of the `page` layout. - - -
    -
    {{ partial "partials/home/page.html" . }}
    -
    diff --git a/layouts/_default/taxonomy.html b/layouts/_default/taxonomy.html index ad46d4bf..e9c88b94 100644 --- a/layouts/_default/taxonomy.html +++ b/layouts/_default/taxonomy.html @@ -1,15 +1,17 @@ {{ define "main" }} - {{ partial "section-heading.html" . }} + {{ partial "section-header.html" . }}
    {{ range .Data.Terms }}

    - {{ .Page.Title }} {{ if $.Site.Params.taxonomy.showTermCount | default true }} - · + · {{ .Count }} {{ end }} diff --git a/layouts/_default/term.html b/layouts/_default/term.html index 2d5d6baa..eba31292 100644 --- a/layouts/_default/term.html +++ b/layouts/_default/term.html @@ -1,5 +1,5 @@ {{ define "main" }} - {{ partial "section-heading.html" . }} + {{ partial "section-header.html" . }}
    {{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups }}

    {{ .Key }}

    diff --git a/layouts/partials/article-link.html b/layouts/partials/article-link.html index 8d3efe67..200d9fbf 100644 --- a/layouts/partials/article-link.html +++ b/layouts/partials/article-link.html @@ -11,7 +11,7 @@ >↗ {{ else }} - {{ .Title }} + {{ .Title }} {{ end }} {{ if and .Draft .Site.Params.article.showDraftLabel }} {{ partial "badge.html" "Draft" }} diff --git a/layouts/partials/article-meta.html b/layouts/partials/article-meta.html index a0414232..6edcb1a0 100644 --- a/layouts/partials/article-meta.html +++ b/layouts/partials/article-meta.html @@ -8,7 +8,7 @@ (.Params.showReadingTime | default (.Site.Params.article.showReadingTime | default true)) (ne .ReadingTime 0) }} - · + · {{ end }} {{ if and (.Params.showReadingTime | default (.Site.Params.article.showReadingTime | default true)) (ne .ReadingTime 0) }} diff --git a/layouts/partials/article-pagination.html b/layouts/partials/article-pagination.html index 30457cf4..85442031 100644 --- a/layouts/partials/article-pagination.html +++ b/layouts/partials/article-pagination.html @@ -1,14 +1,14 @@ {{ if .Params.showPagination | default (.Site.Params.article.showPagination | default true) }} {{ if or .NextInSection .PrevInSection }} -
    +

    {{ if .NextInSection }} - + - {{ .NextInSection.Title }} + {{ .NextInSection.Title }} {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} {{ end }} diff --git a/layouts/partials/badge.html b/layouts/partials/badge.html index b96405c3..4da1fcba 100644 --- a/layouts/partials/badge.html +++ b/layouts/partials/badge.html @@ -1,5 +1,5 @@ {{ . }} diff --git a/layouts/partials/breadcrumbs.html b/layouts/partials/breadcrumbs.html index 2840fd5d..520a8c91 100644 --- a/layouts/partials/breadcrumbs.html +++ b/layouts/partials/breadcrumbs.html @@ -1,4 +1,4 @@ -
      +
        {{ template "crumb" (dict "p1" . "p2" .) }}
      {{ define "crumb" }} @@ -8,6 +8,8 @@ {{ template "crumb" (dict "p1" .p1.Site.Home "p2" .p2 ) }} {{ end }}
    1. - {{ .p1.Title }}/ + {{ .p1.Title }}/
    2. {{ end }} diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index 913af90d..1da851e6 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -13,9 +13,19 @@ {{ if .Site.Params.attribution | default true }}

      {{ i18n "footer.powered_by" }} - Hugo + Hugo & - Congo + Congo

      {{ end }} {{/* Extend footer - eg. for extra scripts, etc. */}} diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 4637df64..6199ad07 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -1,12 +1,22 @@

    +
    + {{ partial "recent-articles.html" . }} +
    diff --git a/layouts/partials/home/profile.html b/layouts/partials/home/profile.html index 31626cef..b0b12ae9 100644 --- a/layouts/partials/home/profile.html +++ b/layouts/partials/home/profile.html @@ -1,12 +1,9 @@
    -
    +
    {{ with .Site.Author.image }} {{ end }} @@ -19,3 +16,6 @@
    {{ .Content | emojify }}
    +
    + {{ partial "recent-articles.html" . }} +
    diff --git a/layouts/partials/recent-articles.html b/layouts/partials/recent-articles.html new file mode 100644 index 00000000..c0422c1a --- /dev/null +++ b/layouts/partials/recent-articles.html @@ -0,0 +1,6 @@ +{{ if .Site.Params.homepage.showRecent | default false }} +

    {{ i18n "shortcode.recent_articles" | emojify }}

    + {{ range first 5 (.Paginate (where .Site.RegularPages "Type" "in" .Site.Params.homepage.mainSections)).Pages }} + {{ partial "article-link.html" . }} + {{ end }} +{{ end }} diff --git a/layouts/shortcodes/icon.html b/layouts/shortcodes/icon.html index 4c627260..3afb45b5 100644 --- a/layouts/shortcodes/icon.html +++ b/layouts/shortcodes/icon.html @@ -3,6 +3,6 @@ {{ if $icon }} {{ $icon.Content | safeHTML }} {{ else }} - {{ i18n "shortcode.no_icon" }} + {{ i18n "shortcode.icon_none" }} {{ end }} diff --git a/static/css/main.css b/static/css/main.css index 17603adb..00a770ad 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1 +1 @@ -/*! tailwindcss v2.2.7 | MIT License | https://tailwindcss.com*//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:initial;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a1a1aa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#a1a1aa}input::placeholder,textarea::placeholder{opacity:1;color:#a1a1aa}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(228,228,231,var(--tw-border-opacity))}.prose{color:#3f3f46;max-width:65ch}.prose [class~=lead]{color:#52525b;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:#6d28d9;text-decoration:underline;font-weight:500;-webkit-text-decoration-color:#c4b5fd;text-decoration-color:#c4b5fd}.prose a:hover{background-color:#7c3aed;border-radius:.09rem;color:#fff;text-decoration:none}.prose strong{color:#18181b;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#71717a;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d4d4d8;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e4e4e7;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#18181b;border-left-width:.25rem;border-left-color:#ddd6fe;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#18181b;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#18181b;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333;position:relative}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#18181b;font-weight:600;position:relative}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#71717a;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#a21caf;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#18181b}.prose pre{color:#e4e4e7;background-color:#fafafa;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:400;color:#3f3f46;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:#18181b;font-weight:600;border-bottom-width:1px;border-bottom-color:#d4d4d8}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e4e4e7}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose kbd{background-color:#e4e4e7;padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:#f5d0fe;padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.icon svg{height:1em;width:1em}.prose .heading-anchor{position:absolute;top:0;text-decoration:none;opacity:0;width:1.1em;left:-1.1em}.prose .heading-anchor:hover{background-color:initial;--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity));text-decoration:underline}.prose .heading-anchor:focus,.prose .heading-anchor:hover,.prose h2:hover>.heading-anchor,.prose h3:hover>.heading-anchor,.prose h4:hover>.heading-anchor{opacity:1}.no-prose>p{margin-top:0}.no-prose>p:last-child{margin-bottom:0}.article-pagination a:hover .article-pagination-title{text-decoration:underline;-webkit-text-decoration-color:#8b5cf6;text-decoration-color:#8b5cf6}.article-pagination a:hover .article-pagination-direction{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.article-pagination a:hover .article-pagination-direction{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.prose .chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.prose .chroma{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(228,228,231,var(--tw-text-opacity))}}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding:.75rem 1rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity));padding-left:1rem;padding-right:1rem}@media (prefers-color-scheme:dark){.chroma .hl{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .lnt{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ln{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .k{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kc{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .kd{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kd{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kp{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kp{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kr{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kr{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kt{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kt{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .n{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .n{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .na{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .na{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nb{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nb{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .bp{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .bp{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .no{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .no{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nd{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nd{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ni{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ni{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ne{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ne{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nf{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .fm{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .fm{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nl{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nl{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .nn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nx{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nx{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .py{color:#cebc3a}.chroma .nt{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nt{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nv{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nv{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vg{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .vi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vm{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vm{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .l{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .l{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ld{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ld{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sa{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sa{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sb{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sb{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sc{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sc{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .dl{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .dl{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sd{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sd{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s2{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s2{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .se{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .sh{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sh{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .si{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .si{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sx{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sx{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sr{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sr{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s1{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s1{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ss{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .m{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .m{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mb{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mb{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mf{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mh{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mh{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .il{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .il{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mo{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mo{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .o{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ow{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}}.chroma .c{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ch{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cm{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cm{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .c1{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c1{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cs{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cs{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cp{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cp{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cpf{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gi{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gi{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .go{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .go{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gp{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gp{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gs{font-weight:600}.chroma .gt,.chroma .gu{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gl{text-decoration:underline}.relative{position:relative}.m-auto{margin:auto}.m-1{margin:.25rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-3{margin-bottom:.75rem}.mt-8{margin-top:2rem}.mb-12{margin-bottom:3rem}.mt-12{margin-top:3rem}.mt-10{margin-top:2.5rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.mr-3{margin-right:.75rem}.-mt-1{margin-top:-.25rem}.ml-3{margin-left:.75rem}.\!mt-0{margin-top:0!important}.\!mb-0{margin-bottom:0!important}.mr-4{margin-right:1rem}.ml-1{margin-left:.25rem}.mb-1{margin-bottom:.25rem}.\!mb-9{margin-bottom:2.25rem!important}.mb-8{margin-bottom:2rem}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-screen{height:100vh}.h-24{height:6rem}.h-full{height:100%}.h-36{height:9rem}.w-36{width:9rem}.w-full{width:100%}.w-24{width:6rem}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-7xl{max-width:80rem}.max-w-prose{max-width:65ch}.max-w-full{max-width:100%}.flex-grow{flex-grow:1}.cursor-default{cursor:default}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-gray-400{--tw-border-opacity:1;border-color:rgba(161,161,170,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(167,139,250,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(221,214,254,var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(212,212,216,var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.p-1{padding:.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pl-2{padding-left:.5rem}.pt-8{padding-top:2rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-\[0\.6rem\]{font-size:.6rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-7{line-height:1.75rem}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.text-gray-400{--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(139,92,246,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.\!text-white{--tw-text-opacity:1!important;color:rgba(255,255,255,var(--tw-text-opacity))!important}.\!no-underline{text-decoration:none!important}.underline-gray-300{-webkit-text-decoration-color:#d4d4d8;text-decoration-color:#d4d4d8}.underline-primary-300{-webkit-text-decoration-color:#c4b5fd;text-decoration-color:#c4b5fd}.underline-primary-500{-webkit-text-decoration-color:#8b5cf6;text-decoration-color:#8b5cf6}.underline-offset-small{text-underline-offset:2px}.underline-thickness-bold{text-decoration-thickness:2px}.first\:mt-8:first-child{margin-top:2rem}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(139,92,246,var(--tw-bg-opacity))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1!important;background-color:rgba(139,92,246,var(--tw-bg-opacity))!important}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:underline:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.dark\:prose-light{color:#a1a1aa}.dark\:prose-light a{color:#a78bfa;-webkit-text-decoration-color:#71717a;text-decoration-color:#71717a}.dark\:prose-light strong{color:#fff}.dark\:prose-light ol>li:before{color:#a1a1aa}.dark\:prose-light ul>li:before{background-color:#52525b}.dark\:prose-light hr{border-color:#e4e4e7}.dark\:prose-light blockquote{color:#e4e4e7;border-left-color:#4c1d95}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:#fff}.dark\:prose-light figure figcaption{color:#a1a1aa}.dark\:prose-light code{color:#e879f9}.dark\:prose-light a code{color:#fff}.dark\:prose-light pre{color:#e4e4e7;background-color:#3f3f46}.dark\:prose-light pre code{color:#e4e4e7}.dark\:prose-light thead{color:#fff;border-bottom-color:#a1a1aa}.dark\:prose-light tbody tr{border-bottom-color:#52525b}.dark\:prose-light kbd{background-color:#3f3f46;color:#d4d4d8}.dark\:prose-light mark{background-color:#e879f9}.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgba(82,82,91,var(--tw-border-opacity))}.dark\:border-primary-600{--tw-border-opacity:1;border-color:rgba(124,58,237,var(--tw-border-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgba(39,39,42,var(--tw-bg-opacity))}.dark\:bg-primary-400{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity))}.dark\:bg-primary-900{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}.dark\:bg-primary-800{--tw-bg-opacity:1;background-color:rgba(91,33,182,var(--tw-bg-opacity))}.dark\:text-gray-500{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.dark\:text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:text-gray-600{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}.dark\:text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.dark\:underline-gray-600{-webkit-text-decoration-color:#52525b;text-decoration-color:#52525b}.dark\:hover\:bg-primary-400:hover{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:hover\:\!bg-primary-700:hover{--tw-bg-opacity:1!important;background-color:rgba(109,40,217,var(--tw-bg-opacity))!important}.dark\:hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}}@media (min-width:640px){.sm\:mr-7{margin-right:1.75rem}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:last\:mr-0:last-child{margin-right:0}}@media (min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media (min-width:1024px){.lg\:w-1\/4{width:25%}.lg\:px-32{padding-left:8rem;padding-right:8rem}}@media (min-width:1280px){.xl\:w-1\/5{width:20%}} \ No newline at end of file +/*! tailwindcss v2.2.7 | MIT License | https://tailwindcss.com*//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:initial;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a1a1aa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#a1a1aa}input::placeholder,textarea::placeholder{opacity:1;color:#a1a1aa}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(228,228,231,var(--tw-border-opacity))}.prose{color:#3f3f46;max-width:65ch}.prose [class~=lead]{color:#52525b;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:#6d28d9;text-decoration:underline;font-weight:500;-webkit-text-decoration-color:#c4b5fd;text-decoration-color:#c4b5fd}.prose a:hover{background-color:#7c3aed;border-radius:.09rem;color:#fff;text-decoration:none}.prose strong{color:#18181b;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#71717a;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d4d4d8;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e4e4e7;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#18181b;border-left-width:.25rem;border-left-color:#ddd6fe;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#18181b;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#18181b;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333;position:relative}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#18181b;font-weight:600;position:relative}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#71717a;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#a21caf;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#18181b}.prose pre{color:#e4e4e7;background-color:#fafafa;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:400;color:#3f3f46;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:#18181b;font-weight:600;border-bottom-width:1px;border-bottom-color:#d4d4d8}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e4e4e7}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose kbd{background-color:#e4e4e7;padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:#f5d0fe;padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.icon svg{height:1em;width:1em}.prose .heading-anchor{position:absolute;top:0;text-decoration:none;opacity:0;width:1.1em;left:-1.1em}.prose .heading-anchor:hover{background-color:initial;--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity));text-decoration:underline}.prose .heading-anchor:focus,.prose .heading-anchor:hover,.prose h2:hover>.heading-anchor,.prose h3:hover>.heading-anchor,.prose h4:hover>.heading-anchor{opacity:1}.no-prose>p{margin-top:0}.no-prose>p:last-child{margin-bottom:0}.article-pagination a:hover .article-pagination-title{text-decoration:underline;-webkit-text-decoration-color:#8b5cf6;text-decoration-color:#8b5cf6}.article-pagination a:hover .article-pagination-direction{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.article-pagination a:hover .article-pagination-direction{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.prose .chroma{border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.prose .chroma{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(228,228,231,var(--tw-text-opacity))}}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding:.75rem 1rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity));padding-left:1rem;padding-right:1rem}@media (prefers-color-scheme:dark){.chroma .hl{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .lnt{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ln{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .k{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kc{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .kd{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kd{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kp{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kp{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kr{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kr{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .kt{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .kt{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .n{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .n{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .na{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .na{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nb{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nb{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .bp{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .bp{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .no{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .no{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nd{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nd{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ni{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ni{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .ne{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ne{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .nf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nf{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .fm{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .fm{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nl{--tw-text-opacity:1;color:rgba(112,26,117,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nl{--tw-text-opacity:1;color:rgba(245,208,254,var(--tw-text-opacity))}}.chroma .nn{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nn{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .nx{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nx{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .py{color:#cebc3a}.chroma .nt{--tw-text-opacity:1;color:rgba(134,25,143,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nt{--tw-text-opacity:1;color:rgba(240,171,252,var(--tw-text-opacity))}}.chroma .nv{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .nv{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vc{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vc{--tw-text-opacity:1;color:rgba(196,181,253,var(--tw-text-opacity))}}.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vg{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .vi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .vm{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .vm{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .l{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .l{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ld{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ld{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sa{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sa{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sb{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sb{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sc{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sc{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .dl{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .dl{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sd{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sd{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s2{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s2{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .se{--tw-text-opacity:1;color:rgba(217,70,239,var(--tw-text-opacity))}}.chroma .sh{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sh{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .si{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .si{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sx{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sx{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .sr{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .sr{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .s1{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .s1{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ss{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .m{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .m{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mb{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mb{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mf{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mf{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mh{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mh{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mi{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mi{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .il{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .il{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .mo{--tw-text-opacity:1;color:rgba(232,121,249,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .mo{--tw-text-opacity:1;color:rgba(192,38,211,var(--tw-text-opacity))}}.chroma .o{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ow{--tw-text-opacity:1;color:rgba(124,58,237,var(--tw-text-opacity))}}.chroma .c{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .ch{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cm{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cm{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .c1{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .c1{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cs{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cs{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cp{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cp{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .cpf{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gi{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gi{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .go{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .go{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gp{--tw-text-opacity:1;color:rgba(91,33,182,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chroma .gp{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}}.chroma .gs{font-weight:600}.chroma .gt,.chroma .gu{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.chroma .gl{text-decoration:underline}.relative{position:relative}.m-auto{margin:auto}.m-1{margin:.25rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-3{margin-bottom:.75rem}.mt-8{margin-top:2rem}.mb-12{margin-bottom:3rem}.mt-12{margin-top:3rem}.mt-10{margin-top:2.5rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.mr-3{margin-right:.75rem}.-mt-1{margin-top:-.25rem}.ml-3{margin-left:.75rem}.\!mt-0{margin-top:0!important}.\!mb-0{margin-bottom:0!important}.mr-4{margin-right:1rem}.ml-1{margin-left:.25rem}.mb-1{margin-bottom:.25rem}.\!mb-9{margin-bottom:2.25rem!important}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-screen{height:100vh}.h-24{height:6rem}.h-full{height:100%}.h-36{height:9rem}.w-36{width:9rem}.w-full{width:100%}.w-24{width:6rem}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-7xl{max-width:80rem}.max-w-prose{max-width:65ch}.max-w-full{max-width:100%}.flex-grow{flex-grow:1}.cursor-default{cursor:default}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-gray-400{--tw-border-opacity:1;border-color:rgba(161,161,170,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(167,139,250,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(221,214,254,var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(212,212,216,var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(237,233,254,var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.p-1{padding:.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pl-2{padding-left:.5rem}.pt-8{padding-top:2rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-\[0\.6rem\]{font-size:.6rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-7{line-height:1.75rem}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.text-gray-400{--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(139,92,246,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.\!text-white{--tw-text-opacity:1!important;color:rgba(255,255,255,var(--tw-text-opacity))!important}.\!no-underline{text-decoration:none!important}.underline-gray-300{-webkit-text-decoration-color:#d4d4d8;text-decoration-color:#d4d4d8}.underline-primary-300{-webkit-text-decoration-color:#c4b5fd;text-decoration-color:#c4b5fd}.underline-primary-500{-webkit-text-decoration-color:#8b5cf6;text-decoration-color:#8b5cf6}.underline-offset-small{text-underline-offset:2px}.underline-thickness-bold{text-decoration-thickness:2px}.first\:mt-8:first-child{margin-top:2rem}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(139,92,246,var(--tw-bg-opacity))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1!important;background-color:rgba(139,92,246,var(--tw-bg-opacity))!important}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(109,40,217,var(--tw-text-opacity))}.hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:underline:hover{text-decoration:underline}@media (prefers-color-scheme:dark){.dark\:prose-light{color:#a1a1aa}.dark\:prose-light a{color:#a78bfa;-webkit-text-decoration-color:#71717a;text-decoration-color:#71717a}.dark\:prose-light strong{color:#fff}.dark\:prose-light ol>li:before{color:#a1a1aa}.dark\:prose-light ul>li:before{background-color:#52525b}.dark\:prose-light hr{border-color:#e4e4e7}.dark\:prose-light blockquote{color:#e4e4e7;border-left-color:#4c1d95}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:#fff}.dark\:prose-light figure figcaption{color:#a1a1aa}.dark\:prose-light code{color:#e879f9}.dark\:prose-light a code{color:#fff}.dark\:prose-light pre{color:#e4e4e7;background-color:#3f3f46}.dark\:prose-light pre code{color:#e4e4e7}.dark\:prose-light thead{color:#fff;border-bottom-color:#a1a1aa}.dark\:prose-light tbody tr{border-bottom-color:#52525b}.dark\:prose-light kbd{background-color:#3f3f46;color:#d4d4d8}.dark\:prose-light mark{background-color:#e879f9}.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgba(82,82,91,var(--tw-border-opacity))}.dark\:border-primary-600{--tw-border-opacity:1;border-color:rgba(124,58,237,var(--tw-border-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgba(39,39,42,var(--tw-bg-opacity))}.dark\:bg-primary-400{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(63,63,70,var(--tw-bg-opacity))}.dark\:bg-primary-900{--tw-bg-opacity:1;background-color:rgba(76,29,149,var(--tw-bg-opacity))}.dark\:bg-primary-800{--tw-bg-opacity:1;background-color:rgba(91,33,182,var(--tw-bg-opacity))}.dark\:text-gray-500{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.dark\:text-primary-400{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:text-gray-600{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}.dark\:text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.dark\:underline-gray-600{-webkit-text-decoration-color:#52525b;text-decoration-color:#52525b}.dark\:hover\:bg-primary-400:hover{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.dark\:hover\:\!bg-primary-700:hover{--tw-bg-opacity:1!important;background-color:rgba(109,40,217,var(--tw-bg-opacity))!important}.dark\:hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(167,139,250,var(--tw-text-opacity))}.dark\:hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}}@media (min-width:640px){.sm\:mr-7{margin-right:1.75rem}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:last\:mr-0:last-child{margin-right:0}}@media (min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media (min-width:1024px){.lg\:w-1\/4{width:25%}.lg\:px-32{padding-left:8rem;padding-right:8rem}}@media (min-width:1280px){.xl\:w-1\/5{width:20%}} \ No newline at end of file From 9d3af655f4a16595970b692907fb5944d5acd081 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 18 Aug 2021 16:01:53 +1000 Subject: [PATCH 11/15] =?UTF-8?q?=E2=9C=A8=20Add=20Hugo=20module=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 9 +++++---- go.mod | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 go.mod diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bc4f69e..0135c446 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to Congo will be documented in this file. -Things that need attention when upgrading from a prior version are marked 🚨. +Things that need 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). @@ -16,12 +16,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - i18n support - Recent articles partial - CSS transitions +- Hugo module support ### Changed -- 🚨 Renamed parameter: `homepage.showList` -> `homepage.showRecent` -- 🚨 Renamed parameter: `homepage.listSections` -> `homepage.mainSections` -- 🚨 Consolidated author configuration parameters into `config.toml` +- ⚠️ Renamed parameter: `homepage.showList` -> `homepage.showRecent` +- ⚠️ Renamed parameter: `homepage.listSections` -> `homepage.mainSections` +- ⚠️ Consolidated author configuration parameters into `config.toml` - General style tweaks to enhance design consistency ### Fixed diff --git a/go.mod b/go.mod new file mode 100644 index 00000000..c3b624da --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/jpanther/congo + +go 1.16 From c5107ab693ba801221da3adea5d60ebd8f74214a Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 18 Aug 2021 17:06:14 +1000 Subject: [PATCH 12/15] =?UTF-8?q?=E2=9C=A8=20Add=20JSON-LD=20structured=20?= =?UTF-8?q?metadata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +- config/_default/params.toml | 4 ++- exampleSite/content/docs/configuration.md | 3 +- layouts/partials/head.html | 2 +- layouts/partials/recent-articles.html | 2 +- layouts/partials/schema.html | 40 +++++++++++++++++++++++ 6 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 layouts/partials/schema.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 0135c446..e67c6f27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,11 +17,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Recent articles partial - CSS transitions - Hugo module support +- JSON-LD structured metadata ### Changed - ⚠️ Renamed parameter: `homepage.showList` -> `homepage.showRecent` -- ⚠️ Renamed parameter: `homepage.listSections` -> `homepage.mainSections` +- ⚠️ Renamed parameter: `homepage.listSections` -> `mainSections` - ⚠️ Consolidated author configuration parameters into `config.toml` - General style tweaks to enhance design consistency diff --git a/config/_default/params.toml b/config/_default/params.toml index 594f3a53..7648c2cc 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -5,10 +5,12 @@ # Refer to the theme docs for more details about each of these parameters. # https://jpanther.github.io/Congo/docs/configuration/#theme-parameters +# description = "My awesome website" +# mainSections = ["section1", "section2"] + [homepage] layout = "page" # valid options: page, profile, custom showRecent = false - # mainSections = ["section1", "section2"] [article] showDate = true diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index 07976035..b5f20820 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -56,9 +56,10 @@ Many of the article defaults here can be overridden on a per article basis by sp |Name|Type|Default|Description| | --- | --- | --- | --- | +|`description`|string|_Not set_|The description of the website for metadata purposes.| +|`mainSections`|array of strings|_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.| |`homepage.layout`|string|`"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](/docs/homepage-layout/) section for more details.| |`homepage.showRecent`|boolean|`false`|Whether or not to display the recent articles list on the homepage.| -|`homepage.mainSections`|array of strings|_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.| |`article.showDate`|boolean|`true`|Whether or not article dates are displayed.| |`article.dateFormat`|string|`"2 January 2006"`|How article dates are formatted. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats.| |`article.showAuthor`|boolean|`true`|Whether or not the author box is displayed in the article footer.| diff --git a/layouts/partials/head.html b/layouts/partials/head.html index d53a5705..52063286 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -57,7 +57,7 @@ {{ template "_internal/opengraph.html" . }} {{ template "_internal/twitter_cards.html" . }} {{/* Schema */}} - {{ template "_internal/schema.html" . }} + {{ partial "schema.html" . }} {{/* Generator */}} {{ if .Site.Params.attribution | default true }} {{ hugo.Generator }} diff --git a/layouts/partials/recent-articles.html b/layouts/partials/recent-articles.html index c0422c1a..4d79fc33 100644 --- a/layouts/partials/recent-articles.html +++ b/layouts/partials/recent-articles.html @@ -1,6 +1,6 @@ {{ if .Site.Params.homepage.showRecent | default false }}

    {{ i18n "shortcode.recent_articles" | emojify }}

    - {{ range first 5 (.Paginate (where .Site.RegularPages "Type" "in" .Site.Params.homepage.mainSections)).Pages }} + {{ range first 5 (.Paginate (where .Site.RegularPages "Type" "in" .Site.Params.mainSections)).Pages }} {{ partial "article-link.html" . }} {{ end }} {{ end }} diff --git a/layouts/partials/schema.html b/layouts/partials/schema.html new file mode 100644 index 00000000..55fdf6cb --- /dev/null +++ b/layouts/partials/schema.html @@ -0,0 +1,40 @@ +{{ if .IsHome -}} + +{{ else if .IsPage }} + {{- $iso8601 := "2006-01-02T15:04:05-07:00" -}} + +{{ end }} From 45dc42f4f57079e189697c0ffb82d38a7aff024e Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 18 Aug 2021 17:10:40 +1000 Subject: [PATCH 13/15] =?UTF-8?q?=F0=9F=94=A7=20Change=20package=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca705215..440d9d0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "congo", + "name": "hugo-congo-theme", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "congo", + "name": "hugo-congo-theme", "version": "1.0.0", "license": "MIT", "devDependencies": { diff --git a/package.json b/package.json index fb535aef..73c6760f 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "congo", + "name": "hugo-congo-theme", "version": "1.0.0", "description": "Congo theme for Hugo", "main": "index.js", From 7387bdbc23088e3cb4f6525a2cc561de9b3cd4ab Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:03:31 +1000 Subject: [PATCH 14/15] =?UTF-8?q?=F0=9F=94=A8=20Add=20release=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- release.sh | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 release.sh diff --git a/release.sh b/release.sh new file mode 100755 index 00000000..53bbd406 --- /dev/null +++ b/release.sh @@ -0,0 +1,39 @@ +#!bin/bash + +# get current branch +branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') + +# push any local changes +git push + +# checkout stable branch (this will catch uncommitted changes) +git checkout stable || exit 1 + +# branch validation +if [ $branch = "dev" ]; then + echo "Enter the release version (eg. v1.0.0):" + read version + + echo "Started releasing $version for Congo..." + + # pull latest from stable + git pull + + # merge in changes from dev branch + git merge --no-ff dev -m "🔖 Release $version" + + # create tag + git tag $version + + # push commit and tag to remote + git push + git push --tags + + echo "$version successfully released!" + echo "Returning to dev branch..." + + git checkout dev + +else + echo "Releases can only be published from the dev branch!" +fi From 183c57f61e147e9110c200ca8c84408c4eacc4cb Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:03:59 +1000 Subject: [PATCH 15/15] =?UTF-8?q?=F0=9F=93=9D=20Update=20changelog=20for?= =?UTF-8?q?=20release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e67c6f27..22390215 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), --- -## [Unreleased] +## [1.1.0] - 2020-08-18 ### Added @@ -53,5 +53,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Advanced customisation using simple Tailwind colour definitions and styles - Fully documented -[unreleased]: https://github.com/jpanther/Congo/compare/v1.0.0...HEAD +[unreleased]: https://github.com/jpanther/Congo/compare/v1.1.0...HEAD +[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