diff --git a/CHANGELOG.md b/CHANGELOG.md index b795a1c7..981b75ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added - Multiple colour schemes +- Edit links on article pages - Icons for Foursquare and Pinterest ### Fixed diff --git a/assets/icons/edit.svg b/assets/icons/edit.svg new file mode 100644 index 00000000..174efd87 --- /dev/null +++ b/assets/icons/edit.svg @@ -0,0 +1 @@ + diff --git a/config/_default/params.toml b/config/_default/params.toml index 21678a2e..cf5abc36 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -19,6 +19,9 @@ colorScheme = "congo" showAuthor = true showBreadcrumbs = false showDraftLabel = true + showEdit = false + # editURL = "https://github.com/username/repo/" + editAppendPath = true showHeadingAnchors = true showPagination = true showReadingTime = true diff --git a/exampleSite/config.toml b/exampleSite/config.toml index 758fc195..296fd896 100755 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -39,6 +39,9 @@ relativeURLs = true [params.article] showBreadcrumbs = true + showEdit = true + editURL = "https://github.com/jpanther/congo/tree/dev/exampleSite/content/" + editAppendPath = true [[menu.main]] name = "Docs" diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index cbbd135a..183e7898 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -66,6 +66,9 @@ Many of the article defaults here can be overridden on a per article basis by sp |`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.showEdit`|boolean|`false`|Whether or not the link to edit the article content should be displayed.| +|`article.editURL`|string|_Not set_|When `article.showEdit` is active, the URL for the edit link.| +|`article.editAppendPath`|boolean|`true`|When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`.| |`article.showHeadingAnchors`|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.| diff --git a/exampleSite/content/docs/front-matter.md b/exampleSite/content/docs/front-matter.md index 553ae9a2..913f070b 100644 --- a/exampleSite/content/docs/front-matter.md +++ b/exampleSite/content/docs/front-matter.md @@ -19,6 +19,9 @@ Front matter parameter default values are inherited from the theme's [base confi |`externalUrl`|string|_Not set_|If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website.| |`showDate`|boolean|`article.showDate`|Whether or not article dates are displayed.| |`showAuthor`|boolean|`article.showAuthor`|Whether or not the author box is displayed in the article footer.| +|`showEdit`|boolean|`article.showEdit`|Whether or not the link to edit the article content should be displayed.| +|`editURL`|string|`article.editURL`|When `showEdit` is active, the URL for the edit link.| +|`editAppendPath`|boolean|`article.editAppendPath`|When `showEdit` is active, whether or not the path to the current article should be appended to the URL set at `editURL`.| |`showHeadingAnchors`|boolean|`article.showHeadingAnchors`|Whether or not heading anchor links are displayed alongside headings within this article.| |`showPagination`|boolean|`article.showPagination`|Whether or not the next/previous article links are displayed in the article footer.| |`showReadingTime`|boolean|`article.showReadingTime`|Whether or not article reading times are displayed.| diff --git a/i18n/en.yaml b/i18n/en.yaml index b7075399..ffda4d4a 100644 --- a/i18n/en.yaml +++ b/i18n/en.yaml @@ -1,6 +1,7 @@ article: anchor_label: "Anchor" draft: "Draft" + edit_title: "Edit content" reading_time: one: "{{ .Count }} min" other: "{{ .Count }} mins" diff --git a/layouts/_default/single.html b/layouts/_default/single.html index f1f90c24..ebda4b5b 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -8,10 +8,7 @@ {{ .Title | emojify }}
- {{ partial "article-meta.html" . }} - {{ if and .Draft .Site.Params.article.showDraftLabel }} - {{ partial "badge.html" (i18n "article.draft" | emojify) }} - {{ end }} + {{ partial "article-meta.html" (dict "context" . "scope" "single") }}
@@ -22,7 +19,6 @@ {{ partial "sharing-links.html" . }} {{ partial "article-pagination.html" . }} - {{/* Comments */}} {{ if templates.Exists "partials/comments.html" }} {{ partial "comments.html" . }} {{ end }} diff --git a/layouts/partials/article-link.html b/layouts/partials/article-link.html index 3b28055f..85764197 100644 --- a/layouts/partials/article-link.html +++ b/layouts/partials/article-link.html @@ -1,5 +1,5 @@
-

