diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 179c08a..cc4e959 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -44,9 +44,10 @@ jobs:
fi
- name: Deploy S3 Website
if: ${{ github.event.pull_request.head.repo.full_name == 'vapor/design' && github.actor != 'dependabot[bot]' }}
- uses: rishabhrao/s3-website-https-pr-action@v1
+ uses: brokenhandsio/s3-website-https-pr-action@1.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
bucket-prefix: "vapor-design-pulls"
folder-to-copy: "./Output"
+ bucket-region: "us-east-1"
diff --git a/Sources/DesignSite/DesignTheme.swift b/Sources/DesignSite/DesignTheme.swift
index a471514..f361adf 100644
--- a/Sources/DesignSite/DesignTheme.swift
+++ b/Sources/DesignSite/DesignTheme.swift
@@ -35,8 +35,22 @@ private struct VaporThemeHTMLFactory: HTMLFactory {
func makeSectionHTML(for section: Section,
context: PublishingContext) throws -> HTML {
- let builder = VaporDesign(siteLanguage: context.site.language, isLocal: true)
- return builder.buildHTML(for: section, context: context, body: .body())
+ if section.title == "Mainpagedemo" {
+ let body: Node = .body {
+ let isDemo = true
+ let currentSite: CurrentSite = .main
+ SiteNavigation(context: context, selectedSelectionID: nil, currentSite: currentSite, currentMainSitePage: nil, isDemo: isDemo)
+ buildMainSiteDemo()
+ SiteFooter(isLocal: true, isDemo: isDemo, currentSite: currentSite)
+ }
+
+ let bodyWithClass = body.class("main-site-main-page")
+ let builder = VaporDesign(siteLanguage: context.site.language, isLocal: true)
+ return builder.buildHTML(for: section, context: context, body: bodyWithClass.convertToNode())
+ } else {
+ let builder = VaporDesign(siteLanguage: context.site.language, isLocal: true)
+ return builder.buildHTML(for: section, context: context, body: .body())
+ }
}
func makeItemHTML(for item: Item,
@@ -121,6 +135,283 @@ private struct VaporThemeHTMLFactory: HTMLFactory {
}.class("container")
}
+
+ func buildMainSiteDemo() -> Component {
+ Div {
+ Span().class("d-flex mx-auto")
+ .accessibilityLabel("Vapor Logo")
+ .id("vapor-hero-logo")
+ H1("Swift, but on a server").class("main-title")
+ H3("Vapor provides a safe, performant and easy to use foundation to build HTTP servers, backends and APIs in Swift").class("main-page-caption d-flex mx-auto")
+
+ Div {
+ Div {
+ Button {
+ Link("Get Started", url: "https://docs.vapor.codes/").linkTarget(.blank).id("main-page-callout-button-link")
+ }.class("btn btn-primary w-mobile-100")
+ }.class("w-mobile-100")
+ Div {
+ Button {
+ Link(url: "https://github.com/vapor/vapor") {
+ Span().class("vapor-icon icon-github-line icon-secondary btn-icon me-2")
+ Text("22k stars on GitHub")
+ }.class(" d-flex align-items-center")
+ }.class("btn btn-link btn-secondary-link")
+ }.class("d-flex align-items-center ms-lg-5")
+ }.class("main-page-callout-buttons d-flex align-items-center justify-content-center flex-column flex-lg-row")
+
+ Div {
+ let html = """
+ import Vapor
+
+ let app = try Application(.detect())
+ defer { app.shutdown() }
+
+ app.get("hello") { req in
+ return "Hello, world!"
+ }
+
+ try app.run()
+
+
+
+
+
+
+
+
+
+
+
+ """
+ let code = Node.code(.text(html)).class("language-swift")
+ Node.pre(.component(code))
+ }.class("main-code-demo mx-auto")
+
+ Div {
+ H5("Powering companies like:").class("used-by-caption")
+ Div {
+ CompanyCard(name: "Transeo", url: "https://gotranseo.com", logo: "icon-transeo")
+ CompanyCard(name: "John Lewis", url: "https://johnlewis.com", logo: "icon-john-lewis")
+ CompanyCard(name: "Spotify", url: "https://spotify.com", logo: "icon-spotify")
+ CompanyCard(name: "Swift Package Index", url: "https://swiftpackageindex.com", logo: "icon-swift-package-index")
+ CompanyCard(name: "Allegro", url: "https://allegro.pl", logo: "icon-allegro")
+ }.class("d-flex flex-row flex-wrap align-items-center justify-content-center used-by-companies-items")
+ }.class("used-by-companies")
+
+ Div {
+ H2("Build server side with the tooling you already understand").class("main-site-section-header")
+ Paragraph {
+ Text("No need to learn a language from scratch (or assemble a different team) just for your backend. Vapor is built on Apple’s SwiftNIO so you’ll get to use the language you already know and love.")
+ }.class("caption")
+
+ Div {
+ let vapor = PackageCard(title: "Vapor", description: "Build efficient APIs in a language you love. Create routes, send and receive JSON and build HTTP servers.", icon: "server-04", url: "https://docs.vapor.codes/")
+ let fluent = PackageCard(title: "Fluent", description: "Create models and interact with your database in native, safe Swift code without needing to write any SQL", icon: "database-03", url: "https://docs.vapor.codes/fluent/overview/")
+ let JWT = PackageCard(title: "JWT", description: "Create, sign and verify JSON Web Tokens in Swift. Built on top of SwiftNIO", icon: "key-01", url: "https://docs.vapor.codes/security/jwt/")
+ let leaf = PackageCard(title: "Leaf", description: "A templating engine written in Swift. Generate HTML for both web apps and emails with a simple syntax anyone can use", icon: "code-browser", url: "https://docs.vapor.codes/4.0/leaf/overview/")
+ ComponentGroup(members: [vapor, fluent, JWT, leaf].map { card in
+ Div { card }.class("col")
+ })
+ }.class("main-site-packages-grid row row-cols-1 row-cols-lg-2 gx-5")
+ }.class("main-site-packages-list")
+
+ Div {
+ Div {
+ Div {
+ FeatureContainer(
+ title: "High-performant APIs and servers",
+ description: "Built with a non-blocking, event-driven architecture, Vapor allows you to build high-performant, scalable APIs and HTTP servers. Using Swift's Concurrency model, you can write clear, maintainable code that's efficient and easy to read.",
+ url: "https://docs.vapor.codes/",
+ icon: "icon-dataflow-03"
+ )
+ }.class("col order-2 order-lg-1 g-lg-0").id("performance")
+ Div {
+ Div {
+ let html = """
+ func search (req: Request) async throws -> [Todo] {
+ let searchTerm =
+ try req.query.get(String.self, at: "term")
+
+ let results = try await
+ Todo.query(on: req.db)
+ .filter(\\.$title == searchTerm).all
+
+ return results
+ }
+ """
+ let code = Node.code(.text(html)).class("language-swift")
+ Node.pre(.component(code))
+ }.class("code-example")
+ Div {}.class("code-outline-right")
+ }.class("col order-1 order-lg-2 g-lg-0 position-relative")
+ }.class("row row-cols-1 row-cols-lg-2 align-items-center")
+ Div {
+ Div {
+ FeatureContainer(
+ title: "Ship with confidence, even on Fridays",
+ description: "With Vapor's expressive, protocol oriented design, you'll have peace of mind when shipping your code. With our strong type-safety focus, many errors and problems are caught early on by the compiler.",
+ url: "https://docs.vapor.codes/",
+ icon: "icon-brackets-check"
+ )
+ }.class("col order-2 g-lg-0")
+ Div {
+ Div {
+ let html = """
+ func search (req: Request) async throws -> [Todo] {
+ let searchTerm =
+ try req.query.get(String.self, at: "term")
+
+ let results = try await
+ Todo.query(on: req.db)
+ .filter(\\.$number == searchTerm).all()
+
+ return results
+ }
+ """
+ let code = Node.code(.text(html)).class("language-swift")
+ Node.pre(.component(code))
+ }.class("code-example errored")
+ Div {}.class("code-outline-left")
+ Div {
+ Div {
+ Span().class("vapor-icon icon-alert-octagon")
+ }.class("code-error-sidebar")
+ Span(
+ """
+ Binary operator '==' cannot be applied to operands of type 'KeyPath>* and 'String'
+ """
+ ).class("code-error-message")
+ }.class("code-error")
+ }.class("col order-1 g-lg-0 position-relative")
+ }.class("row row-cols-1 row-cols-lg-2 align-items-center")
+ }.class("main-site-features")
+ Div {
+ Div {
+ Div {
+ Span("Integrations")
+ H2("Full integration with your entire stack")
+ Paragraph {
+ Text("Vapor's mature ecosystem includes over a hundred official and community maintained server-first Swift packages to make building your applications easy and efficient.")
+ }
+ Button {
+ Link(url: "https://docs.vapor.codes/") {
+ Text("Get Started")
+ Span().class("vapor-icon icon-chevron-right")
+ }.linkTarget(.blank)
+ }.class("btn btn-primary w-mobile-100")
+ }.class("code-example-explainer")
+ }.class("col order-2 order-lg-1 mt-5 mt-lg-0")
+ Div {
+ Image(url: "/images/integrations.png", description: "Vapor Integrations")
+ .class("img-fluid").id("integrations-image")
+ }.class("col order-1 order-lg-2")
+ }.class("row row-cols-1 row-cols-lg-2 align-items-center").id("integrations")
+ Div {
+ Div {
+ H3("Used by the teams behind these amazing apps")
+ Button {
+ Link(url: "") {
+ Text("See full list")
+ Span().class("ms-2 vapor-icon icon-chevron-right")
+ }.linkTarget(.blank)
+ }.class("btn btn-primary").class("d-none d-lg-block")
+ }.class("showcase-header")
+ Div {
+ ShowcaseCard(name: "Sambot", url: "", image: "/images/sambot-card.png", description: "Sambot helps all members of a Mobile App Dev Team to be more productive, reactive and efficient while using Bitrise CI services")
+ ShowcaseCard(name: "Underway NYC", url: "", image: "/images/underway-nyc-card.png", description: "Quickly locate yourself on the official MTA map of NYC and get real-time train arrivals at that subway stop")
+ ShowcaseCard(name: "SwiftFiddle", url: "", image: "/images/swiftfiddle-card.png", description: "SwiftFiddle is an online playground for creating, sharing and embedding Swift fiddles")
+ ShowcaseCard(name: "Transeo", url: "", image: "/images/transeo-card.png", description: "Transeo is an educational readiness platform that helps students determine what they want to do after high school")
+ ShowcaseCard(name: "Sambot", url: "", image: "/images/sambot-card.png", description: "Sambot helps all members of a Mobile App Dev Team to be more productive, reactive and efficient while using Bitrise CI services")
+ }.class("showcase-cards scrolling-wrapper").id("showcase-scrolling-wrapper")
+ Div {
+ Button {
+ Span().class("vapor-icon icon-arrow-left")
+ }.class("arrow-button").onclick("scrollToLeft()")
+ Button {
+ Span().class("vapor-icon icon-arrow-right")
+ }.class("arrow-button").onclick("scrollToRight()")
+ }.class("btn-group")
+ }.class("row row-cols-1 row-cols-lg-2").id("showcase")
+ Div {
+ Div {
+ Image(url: "/images/discord-chat.png", description: "Vapor Discord server")
+ .class("img-fluid").id("discord-chat-image")
+ }.class("col")
+ Div {
+ Div {
+ Div {
+ H2("Join the largest community of Swift backend developers")
+ Paragraph {
+ Text("Vapor's 13k+ Discord community will be at your side to support you along the way. Ask questions, contribute and be a part of a thriving, wholesome corner of the internet.")
+ }
+ Button {
+ Link(url: "https://docs.vapor.codes/") {
+ Text("Join our Discord")
+ }.linkTarget(.blank)
+ }.class("btn btn-primary w-mobile-100")
+ Link(url: "https://github.com/vapor/vapor") {
+ Text("Contribute")
+ Span().class("vapor-icon icon-chevron-right")
+ }.class("ms-3 learn-more-link mt-lg-0 mt-3 mb-lg-0 mb-3")
+ }.class("px-4 px-lg-0")
+ }.class("col order-2 order-lg-1 g-lg-0")
+ }.class("col")
+ }.class("row row-cols-1 row-cols-lg-2").id("discord")
+
+ Div {
+ Div {
+ H2("Get all the tools you need to build with Swift").class("d-none d-lg-block")
+ Button {
+ Link(url: "https://docs.vapor.codes/") {
+ Text("Get Started")
+ }.linkTarget(.blank)
+ }.class("btn btn-primary w-mobile-100")
+ Link(url: "https://api.vapor.codes/") {
+ Text("Go to API Docs")
+ Span().class("vapor-icon icon-chevron-right")
+ }.class("ms-3 learn-more-link mt-lg-0 mt-3 mb-lg-0 mb-3").linkTarget(.blank)
+ }.class("col order-2 order-lg-1 mt-5 mt-lg-0")
+ Div {
+ Div {
+ H2("Get all the tools you need to build with Swift").class("d-lg-none px-4")
+ List {
+ ListItem {
+ Span().class("align-middle vapor-icon icon-check-circle icon-secondary me-2 d-inline-block")
+ Span("Easily create new projects with the Vapor Toolbox").class("align-middle")
+ }
+ ListItem {
+ Span().class("align-middle vapor-icon icon-check-circle icon-secondary me-2 d-inline-block")
+ Span("Expansive documentation and API reference").class("align-middle")
+ }
+ ListItem {
+ Span().class("align-middle vapor-icon icon-check-circle icon-secondary me-2 d-inline-block")
+ Span("Everything you need to build backends and APIs").class("align-middle")
+ }
+ ListItem {
+ Span().class("align-middle vapor-icon icon-check-circle icon-secondary me-2 d-inline-block")
+ Span("Full support for Swift's concurrency model").class("align-middle")
+ }
+ }.class("px-4 p-lg-0")
+ }
+ }.class("col items-list order-1 order-lg-2")
+ }.class("row row-cols-1 row-cols-lg-2 align-items-center").id("api-docs")
+ Div {
+ Div {
+ H3("Supported by our incredible sponsors and backers")
+ Link(url: "") {
+ Text("Become a supporter")
+ }.class("btn btn-secondary")
+ }.id("sponsors-header")
+ Div {
+ SponsorCard(name: "Broken Hands", url: "https://www.brokenhands.io/", logo: "/images/brokenhands.png", description: "Providing Vapor training and consulting for clients around the world.")
+ SponsorCard(name: "omrd", url: "https://omrd.com", logo: "/images/omrd.png", description: "omrd provides consultation services for dental elated scans.")
+ SponsorCard(name: "Transeo", url: "https://gotranseo.com", logo: "/images/transeo.png", description: "Transeo is an educational technology company that builds tracking tools for student planning and data analysis.")
+ }.class("sponsors-list")
+ }.class("row").id("sponsors")
+ }.class("container")
+ }
}
let demoPostHTML = """
@@ -137,6 +428,10 @@ let demoPostHTML = """
Originally this page was a proof on concept for building the blog (the first site to be ported over to the new design) as a way of getting the styling and HTML/CSS to work. It's now evolved to host the generated CSS and JS the sites can pull in, this example site, all the static files (like images) and components for Publish to use when building out sites.
+
+ You can see an example of the main site here .
+
+
Some Vapor
code blocks
Here's an example of a code block:
diff --git a/Sources/DesignSite/main.swift b/Sources/DesignSite/main.swift
index faa7c01..b35415e 100644
--- a/Sources/DesignSite/main.swift
+++ b/Sources/DesignSite/main.swift
@@ -7,6 +7,7 @@ struct DesignSite: Website {
enum SectionID: String, WebsiteSectionID {
// Add the sections that you want your website to contain here:
case posts
+ case mainPageDemo
}
struct ItemMetadata: WebsiteItemMetadata {
diff --git a/Sources/VaporDesign/Components/MainSite/CompanyCard.swift b/Sources/VaporDesign/Components/MainSite/CompanyCard.swift
new file mode 100644
index 0000000..528da0f
--- /dev/null
+++ b/Sources/VaporDesign/Components/MainSite/CompanyCard.swift
@@ -0,0 +1,22 @@
+import Plot
+import Publish
+
+public struct CompanyCard: Component {
+ let name: String
+ let url: String
+ let logo: String
+
+ public init(name: String, url: String, logo: String) {
+ self.name = name
+ self.url = url
+ self.logo = logo
+ }
+
+ public var body: Component {
+ Div {
+ Link(url: url) {
+ Span().class("used-by-icon \(logo)").attribute(named: "title", value: name)
+ }.class("used-by-logo")
+ }.class("used-by-item")
+ }
+}
diff --git a/Sources/VaporDesign/Components/MainSite/FeatureContainer.swift b/Sources/VaporDesign/Components/MainSite/FeatureContainer.swift
new file mode 100644
index 0000000..ac13f98
--- /dev/null
+++ b/Sources/VaporDesign/Components/MainSite/FeatureContainer.swift
@@ -0,0 +1,40 @@
+import Plot
+import Publish
+
+public struct FeatureContainer: Component {
+ let title: String
+ let description: String
+ let url: String
+ let icon: String?
+ let iconString: String?
+
+ public init(title: String, description: String, url: String, icon: String? = nil, iconString: String? = nil) {
+ self.title = title
+ self.description = description
+ self.url = url
+ self.icon = icon
+ self.iconString = iconString
+ }
+
+ public var body: Component {
+ Div {
+ Div {
+ if let icon = icon {
+ Span().class("vapor-icon \(icon)")
+ } else if let iconString = iconString {
+ Span(iconString)
+ }
+ H2(title)
+ Paragraph {
+ Text(description)
+ }
+ Button {
+ Link(url: "https://docs.vapor.codes/") {
+ Text("Get Started")
+ Span().class("vapor-icon icon-chevron-right")
+ }.linkTarget(.blank)
+ }.class("btn btn-primary w-mobile-100")
+ }.class("code-example-explainer")
+ }.class("col order-2 order-lg-1 g-lg-0")
+ }
+}
diff --git a/Sources/VaporDesign/Components/MainSite/PackageCard.swift b/Sources/VaporDesign/Components/MainSite/PackageCard.swift
new file mode 100644
index 0000000..22d54b6
--- /dev/null
+++ b/Sources/VaporDesign/Components/MainSite/PackageCard.swift
@@ -0,0 +1,30 @@
+import Plot
+import Publish
+
+public struct PackageCard: Component {
+ public let title: String
+ public let description: String
+ public let icon: String
+ public let url: String
+
+ public init(title: String, description: String, icon: String, url: String) {
+ self.title = title
+ self.description = description
+ self.icon = icon
+ self.url = url
+ }
+
+ public var body: Component {
+ Div {
+ Div {
+ Span().class("vapor-icon feature-card-icon icon-\(icon)")
+ H3(title).class("card-title")
+ Paragraph(description).class("card-text")
+ Link(url: url) {
+ Text("Learn More")
+ Span().class("vapor-icon icon-chevron-right")
+ }.linkTarget(.blank).class("learn-more-link")
+ }
+ }.class("card h-100 vapor-feature-card")
+ }
+}
diff --git a/Sources/VaporDesign/Components/MainSite/ShowcaseCard.swift b/Sources/VaporDesign/Components/MainSite/ShowcaseCard.swift
new file mode 100644
index 0000000..8f5e1e5
--- /dev/null
+++ b/Sources/VaporDesign/Components/MainSite/ShowcaseCard.swift
@@ -0,0 +1,32 @@
+import Plot
+import Publish
+
+public struct ShowcaseCard: Component {
+ let name: String
+ let url: String
+ let image: String
+ let description: String
+
+ public init(name: String, url: String, image: String, description: String) {
+ self.name = name
+ self.url = url
+ self.image = image
+ self.description = description
+ }
+
+ public var body: Component {
+ Div {
+ Image(url: image, description: "\(name) Card").class("card-img-top")
+ Div {
+ H5(name).class("card-title")
+ Paragraph(description).class("card-text")
+ Link(url: url) {
+ Text("See it in action")
+ Span("").class("vapor-icon icon-arrow-narrow-up-right")
+ }.class("btn btn-primary mt-auto")
+ }.class("card-body d-flex flex-column")
+ }.class("card")
+ .style("width: 18rem;")
+ .id("\(name.lowercased().replacingOccurrences(of: " ", with: "-"))-card")
+ }
+}
\ No newline at end of file
diff --git a/Sources/VaporDesign/Components/MainSite/SponsorCard.swift b/Sources/VaporDesign/Components/MainSite/SponsorCard.swift
new file mode 100644
index 0000000..0985933
--- /dev/null
+++ b/Sources/VaporDesign/Components/MainSite/SponsorCard.swift
@@ -0,0 +1,30 @@
+import Plot
+import Publish
+
+public struct SponsorCard: Component {
+ let name: String
+ let url: String
+ let logo: String
+ let description: String
+
+ public init(name: String, url: String, logo: String, description: String) {
+ self.name = name
+ self.url = url
+ self.logo = logo
+ self.description = description
+ }
+
+ public var body: Component {
+ Div {
+ Div {
+ Image(url: logo, description: name).class("card-img-top")
+ H5(name).class("card-title")
+ Paragraph(description).class("card-text")
+ Link(url: url) {
+ Text("Learn More")
+ Span().class("vapor-icon icon-chevron-right")
+ }.linkTarget(.blank).class("learn-more-link mt-auto")
+ }.class("card-body d-flex flex-column")
+ }.class("card")
+ }
+}
diff --git a/Sources/VaporDesign/Components/SiteFooter.swift b/Sources/VaporDesign/Components/SiteFooter.swift
index 46b4e5c..344ec07 100644
--- a/Sources/VaporDesign/Components/SiteFooter.swift
+++ b/Sources/VaporDesign/Components/SiteFooter.swift
@@ -1,18 +1,17 @@
-import Plot
import Foundation
+import Plot
public struct SiteFooter: Component {
-
let isLocal: Bool
let isDemo: Bool
let currentSite: CurrentSite
-
+
public init(isLocal: Bool = false, isDemo: Bool = false, currentSite: CurrentSite) {
self.isLocal = isLocal
self.isDemo = isDemo
self.currentSite = currentSite
}
-
+
public var body: Component {
guard let year = Calendar(identifier: .gregorian).dateComponents([.year], from: Date()).year else {
fatalError("Unable to get the current year")
@@ -21,9 +20,7 @@ public struct SiteFooter: Component {
Div {
Div {
Div {
- Span {
-
- }.class("d-inline-block align-text-top")
+ Span().class("d-inline-block align-text-top")
.accessibilityLabel("Vapor Logo")
.id("vapor-logo-footer")
.width(197)
@@ -48,7 +45,7 @@ public struct SiteFooter: Component {
}
}
ListItem {
- Link("Join our Discord", url: "https://vapor.team").linkTarget(.blank)
+ Link("Join our Discord", url: "https://vapor.team").linkTarget(.blank).class("nav-link")
}
ListItem {
if isDemo {
@@ -89,28 +86,28 @@ public struct SiteFooter: Component {
if currentSite == .blog {
Link("Blog", url: "/")
} else {
- Link("Blog", url: "https://blog.vapor.codes").linkTarget(.blank)
+ Link("Blog", url: "https://blog.vapor.codes").linkTarget(.blank).class("nav-link")
}
}
ListItem {
if currentSite == .docs {
Link("Framework Docs", url: "/")
} else {
- Link("Framework Docs", url: "https://docs.vapor.codes").linkTarget(.blank)
+ Link("Framework Docs", url: "https://docs.vapor.codes").linkTarget(.blank).class("nav-link")
}
}
ListItem {
if currentSite == .apiDocs {
- Link("API Docs", url: "/")
+ Link("API Docs", url: "/").class("nav-link")
} else {
- Link("API Docs", url: "https://api.vapor.codes").linkTarget(.blank)
+ Link("API Docs", url: "https://api.vapor.codes").linkTarget(.blank).class("nav-link")
}
}
ListItem {
- Link("Press Kit", url: "https://design.vapor.codes/VaporPressKit.zip").attribute(named: "download", value: nil)
+ Link("Press Kit", url: "https://design.vapor.codes/VaporPressKit.zip").attribute(named: "download", value: nil).class("nav-link")
}
ListItem {
- Link("Help", url: "https://vapor.team").linkTarget(.blank)
+ Link("Help", url: "https://vapor.team").linkTarget(.blank).class("nav-link")
}
}
}.id("footer-resources-links").class("col-6")
@@ -122,18 +119,23 @@ public struct SiteFooter: Component {
Div {
Text("© QuTheory, LLC \(year)")
}.id("footer-copyright").class("my-auto")
-
+
Div {
List {
ListItem {
Link(url: "https://twitter.com/codevapor") {
Span().class("vapor-icon icon-twitter-fill")
- }.linkTarget(.blank)
+ }.linkTarget(.blank).attribute(named: "rel", value: "me")
+ }.class("me-4")
+ ListItem {
+ Link(url: "https://hachyderm.io/@codevapor") {
+ Span().class("vapor-icon icon-mastodon-fill")
+ }.linkTarget(.blank).attribute(named: "rel", value: "me")
}.class("me-4")
ListItem {
Link(url: "https://github.com/vapor") {
Span().class("vapor-icon icon-github-fill")
- }.linkTarget(.blank)
+ }.linkTarget(.blank).attribute(named: "rel", value: "me")
}
}.class("d-flex")
}.id("footer-social-links").class("ms-auto")
diff --git a/Sources/VaporDesign/Components/SiteNavigation.swift b/Sources/VaporDesign/Components/SiteNavigation.swift
index 45144ff..23997aa 100644
--- a/Sources/VaporDesign/Components/SiteNavigation.swift
+++ b/Sources/VaporDesign/Components/SiteNavigation.swift
@@ -160,7 +160,7 @@ public struct SiteNavigation: Component {
ListItem {
Link(url: "https://github.com/vapor") {
Span().class("vapor-icon icon-github-fill")
- }.linkTarget(.blank).class("nav-link")
+ }.linkTarget(.blank).class("nav-link").attribute(named: "rel", value: "me")
}.class("nav-item")
ListItem {
Link(url: "#") {
diff --git a/Sources/VaporDesign/VaporDesign.swift b/Sources/VaporDesign/VaporDesign.swift
index c032205..7e0ba83 100644
--- a/Sources/VaporDesign/VaporDesign.swift
+++ b/Sources/VaporDesign/VaporDesign.swift
@@ -2,17 +2,16 @@ import Plot
import Publish
public struct VaporDesign {
-
let siteLanguage: Language
let isLocal: Bool
let isMainSite: Bool
-
+
public init(siteLanguage: Language, isLocal: Bool = false, isMainSite: Bool = false) {
self.siteLanguage = siteLanguage
self.isLocal = isLocal
self.isMainSite = isMainSite
}
-
+
public func buildHTML(for page: Location, context: PublishingContext, body: Node) -> HTML {
HTML(
.lang(siteLanguage),
@@ -20,18 +19,21 @@ public struct VaporDesign {
body
)
}
-
+
func buildHead(for page: Location, context: PublishingContext) -> Node {
let head = Node.head(
for: page,
on: context.site,
stylesheetPaths: [
- Path(VaporDesignUtilities.buildResourceLink(for: "/main.css", isLocal: isLocal))
+ Path(VaporDesignUtilities.buildResourceLink(for: "/main.css", isLocal: isLocal)),
],
scripts: [
- Path(VaporDesignUtilities.buildResourceLink(for: "/js/detectColorScheme.js", isLocal: isLocal))
+ Path(VaporDesignUtilities.buildResourceLink(for: "/js/detectColorScheme.js", isLocal: isLocal)),
+ Path(VaporDesignUtilities.buildResourceLink(for: "/js/scrollMainSiteShowcase.js", isLocal: isLocal)),
+ Path(VaporDesignUtilities.buildResourceLink(for: "/js/mainSiteScrollNavbar.js", isLocal: isLocal)),
],
- isLocal: isLocal)
+ isLocal: isLocal
+ )
return head
}
}
diff --git a/src/images/allegro.svg b/src/images/allegro.svg
new file mode 100644
index 0000000..a51f385
--- /dev/null
+++ b/src/images/allegro.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/images/api-docs-background-dark.png b/src/images/api-docs-background-dark.png
new file mode 100644
index 0000000..3f0b788
Binary files /dev/null and b/src/images/api-docs-background-dark.png differ
diff --git a/src/images/api-docs-background-gradient.svg b/src/images/api-docs-background-gradient.svg
new file mode 100644
index 0000000..bdb8bd9
--- /dev/null
+++ b/src/images/api-docs-background-gradient.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/images/background-gradient.svg b/src/images/background-gradient.svg
new file mode 100644
index 0000000..4197e92
--- /dev/null
+++ b/src/images/background-gradient.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/images/github-line.svg b/src/images/github-line.svg
index 0e6c07a..bcafa06 100644
--- a/src/images/github-line.svg
+++ b/src/images/github-line.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/src/images/integration-09.svg b/src/images/integration-09.svg
new file mode 100644
index 0000000..7c89901
--- /dev/null
+++ b/src/images/integration-09.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/images/integrations-background-dark.png b/src/images/integrations-background-dark.png
new file mode 100644
index 0000000..7705fa8
Binary files /dev/null and b/src/images/integrations-background-dark.png differ
diff --git a/src/images/john-lewis.svg b/src/images/john-lewis.svg
new file mode 100644
index 0000000..00b158f
--- /dev/null
+++ b/src/images/john-lewis.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/images/logo-main-black.svg b/src/images/logo-main-black.svg
index f76331c..e279645 100644
--- a/src/images/logo-main-black.svg
+++ b/src/images/logo-main-black.svg
@@ -1,4 +1,4 @@
-
+
diff --git a/src/images/logo-main-white.svg b/src/images/logo-main-white.svg
index a46df6b..25b1869 100644
--- a/src/images/logo-main-white.svg
+++ b/src/images/logo-main-white.svg
@@ -1,4 +1,4 @@
-
+
diff --git a/src/images/main-site-homepage-hero-dark.svg b/src/images/main-site-homepage-hero-dark.svg
new file mode 100644
index 0000000..ebe84d0
--- /dev/null
+++ b/src/images/main-site-homepage-hero-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/images/main-site-homepage-hero-light.svg b/src/images/main-site-homepage-hero-light.svg
new file mode 100644
index 0000000..fb60d0c
--- /dev/null
+++ b/src/images/main-site-homepage-hero-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/images/spotify.svg b/src/images/spotify.svg
new file mode 100644
index 0000000..89b63fd
--- /dev/null
+++ b/src/images/spotify.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/images/stuff.svg b/src/images/stuff.svg
new file mode 100644
index 0000000..83f0be2
--- /dev/null
+++ b/src/images/stuff.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/images/swift-package-index.svg b/src/images/swift-package-index.svg
new file mode 100644
index 0000000..849cda7
--- /dev/null
+++ b/src/images/swift-package-index.svg
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/images/transeo.svg b/src/images/transeo.svg
new file mode 100644
index 0000000..c2f3a1e
--- /dev/null
+++ b/src/images/transeo.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/js/highlight.min.js b/src/js/highlight.min.js
index 388f490..87591e0 100644
--- a/src/js/highlight.min.js
+++ b/src/js/highlight.min.js
@@ -1,5 +1,5 @@
/*!
- Highlight.js v11.6.0 (git: bed790f3f3)
+ Highlight.js v11.7.0 (git: 82688fad18)
(c) 2006-2022 undefined and other contributors
License: BSD-3-Clause
*/
@@ -299,301 +299,37 @@ e["before:highlightBlock"](Object.assign({block:t.el},t))
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),s.push(e)}
}),t.debugMode=()=>{o=!1},t.safeMode=()=>{o=!0
-},t.versionString="11.6.0",t.regex={concat:p,lookahead:d,either:f,optional:h,
+},t.versionString="11.7.0",t.regex={concat:p,lookahead:d,either:f,optional:h,
anyNumberOfTimes:u};for(const t in A)"object"==typeof A[t]&&e.exports(A[t])
;return Object.assign(t,A),t})({});return te}()
-;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `json` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const a=["true","false","null"],n={
-scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",keywords:{
-literal:a},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,
-relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0
-},e.QUOTE_STRING_MODE,n,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],
-illegal:"\\S"}}})();hljs.registerLanguage("json",e)})();/*! `plaintext` grammar compiled for Highlight.js 11.6.0 */
+;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `yaml` grammar compiled for Highlight.js 11.7.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const n="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={
+className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/
+},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",
+variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(s,{
+variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={
+end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\{/,
+end:/\}/,contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",
+contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{
+begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{
+begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",
+relevance:10},{className:"string",
+begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{
+begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,
+relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",
+begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a
+},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",
+begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",
+relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{
+className:"number",
+begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"
+},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},t,g,s],r=[...b]
+;return r.pop(),r.push(i),l.contains=r,{name:"YAML",case_insensitive:!0,
+aliases:["yml"],contains:b}}})();hljs.registerLanguage("yaml",e)})();/*! `plaintext` grammar compiled for Highlight.js 11.7.0 */
(()=>{var t=(()=>{"use strict";return t=>({name:"Plain text",
aliases:["text","txt"],disableAutodetect:!0})})()
-;hljs.registerLanguage("plaintext",t)})();/*! `python` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{
-const n=e.regex,a=/[\p{XID_Start}_]\p{XID_Continue}*/u,i=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s={
-$pattern:/[A-Za-z]\w+|__\w+__/,keyword:i,
-built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],
-literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],
-type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]
-},t={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,
-end:/\}/,keywords:s,illegal:/#/},l={begin:/\{\{/,relevance:0},b={
-className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{
-begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,
-contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{
-begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,
-contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{
-begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,
-contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,
-end:/"""/,contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([uU]|[rR])'/,end:/'/,
-relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{
-begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,
-end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,
-contains:[e.BACKSLASH_ESCAPE,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,
-contains:[e.BACKSLASH_ESCAPE,l,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
-},o="[0-9](_?[0-9])*",c=`(\\b(${o}))?\\.(${o})|\\b(${o})\\.`,d="\\b|"+i.join("|"),g={
-className:"number",relevance:0,variants:[{
-begin:`(\\b(${o})|(${c}))[eE][+-]?(${o})[jJ]?(?=${d})`},{begin:`(${c})[jJ]?`},{
-begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{
-begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})`
-},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${o})[jJ](?=${d})`
-}]},p={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:s,
-contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={
-className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,
-end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,
-contains:["self",t,g,b,e.HASH_COMMENT_MODE]}]};return r.contains=[b,g,t],{
-name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s,
-illegal:/(<\/|->|\?)|=>/,contains:[t,g,{begin:/\bself\b/},{beginKeywords:"if",
-relevance:0},b,p,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{
-1:"keyword",3:"title.function"},contains:[m]},{variants:[{
-match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}],
-scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{
-className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[g,m,b]}]}}})()
-;hljs.registerLanguage("python",e)})();/*! `wasm` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{e.regex;const a=e.COMMENT(/\(;/,/;\)/)
-;return a.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,
-keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"]
-},contains:[e.COMMENT(/;;/,/$/),a,{match:[/(?:offset|align)/,/\s*/,/=/],
-className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{
-match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{
-begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",
-3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,
-className:"type"},{className:"keyword",
-match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/
-},{className:"number",relevance:0,
-match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/
-}]}}})();hljs.registerLanguage("wasm",e)})();/*! `cmake` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>({name:"CMake",aliases:["cmake.in"],
-case_insensitive:!0,keywords:{
-keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"
-},contains:[{className:"variable",begin:/\$\{/,end:/\}/
-},e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]})})()
-;hljs.registerLanguage("cmake",e)})();/*! `csp` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var s=(()=>{"use strict";return s=>({name:"CSP",case_insensitive:!1,
-keywords:{$pattern:"[a-zA-Z][a-zA-Z0-9_-]*",
-keyword:["base-uri","child-src","connect-src","default-src","font-src","form-action","frame-ancestors","frame-src","img-src","manifest-src","media-src","object-src","plugin-types","report-uri","sandbox","script-src","style-src","trusted-types","unsafe-hashes","worker-src"]
-},contains:[{className:"string",begin:"'",end:"'"},{className:"attribute",
-begin:"^Content",end:":",excludeEnd:!0}]})})();hljs.registerLanguage("csp",s)
-})();/*! `c` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,t=e.COMMENT("//","$",{
-contains:[{begin:/\\\n/}]
-}),s="[a-zA-Z_]\\w*::",a="(decltype\\(auto\\)|"+n.optional(s)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",r={
-className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{
-match:/\batomic_[a-z]{3,6}\b/}]},i={className:"string",variants:[{
-begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
-begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
-end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
-begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={
-className:"number",variants:[{begin:"\\b(0b[01']+)"},{
-begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
-},{
-begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
-}],relevance:0},o={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
-keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
-},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"string"}),{
-className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},c={
-className:"title",begin:n.optional(s)+e.IDENT_RE,relevance:0
-},d=n.optional(s)+e.IDENT_RE+"\\s*\\(",u={
-keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],
-type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"],
-literal:"true false NULL",
-built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"
-},g=[o,r,t,e.C_BLOCK_COMMENT_MODE,l,i],m={variants:[{begin:/=/,end:/;/},{
-begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
-keywords:u,contains:g.concat([{begin:/\(/,end:/\)/,keywords:u,
-contains:g.concat(["self"]),relevance:0}]),relevance:0},p={
-begin:"("+a+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
-keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",
-keywords:u,relevance:0},{begin:d,returnBegin:!0,contains:[e.inherit(c,{
-className:"title.function"})],relevance:0},{relevance:0,match:/,/},{
-className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0,
-contains:[t,e.C_BLOCK_COMMENT_MODE,i,l,r,{begin:/\(/,end:/\)/,keywords:u,
-relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,i,l,r]}]
-},r,t,e.C_BLOCK_COMMENT_MODE,o]};return{name:"C",aliases:["h"],keywords:u,
-disableAutodetect:!0,illegal:"",contains:[].concat(m,p,g,[o,{
-begin:e.IDENT_RE+"::",keywords:u},{className:"class",
-beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{
-beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:o,
-strings:i,keywords:u}}}})();hljs.registerLanguage("c",e)})();/*! `leaf` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>({name:"Leaf",contains:[{
-className:"function",begin:"#+[A-Za-z_0-9]*\\(",end:/ \{/,returnBegin:!0,
-excludeEnd:!0,contains:[{className:"keyword",begin:"#+"},{className:"title",
-begin:"[A-Za-z_][A-Za-z_0-9]*"},{className:"params",begin:"\\(",end:"\\)",
-endsParent:!0,contains:[{className:"string",begin:'"',end:'"'},{
-className:"variable",begin:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]})})()
-;hljs.registerLanguage("leaf",e)})();/*! `bash` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/,
-end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{
-className:"variable",variants:[{
-begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={
-className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},i={
-begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
-end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/,
-contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(c);const o={begin:/\$\(\(/,
-end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
-},r=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
-}),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
-contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
-name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
-keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"],
-literal:["true","false"],
-built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
-},contains:[r,e.SHEBANG(),l,o,e.HASH_COMMENT_MODE,i,{match:/(\/[a-z._-]+)+/},c,{
-className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}}})()
-;hljs.registerLanguage("bash",e)})();/*! `dockerfile` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>({name:"Dockerfile",aliases:["docker"],
-case_insensitive:!0,
-keywords:["from","maintainer","expose","env","arg","user","onbuild","stopsignal"],
-contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{
-beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",
-starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:""})})()
-;hljs.registerLanguage("dockerfile",e)})();/*! `sql` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{
-const r=e.regex,t=e.COMMENT("--","$"),n=["true","false","unknown"],a=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=i,c=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!i.includes(e))),l={
-begin:r.concat(/\b/,r.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}}
-;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{
-$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:r,when:t}={})=>{const n=t
-;return r=r||[],e.map((e=>e.match(/\|\d+$/)||r.includes(e)?e:n(e)?e+"|0":e))
-})(c,{when:e=>e.length<3}),literal:n,type:a,
-built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]
-},contains:[{begin:r.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/,
-keyword:c.concat(s),literal:n,type:a}},{className:"type",
-begin:r.either("double precision","large object","with timezone","without timezone")
-},l,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{
-begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{
-begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:"operator",
-begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}})()
-;hljs.registerLanguage("sql",e)})();/*! `objectivec` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={
-$pattern:n,keyword:["@interface","@class","@protocol","@implementation"]}
-;return{name:"Objective-C",
-aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{
-"variable.language":["this","super"],$pattern:n,
-keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],
-literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],
-built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],
-type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]
-},illegal:"",contains:[{className:"built_in",
-begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"
-},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{
-className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",
-contains:[e.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,
-keywords:{
-keyword:"if else elif endif define undef warning error line pragma ifdef ifndef include"
-},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{
-className:"string"}),{className:"string",begin:/<.*?>/,end:/$/,illegal:"\\n"
-},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",
-begin:"("+_.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:_,
-contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,
-relevance:0}]}}})();hljs.registerLanguage("objectivec",e)})();/*! `typescript` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict"
-;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","module","global"],i=[].concat(r,t,s)
-;function o(o){const l=o.regex,d=e,b={begin:/<[A-Za-z0-9\\._:-]+/,
-end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
-const a=e[0].length+e.index,t=e.input[a]
-;if("<"===t||","===t)return void n.ignoreMatch();let s
-;">"===t&&(((e,{after:n})=>{const a=""+e[0].slice(1)
-;return-1!==e.input.indexOf(a,n)})(e,{after:a
-})||n.ignoreMatch()),(s=e.input.substring(a).match(/^\s+extends\s+/))&&0===s.index&&n.ignoreMatch()
-}},g={$pattern:e,keyword:n,literal:a,built_in:i,"variable.language":c
-},u="\\.([0-9](_?[0-9])*)",m="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",E={
-className:"number",variants:[{
-begin:`(\\b(${m})((${u})|\\.)?|(${u}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{
-begin:`\\b(${m})\\b((${u})\\b|\\.)?|(${u})\\b`},{
-begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
-begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
-begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
-begin:"\\b0[0-7]+n?\\b"}],relevance:0},y={className:"subst",begin:"\\$\\{",
-end:"\\}",keywords:g,contains:[]},A={begin:"html`",end:"",starts:{end:"`",
-returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"xml"}},_={
-begin:"css`",end:"",starts:{end:"`",returnEnd:!1,
-contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"css"}},p={className:"string",
-begin:"`",end:"`",contains:[o.BACKSLASH_ESCAPE,y]},N={className:"comment",
-variants:[o.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
-begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
-begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
-excludeBegin:!0,relevance:0},{className:"variable",begin:d+"(?=\\s*(-)|$)",
-endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
-}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE]
-},f=[o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,A,_,p,E];y.contains=f.concat({
-begin:/\{/,end:/\}/,keywords:g,contains:["self"].concat(f)})
-;const h=[].concat(N,y.contains),v=h.concat([{begin:/\(/,end:/\)/,keywords:g,
-contains:["self"].concat(h)}]),S={className:"params",begin:/\(/,end:/\)/,
-excludeBegin:!0,excludeEnd:!0,keywords:g,contains:v},w={variants:[{
-match:[/class/,/\s+/,d,/\s+/,/extends/,/\s+/,l.concat(d,"(",l.concat(/\./,d),")*")],
-scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
-match:[/class/,/\s+/,d],scope:{1:"keyword",3:"title.class"}}]},R={relevance:0,
-match:l.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
-className:"title.class",keywords:{_:[...t,...s]}},x={variants:[{
-match:[/function/,/\s+/,d,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
-className:{1:"keyword",3:"title.function"},label:"func.def",contains:[S],
-illegal:/%/},k={
-match:l.concat(/\b/,(O=[...r,"super"],l.concat("(?!",O.join("|"),")")),d,l.lookahead(/\(/)),
-className:"title.function",relevance:0};var O;const I={
-begin:l.concat(/\./,l.lookahead(l.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,
-excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},C={
-match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},
-contains:[{begin:/\(\)/},S]
-},T="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+o.UNDERSCORE_IDENT_RE+")\\s*=>",M={
-match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(T)],
-keywords:"async",className:{1:"keyword",3:"title.function"},contains:[S]}
-;return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{
-PARAMS_CONTAINS:v,CLASS_REFERENCE:R},illegal:/#(?![$_A-z])/,
-contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
-label:"use_strict",className:"meta",relevance:10,
-begin:/^\s*['"]use (strict|asm)['"]/
-},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,A,_,p,N,E,R,{className:"attr",
-begin:d+l.lookahead(":"),relevance:0},M,{
-begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
-keywords:"return throw case",relevance:0,contains:[N,o.REGEXP_MODE,{
-className:"function",begin:T,returnBegin:!0,end:"\\s*=>",contains:[{
-className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{
-className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,
-excludeEnd:!0,keywords:g,contains:v}]}]},{begin:/,/,relevance:0},{match:/\s+/,
-relevance:0},{variants:[{begin:"<>",end:">"},{
-match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:b.begin,
-"on:begin":b.isTrulyOpeningTag,end:b.end}],subLanguage:"xml",contains:[{
-begin:b.begin,end:b.end,skip:!0,contains:["self"]}]}]},x,{
-beginKeywords:"while if switch catch for"},{
-begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
-returnBegin:!0,label:"func.def",contains:[S,o.inherit(o.TITLE_MODE,{begin:d,
-className:"title.function"})]},{match:/\.\.\./,relevance:0},I,{match:"\\$"+d,
-relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
-contains:[S]},k,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
-className:"variable.constant"},w,C,{match:/\$[(.]/}]}}return t=>{
-const s=o(t),r=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],l={
-beginKeywords:"namespace",end:/\{/,excludeEnd:!0,
-contains:[s.exports.CLASS_REFERENCE]},d={beginKeywords:"interface",end:/\{/,
-excludeEnd:!0,keywords:{keyword:"interface extends",built_in:r},
-contains:[s.exports.CLASS_REFERENCE]},b={$pattern:e,
-keyword:n.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]),
-literal:a,built_in:i.concat(r),"variable.language":c},g={className:"meta",
-begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},u=(e,n,a)=>{
-const t=e.contains.findIndex((e=>e.label===n))
-;if(-1===t)throw Error("can not find mode to replace");e.contains.splice(t,1,a)}
-;return Object.assign(s.keywords,b),
-s.exports.PARAMS_CONTAINS.push(g),s.contains=s.contains.concat([g,l,d]),
-u(s,"shebang",t.SHEBANG()),u(s,"use_strict",{className:"meta",relevance:10,
-begin:/^\s*['"]use strict['"]/
-}),s.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(s,{
-name:"TypeScript",aliases:["ts","tsx"]}),s}})()
-;hljs.registerLanguage("typescript",e)})();/*! `ini` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,a={className:"number",
-relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]
-},s=e.COMMENT();s.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const i={
-className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/
-}]},t={className:"literal",begin:/\bon|off|true|false|yes|no\b/},r={
-className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",
-end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'
-},{begin:"'",end:"'"}]},l={begin:/\[/,end:/\]/,contains:[s,t,i,r,a,"self"],
-relevance:0},c=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{
-name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,
-contains:[s,{className:"section",begin:/\[+/,end:/\]+/},{
-begin:n.concat(c,"(\\s*\\.\\s*",c,")*",n.lookahead(/\s*=\s*[^#\s]/)),
-className:"attr",starts:{end:/$/,contains:[s,l,t,i,r,a]}}]}}})()
-;hljs.registerLanguage("ini",e)})();/*! `xml` grammar compiled for Highlight.js 11.6.0 */
+;hljs.registerLanguage("plaintext",t)})();/*! `xml` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict";return e=>{
const a=e.regex,n=a.concat(/[\p{L}_]/u,a.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s={
className:"symbol",begin:/&[a-z]+;|[0-9]+;|[a-f0-9]+;/},t={begin:/\s/,
@@ -621,83 +357,7 @@ begin:a.concat(/,a.lookahead(a.concat(n,a.either(/\/>/,/>/,/\s/)))),
end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:r}]},{
className:"tag",begin:a.concat(/<\//,a.lookahead(a.concat(n,/>/))),contains:[{
className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}
-})();hljs.registerLanguage("xml",e)})();/*! `markdown` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const n={begin:/<\/?[A-Za-z_]/,
-end:">",subLanguage:"xml",relevance:0},a={variants:[{begin:/\[.+?\]\[.*?\]/,
-relevance:0},{
-begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,
-relevance:2},{
-begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),
-relevance:2},{begin:/\[.+?\]\([./?].*?\)/,relevance:1},{
-begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/
-},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,
-returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",
-excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",
-end:"\\]",excludeBegin:!0,excludeEnd:!0}]},i={className:"strong",contains:[],
-variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={
-className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{
-begin:/_(?!_)/,end:/_/,relevance:0}]},c=e.inherit(i,{contains:[]
-}),t=e.inherit(s,{contains:[]});i.contains.push(t),s.contains.push(c)
-;let g=[n,a];return[i,s,c,t].forEach((e=>{e.contains=e.contains.concat(g)
-})),g=g.concat(i,s),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{
-className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:g},{
-begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",
-contains:g}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",
-end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:g,
-end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{
-begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{
-begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",
-contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{
-begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{
-className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{
-className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}})()
-;hljs.registerLanguage("markdown",e)})();/*! `csharp` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const n={
-keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),
-built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],
-literal:["default","false","null","true"]},a=e.inherit(e.TITLE_MODE,{
-begin:"[a-zA-Z](\\.?\\w)*"}),i={className:"number",variants:[{
-begin:"\\b(0b[01']+)"},{
-begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{
-begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
-}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]
-},t=e.inherit(s,{illegal:/\n/}),r={className:"subst",begin:/\{/,end:/\}/,
-keywords:n},l=e.inherit(r,{illegal:/\n/}),c={className:"string",begin:/\$"/,
-end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/
-},e.BACKSLASH_ESCAPE,l]},o={className:"string",begin:/\$@"/,end:'"',contains:[{
-begin:/\{\{/},{begin:/\}\}/},{begin:'""'},r]},d=e.inherit(o,{illegal:/\n/,
-contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},l]})
-;r.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE],
-l.contains=[d,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.inherit(e.C_BLOCK_COMMENT_MODE,{
-illegal:/\n/})];const g={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
-},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},a]
-},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={
-begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],
-keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,
-contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{
-begin:"\x3c!--|--\x3e"},{begin:"?",end:">"}]}]
-}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",
-end:"$",keywords:{
-keyword:"if else elif endif define undef warning error line region endregion pragma checksum"
-}},g,i,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,
-illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"
-},a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",
-relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
-contains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
-beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
-contains:[a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",
-begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{
-className:"string",begin:/"/,end:/"/}]},{
-beginKeywords:"new return throw await else",relevance:0},{className:"function",
-begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,
-end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{
-beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial",
-relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,
-contains:[e.TITLE_MODE,E],relevance:0},{match:/\(\)/},{className:"params",
-begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,
-contains:[g,i,e.C_BLOCK_COMMENT_MODE]
-},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}})()
-;hljs.registerLanguage("csharp",e)})();/*! `swift` grammar compiled for Highlight.js 11.6.0 */
+})();hljs.registerLanguage("xml",e)})();/*! `swift` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict";function e(e){
return e?"string"==typeof e?e:e.source:null}function a(e){return t("(?=",e,")")}
function t(...a){return a.map((a=>e(a))).join("")}function n(...a){const t=(e=>{
@@ -756,20 +416,45 @@ contains:[...v,R,X,{beginKeywords:"struct protocol class extension enum actor",
end:"\\{",excludeEnd:!0,keywords:k,contains:[e.inherit(e.TITLE_MODE,{
className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...B]
},H,J,{beginKeywords:"import",end:/$/,contains:[...v],relevance:0
-},...B,..._,...M,I,P,...z,...q,U,V]}}})();hljs.registerLanguage("swift",e)})();/*! `http` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const n="HTTP/(2|1\\.[01])",a={
-className:"attribute",
-begin:e.regex.concat("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{
-contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",
-relevance:0}}]}},s=[a,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}
-}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{
-begin:"^(?="+n+" \\d{3})",end:/$/,contains:[{className:"meta",begin:n},{
-className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,
-contains:s}},{begin:"(?=^[A-Z]+ (.*?) "+n+"$)",end:/$/,contains:[{
-className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{
-className:"meta",begin:n},{className:"keyword",begin:"[A-Z]+"}],starts:{
-end:/\b\B/,illegal:/\S/,contains:s}},e.inherit(a,{relevance:0})]}}})()
-;hljs.registerLanguage("http",e)})();/*! `makefile` grammar compiled for Highlight.js 11.6.0 */
+},...B,..._,...M,I,P,...z,...q,U,V]}}})();hljs.registerLanguage("swift",e)})();/*! `leaf` grammar compiled for Highlight.js 11.7.0 */
+(()=>{var e=(()=>{"use strict";return e=>({name:"Leaf",contains:[{
+className:"function",begin:"#+[A-Za-z_0-9]*\\(",end:/ \{/,returnBegin:!0,
+excludeEnd:!0,contains:[{className:"keyword",begin:"#+"},{className:"title",
+begin:"[A-Za-z_][A-Za-z_0-9]*"},{className:"params",begin:"\\(",end:"\\)",
+endsParent:!0,contains:[{className:"string",begin:'"',end:'"'},{
+className:"variable",begin:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]})})()
+;hljs.registerLanguage("leaf",e)})();/*! `diff` grammar compiled for Highlight.js 11.7.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"Diff",
+aliases:["patch"],contains:[{className:"meta",relevance:10,
+match:a.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)
+},{className:"comment",variants:[{
+begin:a.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),
+end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{
+className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,
+end:/$/}]}}})();hljs.registerLanguage("diff",e)})();/*! `bash` grammar compiled for Highlight.js 11.7.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/,
+end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{
+className:"variable",variants:[{
+begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={
+className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},i={
+begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
+end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/,
+contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(c);const o={begin:/\$?\(\(/,
+end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
+},r=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
+}),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
+contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
+name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
+keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"],
+literal:["true","false"],
+built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
+},contains:[r,e.SHEBANG(),l,o,e.HASH_COMMENT_MODE,i,{match:/(\/[a-z._-]+)+/},c,{
+className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}}})()
+;hljs.registerLanguage("bash",e)})();/*! `shell` grammar compiled for Highlight.js 11.7.0 */
+(()=>{var s=(()=>{"use strict";return s=>({name:"Shell Session",
+aliases:["console","shellsession"],contains:[{className:"meta.prompt",
+begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,
+subLanguage:"bash"}}]})})();hljs.registerLanguage("shell",s)})();/*! `makefile` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict";return e=>{const i={className:"variable",
variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",
contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%\^\+\*]/}]},a={className:"string",
@@ -782,61 +467,23 @@ name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,
keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"
},contains:[e.HASH_COMMENT_MODE,i,a,n,s,{className:"meta",begin:/^\.PHONY:/,
end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},r]}}})()
-;hljs.registerLanguage("makefile",e)})();/*! `graphql` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"GraphQL",
-aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{
-keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],
-literal:["true","false","null"]},
-contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{
-scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",
-begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,
-end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{
-scope:"symbol",begin:a.concat(/[_A-Za-z][_0-9A-Za-z]*/,a.lookahead(/\s*:/)),
-relevance:0}],illegal:[/[;<']/,/BEGIN/]}}})();hljs.registerLanguage("graphql",e)
-})();/*! `less` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict"
-;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],o=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),n=r.concat(i)
-;return a=>{const l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
-BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
-begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
-className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
-scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
-contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
-scope:"number",
-begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
-relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}
-}))(a),s=n,d="([\\w-]+|@\\{[\\w-]+\\})",c=[],g=[],b=e=>({className:"string",
-begin:"~?"+e+".*?"+e}),m=(e,t,r)=>({className:e,begin:t,relevance:r}),p={
-$pattern:/[a-z-]+/,keyword:"and or not only",attribute:t.join(" ")},u={
-begin:"\\(",end:"\\)",contains:g,keywords:p,relevance:0}
-;g.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,b("'"),b('"'),l.CSS_NUMBER_MODE,{
-begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",
-excludeEnd:!0}
-},l.HEXCOLOR,u,m("variable","@@?[\\w-]+",10),m("variable","@\\{[\\w-]+\\}"),m("built_in","~?`[^`]*?`"),{
-className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0
-},l.IMPORTANT,{beginKeywords:"and not"},l.FUNCTION_DISPATCH);const h=g.concat({
-begin:/\{/,end:/\}/,contains:c}),f={beginKeywords:"when",endsWithParent:!0,
-contains:[{beginKeywords:"and not"}].concat(g)},k={begin:d+"\\s*:",
-returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/
-},l.CSS_VARIABLE,{className:"attribute",begin:"\\b("+o.join("|")+")\\b",
-end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:g}}]
-},w={className:"keyword",
-begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",
-starts:{end:"[;{}]",keywords:p,returnEnd:!0,contains:g,relevance:0}},v={
-className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{
-begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:h}},y={variants:[{
-begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:d,end:/\{/}],returnBegin:!0,
-returnEnd:!0,illegal:"[<='$\"]",relevance:0,
-contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,f,m("keyword","all\\b"),m("variable","@\\{[\\w-]+\\}"),{
-begin:"\\b("+e.join("|")+")\\b",className:"selector-tag"
-},l.CSS_NUMBER_MODE,m("selector-tag",d,0),m("selector-id","#"+d),m("selector-class","\\."+d,0),m("selector-tag","&",0),l.ATTRIBUTE_SELECTOR_MODE,{
-className:"selector-pseudo",begin:":("+r.join("|")+")"},{
-className:"selector-pseudo",begin:":(:)?("+i.join("|")+")"},{begin:/\(/,
-end:/\)/,relevance:0,contains:h},{begin:"!important"},l.FUNCTION_DISPATCH]},x={
-begin:`[\\w-]+:(:)?(${s.join("|")})`,returnBegin:!0,contains:[y]}
-;return c.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,w,v,x,k,y,f,l.FUNCTION_DISPATCH),
-{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:c}}})()
-;hljs.registerLanguage("less",e)})();/*! `javascript` grammar compiled for Highlight.js 11.6.0 */
+;hljs.registerLanguage("makefile",e)})();
+(()=>{var e=(()=>{"use strict";return e=>{
+const r=e.regex,t=e.COMMENT("--","$"),n=["true","false","unknown"],a=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=i,c=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!i.includes(e))),l={
+begin:r.concat(/\b/,r.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}}
+;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{
+$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:r,when:t}={})=>{const n=t
+;return r=r||[],e.map((e=>e.match(/\|\d+$/)||r.includes(e)?e:n(e)?e+"|0":e))
+})(c,{when:e=>e.length<3}),literal:n,type:a,
+built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]
+},contains:[{begin:r.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/,
+keyword:c.concat(s),literal:n,type:a}},{className:"type",
+begin:r.either("double precision","large object","with timezone","without timezone")
+},l,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{
+begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{
+begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:"operator",
+begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}})()
+;hljs.registerLanguage("sql",e)})();/*! `javascript` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict"
;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","module","global"],i=[].concat(r,t,s)
;return o=>{const l=o.regex,b=e,d={begin:/<[A-Za-z0-9\\._:-]+/,
@@ -844,8 +491,9 @@ end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
const a=e[0].length+e.index,t=e.input[a]
;if("<"===t||","===t)return void n.ignoreMatch();let s
;">"===t&&(((e,{after:n})=>{const a=""+e[0].slice(1)
-;return-1!==e.input.indexOf(a,n)})(e,{after:a
-})||n.ignoreMatch()),(s=e.input.substring(a).match(/^\s+extends\s+/))&&0===s.index&&n.ignoreMatch()
+;return-1!==e.input.indexOf(a,n)})(e,{after:a})||n.ignoreMatch())
+;const r=e.input.substring(a)
+;((s=r.match(/^\s*=/))||(s=r.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch()
}},g={$pattern:e,keyword:n,literal:a,built_in:i,"variable.language":c
},u="\\.([0-9](_?[0-9])*)",m="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",E={
className:"number",variants:[{
@@ -859,16 +507,16 @@ end:"\\}",keywords:g,contains:[]},y={begin:"html`",end:"",starts:{end:"`",
returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,A],subLanguage:"xml"}},N={
begin:"css`",end:"",starts:{end:"`",returnEnd:!1,
contains:[o.BACKSLASH_ESCAPE,A],subLanguage:"css"}},_={className:"string",
-begin:"`",end:"`",contains:[o.BACKSLASH_ESCAPE,A]},f={className:"comment",
+begin:"`",end:"`",contains:[o.BACKSLASH_ESCAPE,A]},h={className:"comment",
variants:[o.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
excludeBegin:!0,relevance:0},{className:"variable",begin:b+"(?=\\s*(-)|$)",
endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE]
-},h=[o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,y,N,_,E];A.contains=h.concat({
-begin:/\{/,end:/\}/,keywords:g,contains:["self"].concat(h)})
-;const v=[].concat(f,A.contains),p=v.concat([{begin:/\(/,end:/\)/,keywords:g,
+},f=[o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,y,N,_,{match:/\$\d+/},E]
+;A.contains=f.concat({begin:/\{/,end:/\}/,keywords:g,contains:["self"].concat(f)
+});const v=[].concat(h,A.contains),p=v.concat([{begin:/\(/,end:/\)/,keywords:g,
contains:["self"].concat(v)}]),S={className:"params",begin:/\(/,end:/\)/,
excludeBegin:!0,excludeEnd:!0,keywords:g,contains:p},w={variants:[{
match:[/class/,/\s+/,b,/\s+/,/extends/,/\s+/,l.concat(b,"(",l.concat(/\./,b),")*")],
@@ -879,7 +527,7 @@ className:"title.class",keywords:{_:[...t,...s]}},O={variants:[{
match:[/function/,/\s+/,b,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
className:{1:"keyword",3:"title.function"},label:"func.def",contains:[S],
illegal:/%/},k={
-match:l.concat(/\b/,(I=[...r,"super"],l.concat("(?!",I.join("|"),")")),b,l.lookahead(/\(/)),
+match:l.concat(/\b/,(I=[...r,"super","import"],l.concat("(?!",I.join("|"),")")),b,l.lookahead(/\(/)),
className:"title.function",relevance:0};var I;const x={
begin:l.concat(/\./,l.lookahead(l.concat(b,/(?![0-9A-Za-z$_(])/))),end:b,
excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},T={
@@ -893,10 +541,10 @@ PARAMS_CONTAINS:p,CLASS_REFERENCE:R},illegal:/#(?![$_A-z])/,
contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
label:"use_strict",className:"meta",relevance:10,
begin:/^\s*['"]use (strict|asm)['"]/
-},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,y,N,_,f,E,R,{className:"attr",
-begin:b+l.lookahead(":"),relevance:0},M,{
+},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,y,N,_,h,{match:/\$\d+/},E,R,{
+className:"attr",begin:b+l.lookahead(":"),relevance:0},M,{
begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
-keywords:"return throw case",relevance:0,contains:[f,o.REGEXP_MODE,{
+keywords:"return throw case",relevance:0,contains:[h,o.REGEXP_MODE,{
className:"function",begin:C,returnBegin:!0,end:"\\s*=>",contains:[{
className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{
className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,
@@ -912,220 +560,13 @@ className:"title.function"})]},{match:/\.\.\./,relevance:0},x,{match:"\\$"+b,
relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
contains:[S]},k,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
className:"variable.constant"},w,T,{match:/\$[(.]/}]}}})()
-;hljs.registerLanguage("javascript",e)})();/*! `diff` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"Diff",
-aliases:["patch"],contains:[{className:"meta",relevance:10,
-match:a.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)
-},{className:"comment",variants:[{
-begin:a.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),
-end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{
-className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,
-end:/$/}]}}})();hljs.registerLanguage("diff",e)})();/*! `java` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict"
-;var e="\\.([0-9](_*[0-9])*)",a="[0-9a-fA-F](_*[0-9a-fA-F])*",n={
-className:"number",variants:[{
-begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`
-},{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{
-begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{
-begin:`\\b0[xX]((${a})\\.?|(${a})?\\.(${a}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`
-},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${a})[lL]?\\b`},{
-begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],
-relevance:0};function s(e,a,n){return-1===n?"":e.replace(a,(t=>s(e,a,n-1)))}
-return e=>{
-const a=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",i=t+s("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),r={
-keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed"],
-literal:["false","true","null"],
-type:["char","boolean","long","float","int","byte","short","double"],
-built_in:["super","this"]},l={className:"meta",begin:"@"+t,contains:[{
-begin:/\(/,end:/\)/,contains:["self"]}]},c={className:"params",begin:/\(/,
-end:/\)/,keywords:r,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0}
-;return{name:"Java",aliases:["jsp"],keywords:r,illegal:/<\/|#/,
-contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,
-relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{
-begin:/import java\.[a-z]+\./,keywords:"import",relevance:2
-},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,
-className:"string",contains:[e.BACKSLASH_ESCAPE]
-},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{
-match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{
-1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{
-begin:[a.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type",
-3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword",
-3:"title.class"},contains:[c,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
-beginKeywords:"new throw return else",relevance:0},{
-begin:["(?:"+i+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{
-2:"title.function"},keywords:r,contains:[{className:"params",begin:/\(/,
-end:/\)/,keywords:r,relevance:0,
-contains:[l,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.C_BLOCK_COMMENT_MODE]
-},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},n,l]}}})()
-;hljs.registerLanguage("java",e)})();/*! `scss` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict"
-;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],r=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],t=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],o=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse()
-;return n=>{const a=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
-BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
-begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
-className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
-scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
-contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
-scope:"number",
-begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
-relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}
-}))(n),l=t,s=i,d="@[a-z-]+",c={className:"variable",
-begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",
-case_insensitive:!0,illegal:"[=/|']",
-contains:[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE,a.CSS_NUMBER_MODE,{
-className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{
-className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0
-},a.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",
-begin:"\\b("+e.join("|")+")\\b",relevance:0},{className:"selector-pseudo",
-begin:":("+s.join("|")+")"},{className:"selector-pseudo",
-begin:":(:)?("+l.join("|")+")"},c,{begin:/\(/,end:/\)/,
-contains:[a.CSS_NUMBER_MODE]},a.CSS_VARIABLE,{className:"attribute",
-begin:"\\b("+o.join("|")+")\\b"},{
-begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"
-},{begin:/:/,end:/[;}{]/,relevance:0,
-contains:[a.BLOCK_COMMENT,c,a.HEXCOLOR,a.CSS_NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.IMPORTANT,a.FUNCTION_DISPATCH]
-},{begin:"@(page|font-face)",keywords:{$pattern:d,keyword:"@page @font-face"}},{
-begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,
-keyword:"and or not only",attribute:r.join(" ")},contains:[{begin:d,
-className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"
-},c,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.HEXCOLOR,a.CSS_NUMBER_MODE]
-},a.FUNCTION_DISPATCH]}}})();hljs.registerLanguage("scss",e)})();/*! `go` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const n={
-keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],
-type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],
-literal:["true","false","iota","nil"],
-built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]
-};return{name:"Go",aliases:["golang"],keywords:n,illegal:"",
-contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",
-variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{
-className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1
-},e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",
-end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",
-begin:/\(/,end:/\)/,endsParent:!0,keywords:n,illegal:/["']/}]}]}}})()
-;hljs.registerLanguage("go",e)})();/*! `pgsql` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var E=(()=>{"use strict";return E=>{
-const T=E.COMMENT("--","$"),N="\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$",A="BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR NAME OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ",R=A.trim().split(" ").map((E=>E.split("|")[0])).join("|"),I="ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP PERCENTILE_CONT PERCENTILE_DISC ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE NUM_NONNULLS NUM_NULLS ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT TRUNC WIDTH_BUCKET RANDOM SETSEED ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAP LEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR TO_ASCII TO_HEX TRANSLATE OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 TIMEOFDAY TRANSACTION_TIMESTAMP|10 ENUM_FIRST ENUM_LAST ENUM_RANGE AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILY INET_MERGE MACADDR8_SET7BIT ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA CURSOR_TO_XML CURSOR_TO_XMLSCHEMA SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA XMLATTRIBUTES TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY CURRVAL LASTVAL NEXTVAL SETVAL COALESCE NULLIF GREATEST LEAST ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY STRING_TO_ARRAY UNNEST ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE GENERATE_SERIES GENERATE_SUBSCRIPTS CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE GIN_CLEAN_PENDING_LIST SUPPRESS_REDUNDANT_UPDATES_TRIGGER LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE GROUPING CAST".split(" ").map((E=>E.split("|")[0])).join("|")
-;return{name:"PostgreSQL",aliases:["postgres","postgresql"],supersetOf:"sql",
-case_insensitive:!0,keywords:{
-keyword:"ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION INDEX PROCEDURE ASSERTION ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS DEFERRABLE RANGE DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED OF NOTHING NONE EXCLUDE ATTRIBUTE USAGE ROUTINES TRUE FALSE NAN INFINITY ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT OPEN SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS ",
-built_in:"CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 SQLSTATE SQLERRM|10 SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED INDEX_CORRUPTED "
-},illegal:/:==|\W\s*\(\*|(^|\s)\$[a-z]|\{\{|[a-z]:\s*$|\.\.\.|TO:|DO:/,
-contains:[{className:"keyword",variants:[{begin:/\bTEXT\s*SEARCH\b/},{
-begin:/\b(PRIMARY|FOREIGN|FOR(\s+NO)?)\s+KEY\b/},{
-begin:/\bPARALLEL\s+(UNSAFE|RESTRICTED|SAFE)\b/},{
-begin:/\bSTORAGE\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\b/},{
-begin:/\bMATCH\s+(FULL|PARTIAL|SIMPLE)\b/},{begin:/\bNULLS\s+(FIRST|LAST)\b/},{
-begin:/\bEVENT\s+TRIGGER\b/},{begin:/\b(MAPPING|OR)\s+REPLACE\b/},{
-begin:/\b(FROM|TO)\s+(PROGRAM|STDIN|STDOUT)\b/},{
-begin:/\b(SHARE|EXCLUSIVE)\s+MODE\b/},{
-begin:/\b(LEFT|RIGHT)\s+(OUTER\s+)?JOIN\b/},{
-begin:/\b(FETCH|MOVE)\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\b/
-},{begin:/\bPRESERVE\s+ROWS\b/},{begin:/\bDISCARD\s+PLANS\b/},{
-begin:/\bREFERENCING\s+(OLD|NEW)\b/},{begin:/\bSKIP\s+LOCKED\b/},{
-begin:/\bGROUPING\s+SETS\b/},{
-begin:/\b(BINARY|INSENSITIVE|SCROLL|NO\s+SCROLL)\s+(CURSOR|FOR)\b/},{
-begin:/\b(WITH|WITHOUT)\s+HOLD\b/},{
-begin:/\bWITH\s+(CASCADED|LOCAL)\s+CHECK\s+OPTION\b/},{
-begin:/\bEXCLUDE\s+(TIES|NO\s+OTHERS)\b/},{
-begin:/\bFORMAT\s+(TEXT|XML|JSON|YAML)\b/},{
-begin:/\bSET\s+((SESSION|LOCAL)\s+)?NAMES\b/},{begin:/\bIS\s+(NOT\s+)?UNKNOWN\b/
-},{begin:/\bSECURITY\s+LABEL\b/},{begin:/\bSTANDALONE\s+(YES|NO|NO\s+VALUE)\b/
-},{begin:/\bWITH\s+(NO\s+)?DATA\b/},{begin:/\b(FOREIGN|SET)\s+DATA\b/},{
-begin:/\bSET\s+(CATALOG|CONSTRAINTS)\b/},{begin:/\b(WITH|FOR)\s+ORDINALITY\b/},{
-begin:/\bIS\s+(NOT\s+)?DOCUMENT\b/},{
-begin:/\bXML\s+OPTION\s+(DOCUMENT|CONTENT)\b/},{
-begin:/\b(STRIP|PRESERVE)\s+WHITESPACE\b/},{
-begin:/\bNO\s+(ACTION|MAXVALUE|MINVALUE)\b/},{
-begin:/\bPARTITION\s+BY\s+(RANGE|LIST|HASH)\b/},{begin:/\bAT\s+TIME\s+ZONE\b/},{
-begin:/\bGRANTED\s+BY\b/},{begin:/\bRETURN\s+(QUERY|NEXT)\b/},{
-begin:/\b(ATTACH|DETACH)\s+PARTITION\b/},{
-begin:/\bFORCE\s+ROW\s+LEVEL\s+SECURITY\b/},{
-begin:/\b(INCLUDING|EXCLUDING)\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\b/
-},{begin:/\bAS\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\b/}]},{
-begin:/\b(FORMAT|FAMILY|VERSION)\s*\(/},{begin:/\bINCLUDE\s*\(/,
-keywords:"INCLUDE"},{begin:/\bRANGE(?!\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/
-},{
-begin:/\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\s*=/
-},{begin:/\b(PG_\w+?|HAS_[A-Z_]+_PRIVILEGE)\b/,relevance:10},{
-begin:/\bEXTRACT\s*\(/,end:/\bFROM\b/,returnEnd:!0,keywords:{
-type:"CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR TIMEZONE_MINUTE WEEK YEAR"
-}},{begin:/\b(XMLELEMENT|XMLPI)\s*\(\s*NAME/,keywords:{keyword:"NAME"}},{
-begin:/\b(XMLPARSE|XMLSERIALIZE)\s*\(\s*(DOCUMENT|CONTENT)/,keywords:{
-keyword:"DOCUMENT CONTENT"}},{beginKeywords:"CACHE INCREMENT MAXVALUE MINVALUE",
-end:E.C_NUMBER_RE,returnEnd:!0,keywords:"BY CACHE INCREMENT MAXVALUE MINVALUE"
-},{className:"type",begin:/\b(WITH|WITHOUT)\s+TIME\s+ZONE\b/},{className:"type",
-begin:/\bINTERVAL\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\s+TO\s+(MONTH|HOUR|MINUTE|SECOND))?\b/
-},{
-begin:/\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/,
-keywords:{keyword:"RETURNS",
-type:"LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER"
-}},{begin:"\\b("+I+")\\s*\\("},{begin:"\\.("+R+")\\b"},{
-begin:"\\b("+R+")\\s+PATH\\b",keywords:{keyword:"PATH",
-type:A.replace("PATH ","")}},{className:"type",begin:"\\b("+R+")\\b"},{
-className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{
-className:"string",begin:"(e|E|u&|U&)'",end:"'",contains:[{begin:"\\\\."}],
-relevance:10},E.END_SAME_AS_BEGIN({begin:N,end:N,contains:[{
-subLanguage:["pgsql","perl","python","tcl","r","lua","java","php","ruby","bash","scheme","xml","json"],
-endsWithParent:!0}]}),{begin:'"',end:'"',contains:[{begin:'""'}]
-},E.C_NUMBER_MODE,E.C_BLOCK_COMMENT_MODE,T,{className:"meta",variants:[{
-begin:"%(ROW)?TYPE",relevance:10},{begin:"\\$\\d+"},{begin:"^#\\w",end:"$"}]},{
-className:"symbol",begin:"<<\\s*[a-zA-Z_][a-zA-Z_0-9$]*\\s*>>",relevance:10}]}}
-})();hljs.registerLanguage("pgsql",E)})();/*! `kotlin` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict"
-;var e="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",a={
-className:"number",variants:[{
-begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`
-},{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{
-begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{
-begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`
-},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{
-begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],
-relevance:0};return e=>{const n={
-keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",
-built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",
-literal:"true false null"},i={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"
-},s={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},t={
-className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string",
-variants:[{begin:'"""',end:'"""(?=[^"])',contains:[t,s]},{begin:"'",end:"'",
-illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,
-contains:[e.BACKSLASH_ESCAPE,t,s]}]};s.contains.push(r);const l={
-className:"meta",
-begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"
-},c={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,
-end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}]
-},o=a,b=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),E={
-variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,
-contains:[]}]},d=E;return d.variants[1].contains=[E],E.variants[1].contains=[d],
-{name:"Kotlin",aliases:["kt","kts"],keywords:n,
-contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",
-begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,b,{className:"keyword",
-begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",
-begin:/@\w+/}]}},i,l,c,{className:"function",beginKeywords:"fun",end:"[(]|$",
-returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{
-begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,
-contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/,end:/>/,
-keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,
-endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,
-endsWithParent:!0,contains:[E,e.C_LINE_COMMENT_MODE,b],relevance:0
-},e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE]},b]},{
-begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{
-3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,
-illegal:"extends implements",contains:[{
-beginKeywords:"public protected internal private constructor"
-},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/,end:/>/,excludeBegin:!0,
-excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,
-excludeBegin:!0,returnEnd:!0},l,c]},r,{className:"meta",begin:"^#!/usr/bin/env",
-end:"$",illegal:"\n"},o]}}})();hljs.registerLanguage("kotlin",e)})();/*! `protobuf` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const t={
-match:[/(message|enum|service)\s+/,e.IDENT_RE],scope:{1:"keyword",
-2:"title.class"}};return{name:"Protocol Buffers",keywords:{
-keyword:["package","import","option","optional","required","repeated","group","oneof"],
-type:["double","float","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","bool","string","bytes"],
-literal:["true","false"]},
-contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{
-className:"function",beginKeywords:"rpc",end:/[{;]/,excludeEnd:!0,
-keywords:"rpc returns"},{begin:/^\s*[A-Z_]+(?=\s*=[^\n]+;$)/}]}}})()
-;hljs.registerLanguage("protobuf",e)})();/*! `css` grammar compiled for Highlight.js 11.6.0 */
+;hljs.registerLanguage("javascript",e)})();/*! `json` grammar compiled for Highlight.js 11.7.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const a=["true","false","null"],n={
+scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",keywords:{
+literal:a},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,
+relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0
+},e.QUOTE_STRING_MODE,n,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],
+illegal:"\\S"}}})();hljs.registerLanguage("json",e)})();/*! `css` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict"
;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],i=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],t=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],o=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse()
;return n=>{const a=n.regex,l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
@@ -1155,206 +596,4 @@ relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/
$pattern:/[a-z-]+/,keyword:"and or not only",attribute:i.join(" ")},contains:[{
begin:/[a-z-]+(?=:)/,className:"attribute"},...s,l.CSS_NUMBER_MODE]}]},{
className:"selector-tag",begin:"\\b("+e.join("|")+")\\b"}]}}})()
-;hljs.registerLanguage("css",e)})();/*! `rust` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a={
-className:"title.function.invoke",relevance:0,
-begin:t.concat(/\b/,/(?!let\b)/,e.IDENT_RE,t.lookahead(/\s*\(/))
-},n="([ui](8|16|32|64|128|size)|f(32|64))?",s=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],r=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"]
-;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:r,
-keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"],
-literal:["true","false","Some","None","Ok","Err"],built_in:s},illegal:"",
-contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]
-}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{
-className:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{
-begin:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{className:"symbol",
-begin:/'[a-zA-Z_][a-zA-Z0-9_]*/},{className:"number",variants:[{
-begin:"\\b0b([01_]+)"+n},{begin:"\\b0o([0-7_]+)"+n},{
-begin:"\\b0x([A-Fa-f0-9_]+)"+n},{
-begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+n}],relevance:0},{
-begin:[/fn/,/\s+/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",
-3:"title.function"}},{className:"meta",begin:"#!?\\[",end:"\\]",contains:[{
-className:"string",begin:/"/,end:/"/}]},{
-begin:[/let/,/\s+/,/(?:mut\s+)?/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",
-3:"keyword",4:"variable"}},{
-begin:[/for/,/\s+/,e.UNDERSCORE_IDENT_RE,/\s+/,/in/],className:{1:"keyword",
-3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,e.UNDERSCORE_IDENT_RE],
-className:{1:"keyword",3:"title.class"}},{
-begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,e.UNDERSCORE_IDENT_RE],
-className:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{
-keyword:"Self",built_in:s,type:r}},{className:"punctuation",begin:"->"},a]}}})()
-;hljs.registerLanguage("rust",e)})();/*! `cpp` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a=e.COMMENT("//","$",{
-contains:[{begin:/\\\n/}]
-}),n="[a-zA-Z_]\\w*::",r="(?!struct)(decltype\\(auto\\)|"+t.optional(n)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",i={
-className:"type",begin:"\\b[a-z\\d_]*_t\\b"},s={className:"string",variants:[{
-begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
-begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
-end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
-begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},c={
-className:"number",variants:[{begin:"\\b(0b[01']+)"},{
-begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
-},{
-begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
-}],relevance:0},o={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
-keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
-},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:"string"}),{
-className:"string",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},l={
-className:"title",begin:t.optional(n)+e.IDENT_RE,relevance:0
-},d=t.optional(n)+e.IDENT_RE+"\\s*\\(",u={
-type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],
-keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],
-literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],
-_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]
-},p={className:"function.dispatch",relevance:0,keywords:{
-_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]
-},
-begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))
-},_=[p,o,i,a,e.C_BLOCK_COMMENT_MODE,c,s],m={variants:[{begin:/=/,end:/;/},{
-begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
-keywords:u,contains:_.concat([{begin:/\(/,end:/\)/,keywords:u,
-contains:_.concat(["self"]),relevance:0}]),relevance:0},g={className:"function",
-begin:"("+r+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
-keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",
-keywords:u,relevance:0},{begin:d,returnBegin:!0,contains:[l],relevance:0},{
-begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[s,c]},{
-relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:u,
-relevance:0,contains:[a,e.C_BLOCK_COMMENT_MODE,s,c,i,{begin:/\(/,end:/\)/,
-keywords:u,relevance:0,contains:["self",a,e.C_BLOCK_COMMENT_MODE,s,c,i]}]
-},i,a,e.C_BLOCK_COMMENT_MODE,o]};return{name:"C++",
-aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",
-classNameAliases:{"function.dispatch":"built_in"},
-contains:[].concat(m,g,p,_,[o,{
-begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",
-end:">",keywords:u,contains:["self",i]},{begin:e.IDENT_RE+"::",keywords:u},{
-match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],
-className:{1:"keyword",3:"title.class"}}])}}})();hljs.registerLanguage("cpp",e)
-})();/*! `armasm` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var s=(()=>{"use strict";return s=>{const e={
-variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0
-}),s.COMMENT("[;@]","$",{relevance:0
-}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",
-case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,
-meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",
-built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"
-},contains:[{className:"keyword",
-begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"
-},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0
-},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{
-className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"
-},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",
-variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{
-begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}})()
-;hljs.registerLanguage("armasm",s)})();/*! `shell` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var s=(()=>{"use strict";return s=>({name:"Shell Session",
-aliases:["console","shellsession"],contains:[{className:"meta.prompt",
-begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,
-subLanguage:"bash"}}]})})();hljs.registerLanguage("shell",s)})();/*! `perl` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{
-const n=e.regex,t=/[dualxmsipngr]{0,12}/,r={$pattern:/[\w.]+/,
-keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0"
-},s={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:r},i={begin:/->\{/,
-end:/\}/},a={variants:[{begin:/\$\d/},{
-begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")
-},{begin:/[$%@][^\s\w{]/,relevance:0}]
-},c=[e.BACKSLASH_ESCAPE,s,a],o=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],g=(e,r,s="\\1")=>{
-const i="\\1"===s?s:n.concat(s,r)
-;return n.concat(n.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,i,/(?:\\.|[^\\\/])*?/,s,t)
-},l=(e,r,s)=>n.concat(n.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,s,t),d=[a,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{
-endsWithParent:!0}),i,{className:"string",contains:c,variants:[{
-begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",
-end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{
-begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",
-relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",
-contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",
-contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{
-begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number",
-begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",
-relevance:0},{
-begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",
-keywords:"split return print reverse grep",relevance:0,
-contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{
-begin:g("s|tr|y",n.either(...o,{capture:!0}))},{begin:g("s|tr|y","\\(","\\)")},{
-begin:g("s|tr|y","\\[","\\]")},{begin:g("s|tr|y","\\{","\\}")}],relevance:2},{
-className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{
-begin:l("(?:m|qr)?",/\//,/\//)},{begin:l("m|qr",n.either(...o,{capture:!0
-}),/\1/)},{begin:l("m|qr",/\(/,/\)/)},{begin:l("m|qr",/\[/,/\]/)},{
-begin:l("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub",
-end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{
-begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",
-subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]
-}];return s.contains=d,i.contains=d,{name:"Perl",aliases:["pl","pm"],keywords:r,
-contains:d}}})();hljs.registerLanguage("perl",e)})();/*! `ruby` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{
-const n=e.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",s=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(s,/(::\w+)*/),r={
-"variable.constant":["__FILE__","__LINE__"],
-"variable.language":["self","super"],
-keyword:["alias","and","attr_accessor","attr_reader","attr_writer","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","include","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield"],
-built_in:["proc","lambda"],literal:["true","false","nil"]},c={
-className:"doctag",begin:"@[A-Za-z]+"},t={begin:"#<",end:">"
-},b=[e.COMMENT("#","$",{contains:[c]}),e.COMMENT("^=begin","^=end",{
-contains:[c],relevance:10}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],l={
-className:"subst",begin:/#\{/,end:/\}/,keywords:r},d={className:"string",
-contains:[e.BACKSLASH_ESCAPE,l],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/
-},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,
-end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?,end:/>/},{
-begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,
-end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{
-begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{
-begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{
-begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{
-begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),
-contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,
-contains:[e.BACKSLASH_ESCAPE,l]})]}]},g="[0-9](_?[0-9])*",o={className:"number",
-relevance:0,variants:[{
-begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{
-begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"
-},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{
-begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{
-begin:"\\b0(_?[0-7])+r?i?\\b"}]},_={variants:[{match:/\(\)/},{
-className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,
-keywords:r}]},u=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{
-match:[/class\s+/,i]}],scope:{2:"title.class",4:"title.class.inherited"},
-keywords:r},{relevance:0,match:[i,/\.new[ (]/],scope:{1:"title.class"}},{
-relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{
-match:[/def/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[_]},{
-begin:e.IDENT_RE+"::"},{className:"symbol",
-begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",
-begin:":(?!\\s)",contains:[d,{begin:a}],relevance:0},o,{className:"variable",
-begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{
-className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0,
-relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",
-keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,l],
-illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{
-begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",
-end:"\\][a-z]*"}]}].concat(t,b),relevance:0}].concat(t,b)
-;l.contains=u,_.contains=u;const w=[{begin:/^\s*=>/,starts:{end:"$",contains:u}
-},{className:"meta.prompt",
-begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",
-starts:{end:"$",keywords:r,contains:u}}];return b.unshift(t),{name:"Ruby",
-aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/,
-contains:[e.SHEBANG({binary:"ruby"})].concat(w).concat(b).concat(u)}}})()
-;hljs.registerLanguage("ruby",e)})();/*! `yaml` grammar compiled for Highlight.js 11.6.0 */
-(()=>{var e=(()=>{"use strict";return e=>{
-const n="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={
-className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/
-},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",
-variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(s,{
-variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={
-end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\{/,
-end:/\}/,contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",
-contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{
-begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{
-begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",
-relevance:10},{className:"string",
-begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{
-begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,
-relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",
-begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a
-},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",
-begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",
-relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{
-className:"number",
-begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"
-},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},t,g,s],r=[...b]
-;return r.pop(),r.push(i),l.contains=r,{name:"YAML",case_insensitive:!0,
-aliases:["yml"],contains:b}}})();hljs.registerLanguage("yaml",e)})();
\ No newline at end of file
+;hljs.registerLanguage("css",e)})();
\ No newline at end of file
diff --git a/src/scss/main.scss b/src/scss/main.scss
index a6f11cd..c97e4be 100644
--- a/src/scss/main.scss
+++ b/src/scss/main.scss
@@ -5,5 +5,6 @@
@import "vapor/navigation";
@import "vapor/pagination";
@import "vapor/blog";
+@import "vapor/main-site";
@import "vapor/vapor-dark";
@import "vapor/vapor-light";
\ No newline at end of file
diff --git a/src/scss/vapor/main-site.scss b/src/scss/vapor/main-site.scss
new file mode 100644
index 0000000..158ea94
--- /dev/null
+++ b/src/scss/vapor/main-site.scss
@@ -0,0 +1,853 @@
+html,
+body {
+ overflow-x: hidden;
+}
+
+.main-title {
+ font-size: 72px;
+ text-align: center;
+ font-weight: 500;
+ font-style: normal;
+ line-height: 105%;
+ letter-spacing: -0.03em;
+ margin-top: 56px;
+ margin-bottom: 0px;
+
+ @include media-breakpoint-down(lg) {
+ margin-top: 48px;
+ font-size: 36px;
+ line-height: 125%;
+ letter-spacing: -0.02em;
+ }
+}
+
+.main-page-caption {
+ font-style: normal;
+ font-weight: 400;
+ font-size: 24px;
+ line-height: 150%;
+ text-align: center;
+ max-width: 768px;
+ margin-top: 24px;
+
+ @include media-breakpoint-down(lg) {
+ margin-top: 16px;
+ font-size: 16px;
+ }
+}
+
+.main-code-demo {
+ margin-top: 64px;
+ max-width: 900px;
+ mask-image: -webkit-gradient(linear, left top, left bottom,
+ color-stop(0.00, rgba(0, 0, 0, 1)),
+ color-stop(0.35, rgba(0, 0, 0, 1)),
+ color-stop(0.50, rgba(0, 0, 0, 0.5)),
+ color-stop(0.65, rgba(0, 0, 0, 0)),
+ color-stop(1.00, rgba(0, 0, 0, 0)));
+ -webkit-mask-image: -webkit-gradient(linear, left top, left bottom,
+ color-stop(0.00, rgba(0, 0, 0, 1)),
+ color-stop(0.35, rgba(0, 0, 0, 1)),
+ color-stop(0.50, rgba(0, 0, 0, 0.5)),
+ color-stop(0.65, rgba(0, 0, 0, 0)),
+ color-stop(1.00, rgba(0, 0, 0, 0)));
+
+ @include media-breakpoint-down(md) {
+ margin-bottom: -40%;
+ }
+}
+
+.main-site-main-page {
+ #vapor-navbar {
+ position: fixed;
+ top: -80px;
+ width: 100%;
+ transition: top 0.3s;
+ z-index: 9999;
+ backdrop-filter: blur(20px);
+ -webkit-backdrop-filter: blur(20px);
+ }
+}
+
+.main-page-callout-buttons {
+ margin-top: 48px;
+
+}
+
+#vapor-hero-logo {
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ width: 233px;
+ height: 90px;
+
+ @include media-breakpoint-down(lg) {
+ margin-top: 16px;
+ width: 100px;
+ height: 38px;
+ }
+
+ @include media-breakpoint-up(lg) {
+ margin-top: 64px;
+ }
+}
+
+.main-site-main-page {
+ background-position-x: center;
+ background-position-y: 320px;
+ background-repeat: no-repeat;
+ background-size: 100% 500px;
+}
+
+.used-by-caption {
+ font-style: normal;
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 150%;
+ text-align: center;
+ margin-bottom: 32px;
+}
+
+.used-by-companies {
+ @include media-breakpoint-down(md) {
+ margin-bottom: -32px;
+ }
+}
+
+.used-by-companies-items {
+ column-gap: 80px;
+ margin-bottom: 32px;
+
+ @include media-breakpoint-down(lg) {
+ column-gap: 40px;
+ margin-bottom: 16px;
+ }
+}
+
+.used-by-item {
+ margin-bottom: 32px;
+
+ @include media-breakpoint-down(lg) {
+ margin-bottom: 16px;
+ }
+}
+
+.used-by-icon {
+ display: block;
+ overflow: hidden;
+}
+
+.icon-swift-package-index {
+ width: 241px;
+ height: 54px;
+
+ @include media-breakpoint-down(lg) {
+ width: 163px;
+ height: 36px;
+ }
+}
+
+.icon-spotify {
+ width: 161px;
+ height: 49px;
+
+ @include media-breakpoint-down(lg) {
+ width: 80px;
+ height: 24px;
+ }
+}
+
+.icon-john-lewis {
+ width: 115px;
+ height: 73px;
+
+ @include media-breakpoint-down(lg) {
+ width: 57px;
+ height: 36px;
+ }
+}
+
+.icon-allegro {
+ width: 145px;
+ height: 51px;
+
+ @include media-breakpoint-down(lg) {
+ width: 70px;
+ height: 24px;
+ }
+}
+
+.icon-transeo {
+ width: 239px;
+ height: 49px;
+
+ @include media-breakpoint-down(lg) {
+ width: 120px;
+ height: 24px;
+ }
+}
+
+.main-site-section-header {
+ font-weight: 500;
+ font-size: 48px;
+ line-height: 105%;
+ letter-spacing: -0.02em;
+ max-width: 768px;
+ font-style: normal;
+ margin-bottom: 20px;
+
+ @include media-breakpoint-down(lg) {
+ font-weight: 500;
+ font-size: 30px;
+ line-height: 125%;
+ }
+}
+
+.main-site-packages-list {
+ .caption {
+ max-width: 768px;
+ font-style: normal;
+ font-weight: 400;
+ font-size: 20px;
+ line-height: 150%;
+ margin-bottom: 64px;
+
+ @include media-breakpoint-down(lg) {
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 150%;
+ }
+ }
+
+ .main-site-packages-grid {
+ .col {
+ margin-top: 32px;
+ }
+ }
+}
+
+h2 {
+ font-style: normal;
+ font-weight: 500;
+ font-size: 48px;
+ line-height: 105%;
+ letter-spacing: -0.02em;
+ max-width: 560px;
+ margin-top: 26px;
+ margin-bottom: 16px;
+
+ @include media-breakpoint-down(lg) {
+ font-size: 30px;
+ line-height: 125%;
+ }
+}
+
+.main-site-features {
+ #performance {
+ position: relative;
+ overflow: hidden;
+ left: 0;
+ }
+
+ .row {
+ margin-top: 271px;
+
+ @include media-breakpoint-down(lg) {
+ margin-top: 128px;
+ }
+ }
+
+ .col.order-2 {
+ margin-top: 64px;
+ }
+
+ pre,
+ code {
+ white-space: pre-wrap;
+ }
+
+ .vapor-icon {
+ background-color: $pink-300;
+ width: 42px;
+ height: 42px;
+ }
+
+ .blurry-background {
+ background: linear-gradient(230.51deg, #23acf040 27.41%, #df3efb40 67%, #70198040 80.12%);
+ filter: blur(100px);
+ }
+
+ span {
+ color: $pink-300;
+ }
+
+ .code-outline-right {
+ z-index: -1;
+ width: 85%;
+ height: 130%;
+ right: -35%;
+ border-radius: 40px;
+ top: -15%;
+ border: 1px solid transparent;
+ position: absolute;
+ opacity: 0.8;
+ background: linear-gradient(white, white) padding-box,
+ linear-gradient(90deg, rgba(148, 168, 178, 0.03) 0%, #F6F7F7 4.21%, rgba(148, 168, 178, 0.888453) 7.98%, #94A8B2 37.5%, rgba(148, 168, 178, 0.117173) 90.41%, rgba(148, 168, 178, 0) 100%) border-box;
+
+ @include media-breakpoint-down(lg) {
+ height: 120%;
+ top: -4%;
+ }
+ }
+
+ .code-outline-left {
+ z-index: -1;
+ width: 85%;
+ height: 130%;
+ left: -35%;
+ border-radius: 40px;
+ top: -15%;
+ border: 1px solid transparent;
+ position: absolute;
+ opacity: 0.8;
+ transform: matrix(-1, 0, 0, 1, 0, 0);
+ background: linear-gradient(white, white) padding-box,
+ linear-gradient(90deg, rgba(148, 168, 178, 0.01) 0%, #F6F7F7 4.21%, rgba(148, 168, 178, 0.888453) 9.96%, #94A8B2 60.32%, rgba(148, 168, 178, 0.117173) 90.41%, rgba(148, 168, 178, 0.03) 100%) border-box;
+
+ @include media-breakpoint-down(lg) {
+ height: 120%;
+ top: -4%;
+ }
+ }
+
+ .code-error {
+ position: absolute;
+ background: rgba(179, 35, 95, 0.21);
+ border: 1px solid rgba(221, 214, 254, 0.1);
+ backdrop-filter: blur(20px);
+ -webkit-backdrop-filter: blur(20px);
+ border-radius: 24px;
+ height: fit-content;
+ width: 48%;
+ display: flex;
+ bottom: -20%;
+ text-align: left;
+ justify-content: center;
+ right: 15%;
+
+ @include media-breakpoint-down(md) {
+ width: 80%;
+ right: 10%;
+ }
+
+ @include media-breakpoint-up(md) {
+ right: 0%;
+ }
+
+ .code-error-sidebar {
+ background: code-error-sidebar-background-red;
+ border-top-left-radius: 24px;
+ border-bottom-left-radius: 24px;
+ text-align: center;
+ width: 15%;
+
+ .vapor-icon {
+ height: 22px;
+ width: 22px;
+ display: inline-block;
+ margin-top: 50%;
+ }
+ }
+
+ .code-error-message {
+ color: $grey-700;
+ font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas, monospace;
+ font-weight: 200;
+ font-size: 16px;
+ line-height: 24px;
+ /* or 150% */
+ padding: 3%;
+ width: 85%;
+
+ @include media-breakpoint-down(md) {
+ font-size: 14px;
+ }
+ }
+ }
+
+ p {
+ margin-top: 0;
+ margin-bottom: 32px;
+ max-width: 488px;
+ font-style: normal;
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 150%;
+ }
+
+ .code-example {
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+
+ @include media-breakpoint-down(lg) {
+ margin-top: 60px;
+ }
+
+ @include media-breakpoint-up(lg) {
+ margin-left: 48px;
+ margin-right: 48px;
+ }
+ }
+
+ .errored table {
+ tr:nth-child(7) {
+ background: rgba(128, 25, 68, 0.3);
+ }
+
+ tr:nth-child(8) {
+ background: rgba(128, 25, 68, 0.3);
+ }
+ }
+
+ pre {
+ margin-bottom: 0;
+ }
+}
+
+.code-example-explainer {
+ span {
+ color: $pink-300;
+ }
+
+ h2 {
+ font-size: 48px;
+ margin-top: 8px;
+ margin-bottom: 24px;
+
+ @include media-breakpoint-down(lg) {
+ font-size: 30px;
+ }
+ }
+
+ .code-example-explainer-title {
+ color: #DF3FEB;
+ }
+
+ @include media-breakpoint-up(lg) {
+ margin-left: 48px;
+ margin-right: 48px;
+ }
+}
+
+.learn-more-link {
+ display: inline-flex;
+ text-decoration: none;
+ font-style: normal;
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 150%;
+ color: $grey-800;
+
+ .vapor-icon {
+ width: 16px;
+ height: 16px;
+ margin-left: 4px;
+ margin-top: 4px;
+ transition: margin-left 0.1s ease-in-out;
+ }
+
+ &:hover {
+ text-decoration: none;
+ color: $grey-800;
+
+ .vapor-icon {
+ margin-left: 8px;
+ transition: margin-left 0.1s ease-in-out;
+ }
+ }
+}
+
+#integrations {
+ &::before {
+ content: "";
+ background-size: cover;
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ z-index: -1;
+ overflow-x: hidden;
+ left: 0;
+ background-image: url("../../images/background-gradient.svg");
+ }
+
+ margin-top: 271px;
+
+ @include media-breakpoint-down(lg) {
+ margin-top: 128px;
+ }
+
+ .btn-primary {
+ @media (min-width: 768px) {
+ margin-bottom: 128px !important;
+ }
+ }
+}
+
+#showcase {
+ .showcase-header {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ gap: 32px;
+ align-items: center !important;
+ width: 100%;
+ margin-bottom: 32px;
+ margin-top: 271px;
+
+ @include media-breakpoint-down(lg) {
+ margin-top: 128px;
+ }
+
+ @include media-breakpoint-down(md) {
+ margin-top: 64px;
+ }
+
+ h3 {
+ font-family: 'Genera Grotesk';
+ font-style: normal;
+ font-weight: 500;
+ font-size: 48px;
+ line-height: 105%;
+ width: 65%;
+ margin: 0;
+ /* or 50px */
+ letter-spacing: -0.02em;
+ font-feature-settings: 'salt' on;
+
+ @include media-breakpoint-down(md) {
+ font-size: 30px;
+ width: 100%;
+ }
+ }
+
+ .btn {
+ @include media-breakpoint-down(md) {
+ display: hidden;
+ }
+
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ padding: 16px 12px 16px 12px;
+ gap: 8px;
+ background: $grey-200;
+ border: 1px solid rgba($pink-300, 0.1);
+ font-style: normal;
+ font-weight: 500;
+ color: $pink-300;
+
+ .vapor-icon {
+ height: 16px;
+ width: 18px;
+ background-color: $pink-300;
+ margin-left: 0;
+ }
+
+ .vapor-icon:hover {
+ background-color: $pink-300;
+ }
+ }
+
+ .btn:hover {
+ background: $grey-300;
+ }
+ }
+
+ .showcase-cards::-webkit-scrollbar {
+ display: none;
+ }
+
+ .showcase-cards {
+ display: flex !important;
+ overflow-x: scroll;
+ width: 100%;
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+
+ .card {
+ border: none;
+ background: $grey-100;
+ border-radius: 24px;
+ flex: none;
+ order: 0;
+ flex-grow: 1;
+ margin-right: 32px;
+ width: 18rem !important;
+
+ img {
+ border-top-right-radius: 24px;
+ border-top-left-radius: 24px;
+ }
+
+ .btn {
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ padding: 8px 8px 8px 16px;
+ gap: 4px;
+ background: $grey-100;
+ border: 1px solid rgba($pink-300, 0.1);
+ border-radius: 12px;
+ font-family: 'Genera Grotesk';
+ font-style: normal;
+ font-weight: 500;
+ font-size: 14px;
+ line-height: 150%;
+ font-feature-settings: 'salt' on;
+ color: $pink-300;
+ }
+
+ .btn:hover {
+ background: $grey-300;
+ }
+
+ .vapor-icon {
+ background-color: $pink-300;
+ width: 14px;
+ height: 15px;
+ margin-left: 2px;
+ }
+ }
+ }
+
+ .btn-group {
+ margin-top: 32px;
+ display: flex;
+ justify-content: center; // center align horizontally
+ flex-wrap: wrap; // allow buttons to wrap to next line if necessary
+ }
+
+ @media (min-width: 768px) {
+ .btn-group {
+ justify-content: flex-start; // align to left on larger screens
+ }
+ }
+
+ .arrow-button {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ padding: 0px 12px;
+ margin-right: 16px;
+ background: $grey-200;
+ border: 1px solid $grey-300;
+ border-radius: 61px;
+ width: 56px;
+ height: 56px;
+
+ span {
+ background-color: $grey-800;
+ width: 24px;
+ height: 24px;
+ }
+ }
+
+ .arrow-button:hover {
+ background: $grey-300;
+ }
+}
+
+#api-docs {
+ &::before {
+ content: "";
+ background-size: cover;
+ position: absolute;
+ width: 100%;
+ z-index: -1;
+ overflow-x: hidden;
+ left: 0;
+ background: url("../../images/api-docs-background-gradient.svg") no-repeat right, $grey-100;
+ max-height: 550px;
+ min-height: 400px;
+
+ @include media-breakpoint-down(lg) {
+ height: 55%;
+ max-height: 100%;
+ }
+
+ @include media-breakpoint-down(md) {
+ height: 55%;
+ max-height: 100%;
+ backdrop-filter: blur(100px);
+ -webkit-backdrop-filter: blur(100px);
+ filter: blur(100px);
+ }
+
+ @include media-breakpoint-down(sm) {
+ height: 100%;
+ max-height: 100%;
+ filter: blur(100px);
+ }
+ }
+
+ padding: 144px 16px;
+ margin-top: 100px;
+
+ @include media-breakpoint-down(lg) {
+ padding: 96px 16px;
+ }
+
+ @include media-breakpoint-down(md) {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding: 48px 16px;
+ }
+
+ h2 {
+ margin-top: 0;
+ font-size: 48px;
+ margin-bottom: 40px;
+
+ @include media-breakpoint-down(lg) {
+ font-size: 30px;
+ }
+ }
+
+ .items-list {
+ ul {
+ list-style: none;
+ margin-bottom: 0;
+ padding-left: 0;
+
+ li:not(:last-child) {
+ margin-bottom: 20px;
+ }
+
+ @include media-breakpoint-down(lg) {
+ li span {
+ font-size: 16px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 150%;
+ }
+ }
+ }
+
+ span {
+ font-size: 20px;
+ }
+
+ .icon-check-circle {
+ height: 28px;
+ width: 28px;
+ background-color: $blue-300;
+ }
+ }
+}
+
+#discord {
+ margin-top: 200px;
+
+ @include media-breakpoint-down(md) {
+ margin-top: 48px;
+ }
+
+ h2 {
+ margin-top: 0;
+ margin-bottom: 24px;
+ font-size: 48px;
+
+ @include media-breakpoint-down(lg) {
+ font-size: 30px;
+ }
+ }
+}
+
+#sponsors {
+ margin-top: 100px;
+
+ @include media-breakpoint-down(md) {
+ margin-top: 0;
+ }
+
+ .sponsors-list {
+ display: flex !important;
+ overflow-x: scroll;
+ width: 100%;
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+
+ .card {
+ border: none;
+ background: $grey-100;
+ border-radius: 24px;
+ flex: none;
+ order: 0;
+ flex-grow: 1;
+ margin-right: 32px;
+ width: 24rem !important;
+
+ @include media-breakpoint-down(md) {
+ width: 18rem !important;
+ }
+
+ .card-body {
+ padding: 24px;
+ }
+
+ h5 {
+ margin-top: 24px;
+ color: $grey-800;
+ font-size: 24px;
+ }
+
+ p {
+ color: $grey-700;
+ font-size: 16px;
+ margin-top: 8px;
+ }
+
+ img {
+ width: 65%;
+ }
+ }
+ }
+
+ .sponsors-list::-webkit-scrollbar {
+ display: none;
+ }
+
+ #sponsors-header {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ gap: 32px;
+ align-items: center !important;
+ width: 100%;
+ margin-bottom: 64px;
+
+ a {
+ @include media-breakpoint-down(md) {
+ display: none;
+ }
+ }
+
+ h3 {
+ font-size: 48px;
+ width: 60%;
+ margin: 0;
+ letter-spacing: -0.02em;
+ font-feature-settings: 'salt' on;
+
+ @include media-breakpoint-down(md) {
+ font-size: 30px;
+ width: 100%;
+ }
+ }
+ }
+}
diff --git a/src/scss/vapor/navigation.scss b/src/scss/vapor/navigation.scss
index 3bafdee..9cbd00a 100644
--- a/src/scss/vapor/navigation.scss
+++ b/src/scss/vapor/navigation.scss
@@ -118,7 +118,7 @@ footer {
border-radius: 24px;
border: 1px solid $grey-200;
}
-
+
.nav-dropdown-container {
padding: 1em;
}
@@ -181,4 +181,4 @@ nav {
padding: 1em;
z-index: 1;
}
-}
\ No newline at end of file
+}
diff --git a/src/scss/vapor/syntax.scss b/src/scss/vapor/syntax.scss
index 4d36a9d..8e1e9ce 100644
--- a/src/scss/vapor/syntax.scss
+++ b/src/scss/vapor/syntax.scss
@@ -3,7 +3,10 @@
.hljs {
display: block;
overflow-x: auto;
- padding: 0.5em;
+ padding-left: 0.5em;
+ padding-right: 40px;
+ padding-top: 0;
+ padding-bottom: 0;
background: radial-gradient(97.68% 221.36% at 97.68% 100%, rgba(35, 172, 240, 0.052) 0%, rgba(35, 172, 240, 0) 100%), #FAFAFD;
/* Neutrals/grey-300 */
border: 1px solid $grey-300;
@@ -11,6 +14,22 @@
/* Note: backdrop-filter has minimal browser support */
border-radius: 24px;
color: #8194F7;
+
+ tr:first-child td {
+ padding-top: 48px;
+
+ @include media-breakpoint-down(lg) {
+ padding-top: 24px;
+ }
+ }
+
+ tr:last-child td {
+ padding-bottom: 48px;
+
+ @include media-breakpoint-down(lg) {
+ padding-bottom: 24px;
+ }
+ }
}
diff --git a/src/scss/vapor/vapor-dark.scss b/src/scss/vapor/vapor-dark.scss
index ffdf796..1068c6e 100644
--- a/src/scss/vapor/vapor-dark.scss
+++ b/src/scss/vapor/vapor-dark.scss
@@ -13,6 +13,17 @@
background-size: 100% 500px;
}
+ body.main-site-main-page {
+ background-position-y: 250px;
+ background-size: initial;
+ }
+
+ .hljs {
+ background: rgba(38, 38, 56, 0.8);
+ border: 1px solid rgba(221, 214, 254, 0.2);
+ border-radius: 24px;
+ }
+
#theme-switch-icon {
background-color: $grey-600;
-webkit-mask-image: url(../../images/moon-01.svg);
@@ -192,6 +203,14 @@
background: linear-gradient(180deg, $pink-300 0%, $pink-400 100%);
}
+ .btn-primary {
+ a:hover {
+ .vapor-icon {
+ background-color: white;
+ }
+ }
+ }
+
.blog-tags {
color: $grey-100;
@@ -274,13 +293,13 @@
background-color: $nav-link-action-color-dark;
}
}
-
+
#documentation-dropdown-link:active {
.vapor-icon {
background-color: $nav-link-action-color-dark;
}
}
-
+
#documentation-dropdown-link:focus {
.vapor-icon {
background-color: $nav-link-action-color-dark;
@@ -339,7 +358,7 @@
.card-title {
color: $grey-300;
}
-
+
.card-text {
color: $grey-500;
}
@@ -348,7 +367,7 @@
.blog-post-publish-date {
color: $grey-700;
}
-
+
.blog-post-author-name {
color: $grey-500;
}
@@ -364,19 +383,21 @@
.tag-list-tag {
.tag-link {
color: $grey-500;
-
+
.badge {
color: $grey-300;
background-color: $grey-800;
}
}
}
-
+
.tag-list-tag {
- .tag-link:hover, .tag-link.active {
+
+ .tag-link:hover,
+ .tag-link.active {
color: $grey-100;
background-color: $grey-800;
-
+
.badge {
background-color: $grey-700;
color: $blue-300;
@@ -390,17 +411,18 @@
background-color: $off-black;
border: 1px solid $grey-800;
color: $grey-500;
-
+
.vapor-icon {
background-color: $grey-500;
}
}
-
- .vapor-molecule:active, .vapor-molecule:hover {
+
+ .vapor-molecule:active,
+ .vapor-molecule:hover {
background-color: $grey-800;
border: 1px solid $grey-700;
color: $grey-400;
-
+
.vapor-icon {
background-color: $grey-400;
}
@@ -410,14 +432,223 @@
@include media-breakpoint-down(lg) {
background: $off-black;
border: 1px solid $grey-800;
-
+
li a {
color: $grey-500;
}
- li a.active, a:hover, li a:active {
+ li a.active,
+ a:hover,
+ li a:active {
color: $blue-300;
}
}
}
-}
\ No newline at end of file
+
+ .main-page-caption {
+ color: $grey-500;
+ }
+
+ .btn-link {
+ color: $grey-200;
+
+ a {
+ color: $grey-200;
+ }
+
+ a:hover {
+ color: $grey-100;
+
+ .vapor-icon {
+ background-color: $grey-100;
+ }
+ }
+ }
+
+ .btn-secondary-link {
+ color: $grey-500;
+
+ a {
+ color: $grey-500;
+ }
+
+ a:hover {
+ color: $grey-400;
+
+ .vapor-icon {
+ background-color: $grey-400;
+ }
+ }
+ }
+
+ .icon-secondary {
+ background-color: $grey-500;
+ }
+
+ .main-site-main-page {
+ @include media-breakpoint-up(md) {
+ background-image: url(../../images/main-site-homepage-hero-dark.svg);
+ }
+ }
+
+ #vapor-hero-logo {
+ background-image: url(../../images/logo-main-white.svg);
+ }
+
+ .used-by-caption {
+ color: $grey-400;
+ }
+
+ .used-by-icon {
+ background-color: $grey-500;
+ }
+
+ .vapor-feature-card {
+ background-color: rgba($grey-800, 0.3);
+
+ .card-text {
+ color: $grey-500;
+ }
+ }
+
+ .learn-more-link {
+ color: $grey-200;
+
+ .vapor-icon {
+ background-color: $grey-200;
+ }
+ }
+
+ .learn-more-link:hover {
+ color: $grey-100;
+
+ .vapor-icon {
+ background-color: $grey-100;
+ }
+ }
+
+ .main-site-features {
+ .code-outline-right {
+ background: linear-gradient($grey-900, $grey-900) padding-box,
+ linear-gradient(90deg, rgba(148, 168, 178, 0.03) 0%, #F6F7F7 4.21%, rgba(148, 168, 178, 0.888453) 7.98%, #94A8B2 37.5%, rgba(148, 168, 178, 0.117173) 90.41%, rgba(148, 168, 178, 0) 100%) border-box;
+ }
+
+ .code-outline-left {
+ background: linear-gradient($grey-900, $grey-900) padding-box,
+ linear-gradient(90deg, rgba(148, 168, 178, 0.01) 0%, #F6F7F7 4.21%, rgba(148, 168, 178, 0.888453) 9.96%, #94A8B2 60.32%, rgba(148, 168, 178, 0.117173) 90.41%, rgba(148, 168, 178, 0.03) 100%) border-box;
+ }
+
+ .code-error {
+ background: rgba(128, 25, 68, 0.2);
+ border: 1px solid rgba(221, 214, 254, 0.1);
+
+ .code-error-sidebar {
+ background: rgba(128, 25, 68, 0.3);
+ }
+
+ .code-error-message {
+ color: $grey-300;
+ }
+ }
+ }
+
+ #showcase {
+ .showcase-header {
+ .btn {
+ background: rgba(255, 255, 255, 0.05);
+ border: 1px solid rgba(223, 62, 251, 0.1);
+ }
+
+ .btn:hover {
+ background: rgba(255, 255, 255, 0.1);
+ border: 1px solid rgba(223, 62, 251, 0.2);
+ }
+ }
+
+ .card {
+ background: rgba(55, 57, 83, 0.3);
+ color: $grey-500;
+
+ .btn {
+ background: rgba(255, 255, 255, 0.05);
+ border: 1px solid rgba(223, 62, 251, 0.1);
+ }
+
+ .btn:hover {
+ background: rgba(255, 255, 255, 0.1);
+ border: 1px solid rgba(223, 62, 251, 0.2);
+ }
+ }
+
+ .arrow-button {
+ background: rgba(55, 57, 83, 0.3);
+ border: 1px solid #373953;
+
+ span {
+ background-color: $grey-200;
+ }
+ }
+
+ .arrow-button:hover {
+ background: rgba(55, 57, 83, 0.5);
+ }
+
+ #sambot-card img {
+ content: url(../../../static/images/sambot-card-dark.png);
+ }
+
+ #underway-nyc-card img {
+ content: url(../../../static/images/underway-nyc-card-dark.png);
+ }
+
+ #swiftfiddle-card img {
+ content: url(../../../static/images/swiftfiddle-card-dark.png);
+ }
+
+ #transeo-card img {
+ content: url(../../../static/images/transeo-card-dark.png);
+ }
+ }
+
+ #discord {
+ .contribute-link {
+ color: $grey-200;
+
+ .vapor-icon {
+ background-color: $grey-200;
+ }
+ }
+
+ #discord-chat-image {
+ content: url(../../../static/images/discord-chat-dark.png);
+ }
+ }
+
+ #sponsors {
+ .card {
+ background: rgba(55, 57, 83, 0.30);
+
+ h5 {
+ color: $grey-200;
+ }
+ }
+ }
+
+ #api-docs {
+ &::before {
+ background: url("../../images/api-docs-background-gradient.svg") no-repeat right, #1C1C1F;
+ }
+
+ span {
+ color: $grey-100;
+ }
+ }
+
+ #integrations {
+ background-image: url("../../images/integrations-background-dark.png") repeat;
+
+ #integrations-image {
+ content: url('../../../static/images/integrations-dark.png');
+ }
+ }
+}
diff --git a/src/scss/vapor/vapor-icons.scss b/src/scss/vapor/vapor-icons.scss
index 1e01d6e..1fedbe9 100644
--- a/src/scss/vapor/vapor-icons.scss
+++ b/src/scss/vapor/vapor-icons.scss
@@ -12,6 +12,7 @@ $icon-names: (
'x-close',
'menu-04',
'github-fill',
+ 'github-line',
'twitter-fill',
'copy-06',
'reddit-fill',
@@ -23,6 +24,22 @@ $icon-names: (
'chevron-right',
'chevron-down',
'mastodon-fill',
+ 'swift-package-index',
+ 'spotify',
+ 'john-lewis',
+ 'allegro',
+ 'transeo',
+ 'brackets-check',
+ 'key-01',
+ 'database-03',
+ 'code-browser',
+ // 'integration-01',
+ 'integration-09',
+ 'alert-octagon',
+ 'arrow-narrow-up-right',
+ 'arrow-right',
+ 'arrow-left',
+ 'check-circle'
);
@each $name in $icon-names {
@@ -37,4 +54,4 @@ $icon-names: (
display: block;
overflow: hidden;
background-color: black;
-}
\ No newline at end of file
+}
diff --git a/src/scss/vapor/vapor-light.scss b/src/scss/vapor/vapor-light.scss
index b1def4a..60dfd82 100644
--- a/src/scss/vapor/vapor-light.scss
+++ b/src/scss/vapor/vapor-light.scss
@@ -223,4 +223,84 @@ hr {
code {
color: $pink-300;
+}
+
+.main-page-caption {
+ color: $grey-700;
+}
+
+.btn-link {
+ color: $grey-800;
+
+ a {
+ color: $grey-800;
+ }
+
+ a:hover {
+ color: $grey-900;
+
+ .vapor-icon {
+ background-color: $grey-900;
+ }
+ }
+}
+
+.btn-secondary-link {
+ color: $grey-600;
+
+ a {
+ color: $grey-600;
+ }
+
+ a:hover {
+ color: $grey-700;
+
+ .vapor-icon {
+ background-color: $grey-700;
+ }
+ }
+}
+
+.icon-secondary {
+ background-color: $grey-600;
+}
+
+#vapor-hero-logo {
+ background-image: url(../../images/logo-main-black.svg);
+}
+
+.main-site-main-page {
+ background-image: url(../../images/main-site-homepage-hero-light.svg);
+}
+
+.used-by-caption {
+ color: $grey-600;
+}
+
+.used-by-icon {
+ background-color: $grey-700;
+}
+
+.vapor-feature-card {
+ background-color: $grey-100;
+
+ .feature-card-icon {
+ background-color: $blue-300;
+ }
+}
+
+.main-site-learn-more-link {
+ color: $grey-800;
+
+ .vapor-icon {
+ background-color: $grey-800;
+ }
+}
+
+.main-site-learn-more-link:hover {
+ color: $grey-900;
+
+ .vapor-icon {
+ background-color: $grey-900;
+ }
}
\ No newline at end of file
diff --git a/src/scss/vapor/vapor.scss b/src/scss/vapor/vapor.scss
index 20c632d..a7912f2 100644
--- a/src/scss/vapor/vapor.scss
+++ b/src/scss/vapor/vapor.scss
@@ -48,6 +48,7 @@ $grey-100: #FAFAFD;
$off-black: #1C1C1F;
$off-light-grey: #EAECF0;
$off-black-2: #101828;
+$code-error-sidebar-background-red: #b2235f1a;
// Define the fonts:
$font-family-sans-serif: "Genera Grotesk", "Inter", system-ui, helvetica, sans-serif;
@@ -120,14 +121,13 @@ body {
.btn {
font-size: 16px;
- line-height: 150%;
+ line-height: 100%;
--#{$prefix}btn-border-radius: 16px;
--#{$prefix}btn-border-color: transparent;
padding-top: 16px;
padding-bottom: 16px;
padding-left: 24px;
padding-right: 24px;
-
}
.btn-small {
@@ -145,10 +145,24 @@ body {
background: linear-gradient(180deg, $pink-300 0%, $pink-500 100%);
--#{$prefix}btn-color: white;
color: white;
+ border: none;
+
+ a {
+ color: white;
+ display: inline-flex;
+ }
+
+
+ a:hover {
+ color: white;
+ text-decoration: none;
+ }
.vapor-icon {
background-color: white;
-
+ width: 16px;
+ height: 16px;
+ margin-left: 10px;
}
}
@@ -181,6 +195,12 @@ h3 {
}
}
+@include media-breakpoint-down(lg) {
+ .w-mobile-100 {
+ width: 100%;
+ }
+}
+
.animate {
animation-duration: 0.3s;
-webkit-animation-duration: 0.3s;
@@ -271,7 +291,9 @@ h3 {
text-decoration: none;
}
- li a.active, a:hover, li a:active {
+ li a.active,
+ a:hover,
+ li a:active {
color: $blue-300;
}
@@ -283,4 +305,45 @@ h3 {
margin-bottom: 0;
}
}
-}
\ No newline at end of file
+}
+
+.btn-icon {
+ height: 21px;
+ width: 21px;
+}
+
+.vapor-feature-card {
+ border-radius: 24px;
+ padding: 48px;
+ gap: 24px;
+ border: none;
+
+ @include media-breakpoint-down(lg) {
+ padding: 24px;
+ }
+
+ .feature-card-icon {
+ height: 48px;
+ width: 48px;
+ background-color: $blue-300;
+ }
+
+ .card-title {
+ font-style: normal;
+ font-weight: 500;
+ font-size: 30px;
+ line-height: 125%;
+ margin-top: 28px;
+
+ @include media-breakpoint-down(lg) {
+ font-size: 24px;
+ }
+ }
+
+ .card-text {
+ font-style: normal;
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 150%;
+ }
+}
diff --git a/static/images/brokenhands.png b/static/images/brokenhands.png
new file mode 100644
index 0000000..5b7670e
Binary files /dev/null and b/static/images/brokenhands.png differ
diff --git a/static/images/discord-chat-dark.png b/static/images/discord-chat-dark.png
new file mode 100644
index 0000000..686b1de
Binary files /dev/null and b/static/images/discord-chat-dark.png differ
diff --git a/static/images/discord-chat.png b/static/images/discord-chat.png
new file mode 100644
index 0000000..9279212
Binary files /dev/null and b/static/images/discord-chat.png differ
diff --git a/static/images/integrations-dark.png b/static/images/integrations-dark.png
new file mode 100644
index 0000000..d2a57e3
Binary files /dev/null and b/static/images/integrations-dark.png differ
diff --git a/static/images/integrations.png b/static/images/integrations.png
new file mode 100644
index 0000000..aef97b3
Binary files /dev/null and b/static/images/integrations.png differ
diff --git a/static/images/omrd.png b/static/images/omrd.png
new file mode 100644
index 0000000..7b27961
Binary files /dev/null and b/static/images/omrd.png differ
diff --git a/static/images/sambot-card-dark.png b/static/images/sambot-card-dark.png
new file mode 100644
index 0000000..b33e62a
Binary files /dev/null and b/static/images/sambot-card-dark.png differ
diff --git a/static/images/sambot-card.png b/static/images/sambot-card.png
new file mode 100644
index 0000000..338432f
Binary files /dev/null and b/static/images/sambot-card.png differ
diff --git a/static/images/swiftfiddle-card-dark.png b/static/images/swiftfiddle-card-dark.png
new file mode 100644
index 0000000..5701d79
Binary files /dev/null and b/static/images/swiftfiddle-card-dark.png differ
diff --git a/static/images/swiftfiddle-card.png b/static/images/swiftfiddle-card.png
new file mode 100644
index 0000000..a4f2107
Binary files /dev/null and b/static/images/swiftfiddle-card.png differ
diff --git a/static/images/transeo-card-dark.png b/static/images/transeo-card-dark.png
new file mode 100644
index 0000000..7546451
Binary files /dev/null and b/static/images/transeo-card-dark.png differ
diff --git a/static/images/transeo-card.png b/static/images/transeo-card.png
new file mode 100644
index 0000000..986b4e3
Binary files /dev/null and b/static/images/transeo-card.png differ
diff --git a/static/images/transeo.png b/static/images/transeo.png
new file mode 100644
index 0000000..627e81e
Binary files /dev/null and b/static/images/transeo.png differ
diff --git a/static/images/underway-nyc-card-dark.png b/static/images/underway-nyc-card-dark.png
new file mode 100644
index 0000000..26cc196
Binary files /dev/null and b/static/images/underway-nyc-card-dark.png differ
diff --git a/static/images/underway-nyc-card.png b/static/images/underway-nyc-card.png
new file mode 100644
index 0000000..72268a3
Binary files /dev/null and b/static/images/underway-nyc-card.png differ
diff --git a/static/js/mainSiteScrollNavbar.js b/static/js/mainSiteScrollNavbar.js
new file mode 100644
index 0000000..12ff21e
--- /dev/null
+++ b/static/js/mainSiteScrollNavbar.js
@@ -0,0 +1,15 @@
+window.onscroll = function () { scrollFunction() };
+
+function scrollFunction() {
+ const navbar = document.querySelector(".main-site-main-page .navbar");
+
+ if (navbar === null) {
+ return;
+ }
+
+ if (document.body.scrollTop > 600 || document.documentElement.scrollTop > 600) {
+ navbar.style.top = "0";
+ } else {
+ navbar.style.top = "-80px";
+ }
+}
diff --git a/static/js/scrollMainSiteShowcase.js b/static/js/scrollMainSiteShowcase.js
new file mode 100644
index 0000000..75d7283
--- /dev/null
+++ b/static/js/scrollMainSiteShowcase.js
@@ -0,0 +1,17 @@
+function scrollToRight() {
+ var element = document.getElementById("showcase-scrolling-wrapper");
+ element.scrollBy({
+ top: 0,
+ left: 320,
+ behavior: 'smooth'
+ });
+}
+
+function scrollToLeft() {
+ var element = document.getElementById("showcase-scrolling-wrapper");
+ element.scrollBy({
+ top: 0,
+ left: -320,
+ behavior: 'smooth'
+ });
+}
diff --git a/webpack.config.js b/webpack.config.js
index 1230514..6a85377 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,19 +1,22 @@
-const miniCssExtractPlugin = require('mini-css-extract-plugin')
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const path = require('path');
-const { library } = require('webpack');
module.exports = {
mode: 'production',
entry: './src/js/main.js',
+
plugins: [
+ // Copy static assets to the output directory
new CopyWebpackPlugin({
- patterns: [
- { from: 'static' }
- ]
+ patterns: [{ from: 'static' }]
+ }),
+ // Extract CSS into separate files
+ new MiniCssExtractPlugin({
+ filename: '[name].css'
}),
- new miniCssExtractPlugin()
],
+
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'Output'),
@@ -22,59 +25,53 @@ module.exports = {
type: 'var',
},
},
+
devServer: {
static: path.resolve(__dirname, 'Output'),
port: 8001,
hot: true
},
+
module: {
rules: [
+ // SVG handling
{
- mimetype: 'image/svg+xml',
- scheme: 'data',
+ test: /\.svg$/,
type: 'asset/resource',
generator: {
filename: 'icons/[hash].svg'
}
},
+ // Font handling
{
- type: 'asset/resource',
test: /\.(woff|woff2)$/,
+ type: 'asset/resource',
generator: {
filename: 'fonts/[hash][ext]'
}
},
+ // SCSS and CSS handling
{
- test: /\.(scss)$/,
+ test: /\.(scss|css)$/,
use: [
- {
- loader: miniCssExtractPlugin.loader
- },
+ MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
- options: {
- sourceMap: true
- }
+ options: { sourceMap: true },
},
{
loader: 'postcss-loader',
options: {
postcssOptions: {
- plugins: () => [
- require('autoprefixer')
- ]
+ plugins: [require('autoprefixer')],
},
- sourceMap: true
- }
- },
- {
- loader: 'resolve-url-loader'
+ sourceMap: true,
+ },
},
+ 'resolve-url-loader',
{
loader: 'sass-loader',
- options: {
- sourceMap: true
- }
+ options: { sourceMap: true },
}
]
}