+

{{ if isset .Params "externalUrl" }} {{ end }} {{ if and .Draft .Site.Params.article.showDraftLabel }} - {{ partial "badge.html" "Draft" }} +
+ {{ partial "badge.html" "Draft" }} +
{{ end }} {{ if templates.Exists "partials/extend-article-link.html" }} {{ partial "extend-article-link.html" . }} diff --git a/layouts/partials/article-meta.html b/layouts/partials/article-meta.html index 6edcb1a0..e2118119 100644 --- a/layouts/partials/article-meta.html +++ b/layouts/partials/article-meta.html @@ -1,17 +1,39 @@ -{{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} - +{{/* Determine the correct context and scope */}} +{{/* This allows for different logic depending on where the partial is called */}} +{{ $context := . }} +{{ $scope := default nil }} + +{{ if (reflect.IsMap . ) }} + {{ $context = .context }} + {{ $scope = cond (not .scope) nil .scope }} {{ end }} -{{ if and - (.Params.showDate | default (.Site.Params.article.showDate | default true)) - (.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) }} - - {{ i18n "article.reading_time" .ReadingTime | emojify }} - + +{{ with $context }} + {{ $meta := newScratch }} + + {{/* Gather partials for this context */}} + {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} + {{ $meta.Add "partials" (slice (partial "meta/date.html" .)) }} + {{ end }} + + {{ if and (.Params.showReadingTime | default (.Site.Params.article.showReadingTime | default true)) (ne .ReadingTime 0) }} + {{ $meta.Add "partials" (slice (partial "meta/reading-time.html" .)) }} + {{ end }} + + {{ if and (eq $scope "single") (.Params.showEdit | default (.Site.Params.article.showEdit | default false)) }} + {{ $meta.Add "partials" (slice (partial "meta/edit.html" .)) }} + {{ end }} + + +
+ {{/* Output partials */}} + {{ with ($meta.Get "partials") }} + {{ delimit . "·" }} + {{ end }} + + {{/* Output draft label */}} + {{ if and (eq $scope "single") (and .Draft .Site.Params.article.showDraftLabel) }} + {{ partial "badge.html" (i18n "article.draft" | emojify) }} + {{ end }} +
{{ end }} diff --git a/layouts/partials/article-pagination.html b/layouts/partials/article-pagination.html index a9927559..9102afbe 100644 --- a/layouts/partials/article-pagination.html +++ b/layouts/partials/article-pagination.html @@ -9,14 +9,11 @@ {{ .NextInSection.Title }} - {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} - - {{ end }} + + {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} + {{ partial "meta/date.html" . }} + {{ end }} +
{{ end }} @@ -26,14 +23,11 @@ {{ .PrevInSection.Title }} - {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} - - {{ end }} + + {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} + {{ partial "meta/date.html" . }} + {{ end }} + diff --git a/layouts/partials/badge.html b/layouts/partials/badge.html index 4da1fcba..1ddfded6 100644 --- a/layouts/partials/badge.html +++ b/layouts/partials/badge.html @@ -1,5 +1,5 @@ {{ . }} diff --git a/layouts/partials/meta/date.html b/layouts/partials/meta/date.html new file mode 100644 index 00000000..ea38b34b --- /dev/null +++ b/layouts/partials/meta/date.html @@ -0,0 +1,4 @@ + +{{- /* Trim EOF */ -}} diff --git a/layouts/partials/meta/edit.html b/layouts/partials/meta/edit.html new file mode 100644 index 00000000..9318f49d --- /dev/null +++ b/layouts/partials/meta/edit.html @@ -0,0 +1,19 @@ +{{ $url := .Params.editURL | default (.Site.Params.article.editURL | default "#") }} +{{ $slash := "" }} +{{ if .Params.editAppendPath | default ( .Site.Params.article.editAppendPath | default false ) }} + {{ if ne (substr $url -1 1) "/" }} + {{ $slash = "/" }} + {{ end }} + {{ $url = printf "%s%s%s" $url $slash (path.Join .File.Path) }} +{{ end }} + + {{ partial "icon.html" "edit" }} + +{{- /* Trim EOF */ -}} diff --git a/layouts/partials/meta/reading-time.html b/layouts/partials/meta/reading-time.html new file mode 100644 index 00000000..d1539e28 --- /dev/null +++ b/layouts/partials/meta/reading-time.html @@ -0,0 +1,4 @@ + + {{- i18n "article.reading_time" .ReadingTime | emojify -}} + +{{- /* Trim EOF */ -}} diff --git a/static/css/main.css b/static/css/main.css index 1154898b..da0f4b52 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{border-color:currentColor}.prose{color:var(--color-neutral-700);max-width:65ch}.prose [class~=lead]{color:#4b5563;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:var(--color-primary-700);text-decoration:underline;font-weight:500;-webkit-text-decoration-color:var(--color-primary-300);text-decoration-color:var(--color-primary-300)}.prose a:hover{background-color:var(--color-primary-600);border-radius:.09rem;color:var(--color-neutral);text-decoration:none}.prose strong{color:var(--color-neutral-900);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:var(--color-neutral-800);left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:var(--color-neutral-500);border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:var(--color-neutral-200);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:var(--color-neutral-800);border-left-width:.25rem;border-left-color:var(--color-primary-200);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{font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h1,.prose h2{color:var(--color-neutral-800);position:relative}.prose h2{font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:var(--color-neutral-800);font-weight:600;position:relative}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#6b7280;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:var(--color-secondary-700);font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#111827}.prose pre{color:var(--color-neutral-700);background-color:var(--color-neutral-50);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:var(--color-neutral-700);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:var(--color-neutral-800);font-weight:600;border-bottom-width:1px;border-bottom-color:var(--color-neutral-500)}.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:var(--color-neutral-300)}.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:var(--color-neutral-200);padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:var(--color-secondary-200);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;color:var(--color-primary-600);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:var(--color-primary-500);text-decoration-color:var(--color-primary-500)}.article-pagination a:hover .article-pagination-direction{color:var(--color-primary-700)}@media (prefers-color-scheme:dark){.article-pagination a:hover .article-pagination-direction{color:var(--color-primary-400)}}.prose .chroma{border-radius:.375rem;background-color:var(--color-neutral-50);color:var(--color-neutral-700)}@media (prefers-color-scheme:dark){.prose .chroma{background-color:var(--color-neutral-700);color:var(--color-neutral-200)}}.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;background-color:var(--color-primary-100);padding-left:1rem;padding-right:1rem}@media (prefers-color-scheme:dark){.chroma .hl{background-color:var(--color-primary-900)}}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{color:var(--color-neutral-600)}@media (prefers-color-scheme:dark){.chroma .lnt{color:var(--color-neutral-300)}}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{color:var(--color-neutral-600)}@media (prefers-color-scheme:dark){.chroma .ln{color:var(--color-neutral-300)}}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .k{color:var(--color-primary-300)}}.chroma .kc{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .kc{color:var(--color-secondary-500)}}.chroma .kd{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .kd{color:var(--color-primary-300)}}.chroma .kn{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .kn{color:var(--color-primary-300)}}.chroma .kp{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .kp{color:var(--color-primary-300)}}.chroma .kr{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .kr{color:var(--color-primary-300)}}.chroma .kt{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .kt{color:var(--color-secondary-600)}}.chroma .n{color:var(--color-secondary-900)}@media (prefers-color-scheme:dark){.chroma .n{color:var(--color-secondary-200)}}.chroma .na{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .na{color:var(--color-secondary-300)}}.chroma .nb{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .nb{color:var(--color-secondary-300)}}.chroma .bp{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .bp{color:var(--color-secondary-300)}}.chroma .nc{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .nc{color:var(--color-primary-300)}}.chroma .no{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .no{color:var(--color-secondary-500)}}.chroma .nd{color:var(--color-secondary-900)}@media (prefers-color-scheme:dark){.chroma .nd{color:var(--color-secondary-200)}}.chroma .ni{color:var(--color-secondary-900)}@media (prefers-color-scheme:dark){.chroma .ni{color:var(--color-secondary-200)}}.chroma .ne{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .ne{color:var(--color-secondary-500)}}.chroma .nf{color:var(--color-secondary-600)}@media (prefers-color-scheme:dark){.chroma .nf{color:var(--color-secondary-500)}}.chroma .fm{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .fm{color:var(--color-primary-300)}}.chroma .nl{color:var(--color-secondary-900)}@media (prefers-color-scheme:dark){.chroma .nl{color:var(--color-secondary-200)}}.chroma .nn{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .nn{color:var(--color-primary-300)}}.chroma .nx{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .nx{color:var(--color-secondary-300)}}.chroma .py{color:#cebc3a}.chroma .nt{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .nt{color:var(--color-secondary-300)}}.chroma .nv{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .nv{color:var(--color-secondary-600)}}.chroma .vc{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .vc{color:var(--color-primary-300)}}.chroma .vg{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .vg{color:var(--color-secondary-500)}}.chroma .vi{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .vi{color:var(--color-secondary-600)}}.chroma .vm{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .vm{color:var(--color-secondary-600)}}.chroma .l{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .l{color:var(--color-primary-400)}}.chroma .ld{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .ld{color:var(--color-primary-400)}}.chroma .s{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .s{color:var(--color-primary-400)}}.chroma .sa{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sa{color:var(--color-primary-400)}}.chroma .sb{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sb{color:var(--color-primary-400)}}.chroma .sc{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sc{color:var(--color-primary-400)}}.chroma .dl{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .dl{color:var(--color-primary-400)}}.chroma .sd{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sd{color:var(--color-primary-400)}}.chroma .s2{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .s2{color:var(--color-primary-400)}}.chroma .se{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .se{color:var(--color-secondary-500)}}.chroma .sh{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sh{color:var(--color-primary-400)}}.chroma .si{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .si{color:var(--color-primary-400)}}.chroma .sx{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sx{color:var(--color-primary-400)}}.chroma .sr{font-weight:600;color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sr{color:var(--color-primary-400)}}.chroma .s1{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .s1{color:var(--color-primary-400)}}.chroma .ss{font-weight:600;color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .ss{color:var(--color-primary-400)}}.chroma .m{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .m{color:var(--color-secondary-600)}}.chroma .mb{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mb{color:var(--color-secondary-600)}}.chroma .mf{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mf{color:var(--color-secondary-600)}}.chroma .mh{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mh{color:var(--color-secondary-600)}}.chroma .mi{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mi{color:var(--color-secondary-600)}}.chroma .il{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .il{color:var(--color-secondary-600)}}.chroma .mo{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mo{color:var(--color-secondary-600)}}.chroma .o{color:var(--color-primary-600)}.chroma .ow{font-weight:600;color:var(--color-primary-400)}@media (prefers-color-scheme:dark){.chroma .ow{color:var(--color-primary-600)}}.chroma .c{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .c{color:var(--color-neutral-500)}}.chroma .ch{font-weight:600;font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .ch{color:var(--color-neutral-500)}}.chroma .cm{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .cm{color:var(--color-neutral-500)}}.chroma .c1{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .c1{color:var(--color-neutral-500)}}.chroma .cs{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .cs{color:var(--color-neutral-500)}}.chroma .cp{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .cp{color:var(--color-neutral-500)}}.chroma .cpf{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .cpf{color:var(--color-neutral-500)}}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;color:var(--color-neutral-500)}.chroma .gi{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .gi{color:var(--color-primary-400)}}.chroma .go{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .go{color:var(--color-primary-400)}}.chroma .gp{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .gp{color:var(--color-primary-400)}}.chroma .gs{font-weight:600}.chroma .gt,.chroma .gu{color:var(--color-neutral-500)}.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}.\!rounded-md{border-radius:.375rem!important}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-400{border-color:var(--color-neutral-400)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-primary-400{border-color:var(--color-primary-400)}.bg-neutral{background-color:var(--color-neutral)}.bg-primary-200{background-color:var(--color-primary-200)}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-primary-100{background-color:var(--color-primary-100)}.bg-primary-600{background-color:var(--color-primary-600)}.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-2{padding-top:.5rem;padding-bottom:.5rem}.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-neutral-400{color:var(--color-neutral-400)}.text-neutral-900{color:var(--color-neutral-900)}.text-neutral-800{color:var(--color-neutral-800)}.text-primary-500{color:var(--color-primary-500)}.text-primary-700{color:var(--color-primary-700)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-700{color:var(--color-neutral-700)}.text-primary-400{color:var(--color-primary-400)}.\!text-neutral{color:var(--color-neutral)!important}.\!no-underline{text-decoration:none!important}.first\:mt-8:first-child{margin-top:2rem}.hover\:bg-primary-600:hover{background-color:var(--color-primary-600)}.hover\:bg-primary-500:hover{background-color:var(--color-primary-500)}.hover\:\!bg-primary-500:hover{background-color:var(--color-primary-500)!important}.hover\:text-primary-700:hover{color:var(--color-primary-700)}.hover\:text-primary-400:hover{color:var(--color-primary-400)}.hover\:text-neutral:hover{color:var(--color-neutral)}.hover\:underline:hover{text-decoration:underline}.hover\:underline-neutral-300:hover{-webkit-text-decoration-color:var(--color-neutral-300);text-decoration-color:var(--color-neutral-300)}.hover\:underline-primary-300:hover{-webkit-text-decoration-color:var(--color-primary-300);text-decoration-color:var(--color-primary-300)}.hover\:underline-primary-500:hover{-webkit-text-decoration-color:var(--color-primary-500);text-decoration-color:var(--color-primary-500)}.hover\:underline-offset-small:hover{text-underline-offset:2px}.hover\:underline-thickness-bold:hover{text-decoration-thickness:2px}@media (prefers-color-scheme:dark){.dark\:prose-light{color:var(--color-neutral-400)}.dark\:prose-light a{color:var(--color-primary-400);-webkit-text-decoration-color:var(--color-neutral-500);text-decoration-color:var(--color-neutral-500)}.dark\:prose-light strong{color:var(--color-neutral)}.dark\:prose-light ol>li:before{color:var(--color-neutral-400)}.dark\:prose-light ul>li:before{background-color:var(--color-neutral-600)}.dark\:prose-light hr{border-color:var(--color-neutral-500)}.dark\:prose-light blockquote{color:var(--color-neutral-200);border-left-color:var(--color-primary-900)}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:var(--color-neutral)}.dark\:prose-light figure figcaption{color:var(--color-neutral-400)}.dark\:prose-light code{color:var(--color-secondary-400)}.dark\:prose-light a code{color:var(--color-neutral)}.dark\:prose-light pre{background-color:var(--color-neutral-700)}.dark\:prose-light pre,.dark\:prose-light pre code{color:var(--color-neutral-200)}.dark\:prose-light thead{color:var(--color-neutral);border-bottom-color:var(--color-neutral-500)}.dark\:prose-light tbody tr{border-bottom-color:var(--color-neutral-700)}.dark\:prose-light kbd{background-color:var(--color-neutral-700);color:var(--color-neutral-300)}.dark\:prose-light mark{background-color:var(--color-secondary-400)}.dark\:border-neutral-600{border-color:var(--color-neutral-600)}.dark\:border-primary-600{border-color:var(--color-primary-600)}.dark\:bg-neutral-800{background-color:var(--color-neutral-800)}.dark\:bg-primary-400{background-color:var(--color-primary-400)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-primary-900{background-color:var(--color-primary-900)}.dark\:bg-primary-800{background-color:var(--color-primary-800)}.dark\:text-neutral-500{color:var(--color-neutral-500)}.dark\:text-neutral{color:var(--color-neutral)}.dark\:text-neutral-300{color:var(--color-neutral-300)}.dark\:text-primary-400{color:var(--color-primary-400)}.dark\:text-neutral-600{color:var(--color-neutral-600)}.dark\:text-neutral-800{color:var(--color-neutral-800)}.dark\:underline-neutral-600{-webkit-text-decoration-color:var(--color-neutral-600);text-decoration-color:var(--color-neutral-600)}.dark\:hover\:bg-primary-400:hover{background-color:var(--color-primary-400)}.dark\:hover\:\!bg-primary-700:hover{background-color:var(--color-primary-700)!important}.dark\:hover\:text-primary-400:hover{color:var(--color-primary-400)}.dark\:hover\:text-neutral-800:hover{color:var(--color-neutral-800)}}@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{border-color:currentColor}.prose{color:var(--color-neutral-700);max-width:65ch}.prose [class~=lead]{color:#4b5563;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:var(--color-primary-700);text-decoration:underline;font-weight:500;-webkit-text-decoration-color:var(--color-primary-300);text-decoration-color:var(--color-primary-300)}.prose a:hover{background-color:var(--color-primary-600);border-radius:.09rem;color:var(--color-neutral);text-decoration:none}.prose strong{color:var(--color-neutral-900);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:var(--color-neutral-800);left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:var(--color-neutral-500);border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:var(--color-neutral-200);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:var(--color-neutral-800);border-left-width:.25rem;border-left-color:var(--color-primary-200);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{font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h1,.prose h2{color:var(--color-neutral-800);position:relative}.prose h2{font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:var(--color-neutral-800);font-weight:600;position:relative}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#6b7280;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:var(--color-secondary-700);font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#111827}.prose pre{color:var(--color-neutral-700);background-color:var(--color-neutral-50);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:var(--color-neutral-700);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:var(--color-neutral-800);font-weight:600;border-bottom-width:1px;border-bottom-color:var(--color-neutral-500)}.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:var(--color-neutral-300)}.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:var(--color-neutral-200);padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:var(--color-secondary-200);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;color:var(--color-primary-600);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:var(--color-primary-500);text-decoration-color:var(--color-primary-500)}.article-pagination a:hover .article-pagination-direction{color:var(--color-primary-700)}@media (prefers-color-scheme:dark){.article-pagination a:hover .article-pagination-direction{color:var(--color-primary-400)}}.prose .chroma{border-radius:.375rem;background-color:var(--color-neutral-50);color:var(--color-neutral-700)}@media (prefers-color-scheme:dark){.prose .chroma{background-color:var(--color-neutral-700);color:var(--color-neutral-200)}}.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;background-color:var(--color-primary-100);padding-left:1rem;padding-right:1rem}@media (prefers-color-scheme:dark){.chroma .hl{background-color:var(--color-primary-900)}}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{color:var(--color-neutral-600)}@media (prefers-color-scheme:dark){.chroma .lnt{color:var(--color-neutral-300)}}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{color:var(--color-neutral-600)}@media (prefers-color-scheme:dark){.chroma .ln{color:var(--color-neutral-300)}}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .k{color:var(--color-primary-300)}}.chroma .kc{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .kc{color:var(--color-secondary-500)}}.chroma .kd{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .kd{color:var(--color-primary-300)}}.chroma .kn{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .kn{color:var(--color-primary-300)}}.chroma .kp{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .kp{color:var(--color-primary-300)}}.chroma .kr{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .kr{color:var(--color-primary-300)}}.chroma .kt{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .kt{color:var(--color-secondary-600)}}.chroma .n{color:var(--color-secondary-900)}@media (prefers-color-scheme:dark){.chroma .n{color:var(--color-secondary-200)}}.chroma .na{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .na{color:var(--color-secondary-300)}}.chroma .nb{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .nb{color:var(--color-secondary-300)}}.chroma .bp{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .bp{color:var(--color-secondary-300)}}.chroma .nc{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .nc{color:var(--color-primary-300)}}.chroma .no{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .no{color:var(--color-secondary-500)}}.chroma .nd{color:var(--color-secondary-900)}@media (prefers-color-scheme:dark){.chroma .nd{color:var(--color-secondary-200)}}.chroma .ni{color:var(--color-secondary-900)}@media (prefers-color-scheme:dark){.chroma .ni{color:var(--color-secondary-200)}}.chroma .ne{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .ne{color:var(--color-secondary-500)}}.chroma .nf{color:var(--color-secondary-600)}@media (prefers-color-scheme:dark){.chroma .nf{color:var(--color-secondary-500)}}.chroma .fm{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .fm{color:var(--color-primary-300)}}.chroma .nl{color:var(--color-secondary-900)}@media (prefers-color-scheme:dark){.chroma .nl{color:var(--color-secondary-200)}}.chroma .nn{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .nn{color:var(--color-primary-300)}}.chroma .nx{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .nx{color:var(--color-secondary-300)}}.chroma .py{color:#cebc3a}.chroma .nt{color:var(--color-secondary-800)}@media (prefers-color-scheme:dark){.chroma .nt{color:var(--color-secondary-300)}}.chroma .nv{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .nv{color:var(--color-secondary-600)}}.chroma .vc{color:var(--color-primary-600)}@media (prefers-color-scheme:dark){.chroma .vc{color:var(--color-primary-300)}}.chroma .vg{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .vg{color:var(--color-secondary-500)}}.chroma .vi{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .vi{color:var(--color-secondary-600)}}.chroma .vm{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .vm{color:var(--color-secondary-600)}}.chroma .l{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .l{color:var(--color-primary-400)}}.chroma .ld{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .ld{color:var(--color-primary-400)}}.chroma .s{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .s{color:var(--color-primary-400)}}.chroma .sa{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sa{color:var(--color-primary-400)}}.chroma .sb{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sb{color:var(--color-primary-400)}}.chroma .sc{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sc{color:var(--color-primary-400)}}.chroma .dl{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .dl{color:var(--color-primary-400)}}.chroma .sd{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sd{color:var(--color-primary-400)}}.chroma .s2{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .s2{color:var(--color-primary-400)}}.chroma .se{font-weight:600;color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .se{color:var(--color-secondary-500)}}.chroma .sh{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sh{color:var(--color-primary-400)}}.chroma .si{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .si{color:var(--color-primary-400)}}.chroma .sx{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sx{color:var(--color-primary-400)}}.chroma .sr{font-weight:600;color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .sr{color:var(--color-primary-400)}}.chroma .s1{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .s1{color:var(--color-primary-400)}}.chroma .ss{font-weight:600;color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .ss{color:var(--color-primary-400)}}.chroma .m{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .m{color:var(--color-secondary-600)}}.chroma .mb{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mb{color:var(--color-secondary-600)}}.chroma .mf{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mf{color:var(--color-secondary-600)}}.chroma .mh{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mh{color:var(--color-secondary-600)}}.chroma .mi{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mi{color:var(--color-secondary-600)}}.chroma .il{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .il{color:var(--color-secondary-600)}}.chroma .mo{color:var(--color-secondary-400)}@media (prefers-color-scheme:dark){.chroma .mo{color:var(--color-secondary-600)}}.chroma .o{color:var(--color-primary-600)}.chroma .ow{font-weight:600;color:var(--color-primary-400)}@media (prefers-color-scheme:dark){.chroma .ow{color:var(--color-primary-600)}}.chroma .c{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .c{color:var(--color-neutral-500)}}.chroma .ch{font-weight:600;font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .ch{color:var(--color-neutral-500)}}.chroma .cm{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .cm{color:var(--color-neutral-500)}}.chroma .c1{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .c1{color:var(--color-neutral-500)}}.chroma .cs{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .cs{color:var(--color-neutral-500)}}.chroma .cp{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .cp{color:var(--color-neutral-500)}}.chroma .cpf{font-style:italic;color:var(--color-neutral-400)}@media (prefers-color-scheme:dark){.chroma .cpf{color:var(--color-neutral-500)}}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;color:var(--color-neutral-500)}.chroma .gi{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .gi{color:var(--color-primary-400)}}.chroma .go{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .go{color:var(--color-primary-400)}}.chroma .gp{color:var(--color-primary-800)}@media (prefers-color-scheme:dark){.chroma .gp{color:var(--color-primary-400)}}.chroma .gs{font-weight:600}.chroma .gt,.chroma .gu{color:var(--color-neutral-500)}.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}.ml-2{margin-left:.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-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mb-\[2px\]{margin-bottom:2px}.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}.\!rounded-md{border-radius:.375rem!important}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-400{border-color:var(--color-neutral-400)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-primary-400{border-color:var(--color-primary-400)}.bg-neutral{background-color:var(--color-neutral)}.bg-primary-200{background-color:var(--color-primary-200)}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-primary-100{background-color:var(--color-primary-100)}.bg-primary-600{background-color:var(--color-primary-600)}.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-2{padding-top:.5rem;padding-bottom:.5rem}.pt-8{padding-top:2rem}.pl-2{padding-left:.5rem}.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-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-neutral-400{color:var(--color-neutral-400)}.text-neutral-900{color:var(--color-neutral-900)}.text-neutral-800{color:var(--color-neutral-800)}.text-primary-500{color:var(--color-primary-500)}.text-primary-700{color:var(--color-primary-700)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-700{color:var(--color-neutral-700)}.text-primary-400{color:var(--color-primary-400)}.\!text-neutral{color:var(--color-neutral)!important}.\!no-underline{text-decoration:none!important}.first\:mt-8:first-child{margin-top:2rem}.hover\:bg-primary-600:hover{background-color:var(--color-primary-600)}.hover\:bg-primary-500:hover{background-color:var(--color-primary-500)}.hover\:\!bg-primary-500:hover{background-color:var(--color-primary-500)!important}.hover\:text-primary-700:hover{color:var(--color-primary-700)}.hover\:text-primary-400:hover{color:var(--color-primary-400)}.hover\:text-neutral:hover{color:var(--color-neutral)}.hover\:text-primary-500:hover{color:var(--color-primary-500)}.hover\:underline:hover{text-decoration:underline}.hover\:underline-neutral-300:hover{-webkit-text-decoration-color:var(--color-neutral-300);text-decoration-color:var(--color-neutral-300)}.hover\:underline-primary-300:hover{-webkit-text-decoration-color:var(--color-primary-300);text-decoration-color:var(--color-primary-300)}.hover\:underline-primary-500:hover{-webkit-text-decoration-color:var(--color-primary-500);text-decoration-color:var(--color-primary-500)}.hover\:underline-offset-small:hover{text-underline-offset:2px}.hover\:underline-thickness-bold:hover{text-decoration-thickness:2px}@media (prefers-color-scheme:dark){.dark\:prose-light{color:var(--color-neutral-400)}.dark\:prose-light a{color:var(--color-primary-400);-webkit-text-decoration-color:var(--color-neutral-500);text-decoration-color:var(--color-neutral-500)}.dark\:prose-light strong{color:var(--color-neutral)}.dark\:prose-light ol>li:before{color:var(--color-neutral-400)}.dark\:prose-light ul>li:before{background-color:var(--color-neutral-600)}.dark\:prose-light hr{border-color:var(--color-neutral-500)}.dark\:prose-light blockquote{color:var(--color-neutral-200);border-left-color:var(--color-primary-900)}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:var(--color-neutral)}.dark\:prose-light figure figcaption{color:var(--color-neutral-400)}.dark\:prose-light code{color:var(--color-secondary-400)}.dark\:prose-light a code{color:var(--color-neutral)}.dark\:prose-light pre{background-color:var(--color-neutral-700)}.dark\:prose-light pre,.dark\:prose-light pre code{color:var(--color-neutral-200)}.dark\:prose-light thead{color:var(--color-neutral);border-bottom-color:var(--color-neutral-500)}.dark\:prose-light tbody tr{border-bottom-color:var(--color-neutral-700)}.dark\:prose-light kbd{background-color:var(--color-neutral-700);color:var(--color-neutral-300)}.dark\:prose-light mark{background-color:var(--color-secondary-400)}.dark\:border-neutral-600{border-color:var(--color-neutral-600)}.dark\:border-primary-600{border-color:var(--color-primary-600)}.dark\:bg-neutral-800{background-color:var(--color-neutral-800)}.dark\:bg-primary-400{background-color:var(--color-primary-400)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-primary-900{background-color:var(--color-primary-900)}.dark\:bg-primary-800{background-color:var(--color-primary-800)}.dark\:text-neutral-500{color:var(--color-neutral-500)}.dark\:text-neutral{color:var(--color-neutral)}.dark\:text-neutral-300{color:var(--color-neutral-300)}.dark\:text-primary-400{color:var(--color-primary-400)}.dark\:text-neutral-600{color:var(--color-neutral-600)}.dark\:text-neutral-800{color:var(--color-neutral-800)}.dark\:underline-neutral-600{-webkit-text-decoration-color:var(--color-neutral-600);text-decoration-color:var(--color-neutral-600)}.dark\:hover\:bg-primary-400:hover{background-color:var(--color-primary-400)}.dark\:hover\:\!bg-primary-700:hover{background-color:var(--color-primary-700)!important}.dark\:hover\:text-primary-400:hover{color:var(--color-primary-400)}.dark\:hover\:text-neutral-800:hover{color:var(--color-neutral-800)}}@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