diff --git a/README.md b/README.md
index 85df1bd..584f27a 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,35 @@
-# MARINA coming-soon page
+# MARINA Jekyll theme starter
-A minimal Jekyll, Tailwind CSS, and daisyUI page using the supplied maritime image.
+A one-page Jekyll starter based on the supplied dataset landing-page design. It uses Tailwind CSS 3 and daisyUI 4. Editors manage homepage content from the clearly commented front matter in `index.md`, while site-wide header, navigation, and footer settings live in `_data/site.yml`.
## Run locally
+Requirements: Ruby 3+, Bundler, and Node 18+.
+
```bash
bundle install
npm install
npm run dev
```
-Then open `http://127.0.0.1:4000`.
+Open `http://127.0.0.1:4000` or `http://localhost:4000`.
+
+## Production build
+
+```bash
+npm run build
+```
+
+The generated site will be in `_site/`.
-## Edit content
+## Editing content
-- `index.md` controls the background image, eyebrow, headline, body text, and optional button.
-- `_data/site.yml` controls the brand name and footer organization.
-- Replace `assets/images/coming-soon-background.jpg` or update `background_image` in `index.md`.
+- `index.md` — the single content-editing file for the homepage
+- `_data/site.yml` — site-wide branding, navigation, header CTA, and footer organization
+- `_layouts/home.html` — protected page structure and Liquid templates
+- `tailwind.config.js` — brand colors and the daisyUI theme
+- `assets/css/tailwind.css` — reusable Tailwind component classes
+- `_includes/header.html` and `_includes/footer.html` — shared chrome
+- `assets/js/navigation.js` — reveals the separate fixed navigation after the hero tiles scroll away
-Remove the complete `button:` block from `index.md` if the page should not have a call to action.
+Keep URLs beginning with `#` in quotation marks, for example `url: "#overview"`. For button styles, use only `primary` or `outline`.
diff --git a/_config.yml b/_config.yml
index 43deac1..a30d116 100644
--- a/_config.yml
+++ b/_config.yml
@@ -16,4 +16,4 @@ defaults:
- scope:
path: ""
values:
- layout: coming-soon
+ layout: default
diff --git a/_data/site.yml b/_data/site.yml
index a1de692..901dc25 100644
--- a/_data/site.yml
+++ b/_data/site.yml
@@ -1,5 +1,38 @@
+# ==================================================
+# SITE-WIDE BRANDING, CALL TO ACTION, AND NAVIGATION
+# ==================================================
+
brand:
- name: MARINA
+ logo:
+ src_reversed: "/assets/images/logo-white.svg"
+ src: "/assets/images/logo.svg"
+ alt: MARINA
+
+cta:
+ button:
+ label: Get the data
+ url: "#releases"
+
+# These links populate both the homepage navigation tiles and fixed header.
+# Always quote URLs beginning with # because YAML treats # as a comment.
+navigation:
+ - label: Overview
+ url: "#overview"
+ - label: Difference
+ url: "#difference"
+ - label: Releases
+ url: "#releases"
+ - label: Leaderboard
+ url: "#leaderboards"
+ - label: Inquiries
+ url: "#inquiries"
+ - label: Citation
+ url: "#citation"
footer:
+ disclaimer: >-
+ Funded by DARPA under MARINA program, contract W912CG-24-C-0020
+ Disclaimer (DARPA)
+ Data owned by Ocean Networks Canada and available under CC-BY 4.0
+ https://www.oceannetworks.ca/data/data-policy/
organization: Kitware, Inc.
diff --git a/_includes/footer.html b/_includes/footer.html
new file mode 100644
index 0000000..ed3e2f4
--- /dev/null
+++ b/_includes/footer.html
@@ -0,0 +1,12 @@
+
diff --git a/_includes/header.html b/_includes/header.html
new file mode 100644
index 0000000..ae96d9b
--- /dev/null
+++ b/_includes/header.html
@@ -0,0 +1,25 @@
+
diff --git a/_layouts/default.html b/_layouts/default.html
new file mode 100644
index 0000000..3116775
--- /dev/null
+++ b/_layouts/default.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ {{ page.title | default: site.title }}
+
+
+
+
+
+
+
+ {% include header.html %}
+ {{ content }}
+ {% include footer.html %}
+
+
+
+
+
+
diff --git a/_layouts/home.html b/_layouts/home.html
new file mode 100644
index 0000000..a646cfb
--- /dev/null
+++ b/_layouts/home.html
@@ -0,0 +1,533 @@
+---
+layout: default
+---
+
+
+
+
+
+ {% if page.hero.subheadline %}
{{ page.hero.subheadline }}
{% endif %}
+
{{ page.hero.headline }}
+ {% if page.hero.text %}
{{ page.hero.text }}
{% endif %}
+ {% if page.hero.buttons %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+ {% if page.overview.subheadline %}
+
{{ page.overview.subheadline | escape }}
+ {% endif %}
+
{{ page.overview.headline | escape }}
+ {% if page.overview.paragraphs %}
+
+ {% for paragraph in page.overview.paragraphs %}
+ {{ paragraph | markdownify }}
+ {% endfor %}
+ {% if page.overview.cta_section %}
+
+ {% for paragraph in page.overview.cta_section.paragraphs %}
+ {{ paragraph | markdownify }}
+ {% endfor %}
+ {% if page.overview.cta_section.buttons %}
+
+ {% endif %}
+
+ {% endif %}
+
+ {% endif %}
+
+ {% if page.overview.stats %}
+
+ {% for stat in page.overview.stats %}
+
+
- {{ stat.value | escape }}
+ - {{ stat.label | escape }}
+
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+ {% if page.difference.subheadline %}
+
{{ page.difference.subheadline | escape }}
+ {% endif %}
+
{{ page.difference.headline | escape }}
+ {% if page.difference.items %}
+
+ {% for item in page.difference.items %}
+
+ 0{{ forloop.index }}
+ {{ item.title | escape }}
+ {{ item.text | escape }}
+
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+ {% if page.releases.subheadline %}
+
{{ page.releases.subheadline | escape }}
+ {% endif %}
+
{{ page.releases.headline | escape }}
+ {% if page.releases.text %}
+
{{ page.releases.text }}
+ {% endif %}
+ {% if page.releases.items %}
+
+ {% for release in page.releases.items %}
+
+ {% if release.image %}
+
+ {% endif %}
+
+
{{ release.title | escape }}
+
{{ release.description | escape }}
+
+
+
+ {{ release.size | escape }}
+
+
+
+ {{ release.views | escape }}
+
+
+
+ {{ release.date | escape }}
+
+
+ {% if release.buttons %}
+
+ {% endif %}
+
+
+ {% endfor %}
+
+ {% endif %}
+
+
+
+{% if page.leaderboards %}
+
+
+
+
+
+
+ {% if page.leaderboards.subheadline %}
+
+ {{ page.leaderboards.subheadline | escape }}
+
+ {% endif %}
+
+
+
+ {{ page.leaderboards.headline | escape }}
+
+
+ {% if page.leaderboards.status %}
+
+ {{ page.leaderboards.status | escape }}
+
+ {% endif %}
+
+
+ {% if page.leaderboards.text %}
+
+ {{ page.leaderboards.text | escape }}
+
+ {% endif %}
+
+
+
+
+
+ Evaluation criteria and submission instructions are
+ currently being developed.
+
+
+
+
+
+
+
+
+
+
+
+ Results preview
+
+
+
+
+
+ In development
+
+
+
+
+
+
+
+ {% for column in page.leaderboards.preview.columns %}
+ |
+ {{ column | escape }}
+ |
+ {% endfor %}
+
+
+
+
+ {% for row in (1..page.leaderboards.preview.rows) %}
+
+ |
+
+ |
+
+
+
+ |
+
+
+
+ |
+
+
+
+ |
+
+
+
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+ Rankings coming soon
+
+
+
+
+
+
+
+
+{% endif %}
+
+
+
+
+ {% if page.inquiries.subheadline %}
+
{{ page.inquiries.subheadline | escape }}
+ {% endif %}
+
{{ page.inquiries.headline | escape }}
+ {% if page.inquiries.text %}
+
{{ page.inquiries.text }}
+ {% endif %}
+ {% if page.inquiries.benefits %}
+
+ {% for benefit in page.inquiries.benefits %}
+ -
+ ✓
+ {{ benefit | escape }}
+
+ {% endfor %}
+
+ {% endif %}
+
+
+ {% assign form = page.inquiries.form %}
+
+
+
+
+
+
+
+
+
+
+ {{ form.success.eyebrow | escape }}
+
+
+
+ {{ form.success.headline | escape }}
+
+
+
+ {{ form.success.text | escape }}
+
+
+
+
+
+
+
+
+ {% if page.citation.subheadline %}
+
{{ page.citation.subheadline | escape }}
+ {% endif %}
+
{{ page.citation.headline | escape }}
+ {% if page.citation.text %}
+
{{ page.citation.text | escape }}
+ {% endif %}
+
+
{{ page.citation.code | escape }}
+
+
+
+
+
{{ page.citation.contact.headline | escape }}
+
{{ page.citation.contact.text | escape }}
+
+
{{ page.citation.contact.button_label | escape }}
+
+
+
diff --git a/assets/css/site.css b/assets/css/site.css
index 17044f5..8c146f5 100644
--- a/assets/css/site.css
+++ b/assets/css/site.css
@@ -625,7 +625,7 @@ html {
}
:root {
- --p: 72.5487% 0.204994 141.315419;
+ --p: 66.1952% 0.194469 141.065623;
--ac: 13.9154% 0.027649 237.697542;
--inc: 91.1915% 0.033075 252.190181;
--suc: 14.5097% 0.040999 141.315419;
@@ -656,11 +656,15 @@ html {
--er: 61.9804% 0.179242 14.27148;
}
+html {
+ scroll-behavior: smooth;
+}
+
body {
- margin: 0px;
--tw-bg-opacity: 1;
- background-color: rgb(3 21 41 / var(--tw-bg-opacity, 1));
- font-family: Inter, ui-sans-serif, system-ui, sans-serif;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity, 1)));
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
@@ -669,651 +673,3542 @@ body {
outline-style: solid;
outline-width: 2px;
outline-offset: 4px;
- outline-color: #4cc43b;
+ outline-color: #3eae2b;
}
-@media (hover:hover) {
- .label a:hover {
- --tw-text-opacity: 1;
- color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
- }
+section[id] {
+ scroll-margin-top: 4rem;
}
-.btn {
- display: inline-flex;
- height: 3rem;
- min-height: 3rem;
- flex-shrink: 0;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- border-radius: var(--rounded-btn, 0.5rem);
- border-color: transparent;
- border-color: oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));
- padding-left: 1rem;
- padding-right: 1rem;
- text-align: center;
- font-size: 0.875rem;
- line-height: 1em;
- gap: 0.5rem;
- font-weight: 600;
- text-decoration-line: none;
- transition-duration: 200ms;
- transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
- border-width: var(--border-btn, 1px);
- transition-property: color, background-color, border-color, opacity, box-shadow, transform;
- --tw-text-opacity: 1;
- color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
- outline-color: var(--fallback-bc,oklch(var(--bc)/1));
- background-color: oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));
- --tw-bg-opacity: 1;
- --tw-border-opacity: 1;
+.\!container {
+ width: 100% !important;
}
-.btn-disabled,
- .btn[disabled],
- .btn:disabled {
- pointer-events: none;
+.container {
+ width: 100%;
}
-:where(.btn:is(input[type="checkbox"])),
-:where(.btn:is(input[type="radio"])) {
- width: auto;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
+@media (min-width: 640px) {
+ .\!container {
+ max-width: 640px !important;
+ }
-.btn:is(input[type="checkbox"]):after,
-.btn:is(input[type="radio"]):after {
- --tw-content: attr(aria-label);
- content: var(--tw-content);
+ .container {
+ max-width: 640px;
+ }
}
-@media (hover: hover) {
- .btn:hover {
- --tw-border-opacity: 1;
- border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));
- --tw-bg-opacity: 1;
- background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));
+@media (min-width: 768px) {
+ .\!container {
+ max-width: 768px !important;
}
- @supports (color: color-mix(in oklab, black, black)) {
- .btn:hover {
- background-color: color-mix(
- in oklab,
- oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,
- black
- );
- border-color: color-mix(
- in oklab,
- oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,
- black
- );
- }
+ .container {
+ max-width: 768px;
}
+}
- @supports not (color: oklch(0% 0 0)) {
- .btn:hover {
- background-color: var(--btn-color, var(--fallback-b2));
- border-color: var(--btn-color, var(--fallback-b2));
- }
+@media (min-width: 1024px) {
+ .\!container {
+ max-width: 1024px !important;
}
- .btn.glass:hover {
- --glass-opacity: 25%;
- --glass-border-opacity: 15%;
+ .container {
+ max-width: 1024px;
}
+}
- .btn-outline.btn-primary:hover {
- --tw-text-opacity: 1;
- color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+@media (min-width: 1280px) {
+ .\!container {
+ max-width: 1280px !important;
}
- @supports (color: color-mix(in oklab, black, black)) {
- .btn-outline.btn-primary:hover {
- background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
- border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
- }
+ .container {
+ max-width: 1280px;
}
+}
- .btn-disabled:hover,
- .btn[disabled]:hover,
- .btn:disabled:hover {
- --tw-border-opacity: 0;
- background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
- --tw-bg-opacity: 0.2;
- color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
- --tw-text-opacity: 0.2;
+@media (min-width: 1536px) {
+ .\!container {
+ max-width: 1536px !important;
}
- @supports (color: color-mix(in oklab, black, black)) {
- .btn:is(input[type="checkbox"]:checked):hover, .btn:is(input[type="radio"]:checked):hover {
- background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
- border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
- }
+ .container {
+ max-width: 1536px;
}
}
-.footer {
- display: grid;
- width: 100%;
- grid-auto-flow: row;
- place-items: start;
- -moz-column-gap: 1rem;
- column-gap: 1rem;
- row-gap: 2.5rem;
- font-size: 0.875rem;
- line-height: 1.25rem;
+.prose {
+ color: var(--tw-prose-body);
+ max-width: 65ch;
}
-.footer > * {
- display: grid;
- place-items: start;
- gap: 0.5rem;
+.prose :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
}
-@media (min-width: 48rem) {
- .footer {
- grid-auto-flow: column;
- }
+.prose :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-lead);
+ font-size: 1.25em;
+ line-height: 1.6;
+ margin-top: 1.2em;
+ margin-bottom: 1.2em;
+}
- .footer-center {
- grid-auto-flow: row dense;
- }
+.prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-links);
+ text-decoration: underline;
+ font-weight: 500;
}
-.label {
- display: flex;
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- align-items: center;
- justify-content: space-between;
- padding-left: 0.25rem;
- padding-right: 0.25rem;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
+.prose :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-bold);
+ font-weight: 600;
}
-.link {
- cursor: pointer;
- text-decoration-line: underline;
+.prose :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
}
-.swap {
- position: relative;
- display: inline-grid;
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- place-content: center;
- cursor: pointer;
+.prose :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
}
-.swap > * {
- grid-column-start: 1;
- grid-row-start: 1;
- transition-duration: 300ms;
- transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
- transition-property: transform, opacity;
+.prose :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
}
-.swap input {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
+.prose :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: decimal;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ padding-inline-start: 1.625em;
}
-.swap .swap-on,
-.swap .swap-indeterminate,
-.swap input:indeterminate ~ .swap-on {
- opacity: 0;
+.prose :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: upper-alpha;
}
-.swap input:checked ~ .swap-off,
-.swap-active .swap-off,
-.swap input:indeterminate ~ .swap-off {
- opacity: 0;
+.prose :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: lower-alpha;
}
-.swap input:checked ~ .swap-on,
-.swap-active .swap-on,
-.swap input:indeterminate ~ .swap-indeterminate {
- opacity: 1;
+.prose :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: upper-alpha;
}
-.btm-nav > * .label {
- font-size: 1rem;
- line-height: 1.5rem;
+.prose :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: lower-alpha;
}
-@media (prefers-reduced-motion: no-preference) {
- .btn {
- animation: button-pop var(--animation-btn, 0.25s) ease-out;
- }
+.prose :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: upper-roman;
}
-.btn:active:hover,
- .btn:active:focus {
- animation: button-pop 0s ease-out;
- transform: scale(var(--btn-focus-scale, 0.97));
+.prose :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: lower-roman;
}
-@supports not (color: oklch(0% 0 0)) {
- .btn {
- background-color: var(--btn-color, var(--fallback-b2));
- border-color: var(--btn-color, var(--fallback-b2));
- }
+.prose :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: upper-roman;
+}
- .btn-primary {
- --btn-color: var(--fallback-p);
- }
+.prose :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: lower-roman;
}
-@supports (color: color-mix(in oklab, black, black)) {
- .btn-outline.btn-primary.btn-active {
- background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
- border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
- }
+.prose :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: decimal;
}
-.btn:focus-visible {
- outline-style: solid;
- outline-width: 2px;
- outline-offset: 2px;
+.prose :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: disc;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ padding-inline-start: 1.625em;
}
-.btn-primary {
- --tw-text-opacity: 1;
- color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
- outline-color: var(--fallback-p,oklch(var(--p)/1));
+.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
+ font-weight: 400;
+ color: var(--tw-prose-counters);
}
-@supports (color: oklch(0% 0 0)) {
- .btn-primary {
- --btn-color: var(--p);
- }
+.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
+ color: var(--tw-prose-bullets);
}
-.btn.glass {
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
- outline-color: currentColor;
+.prose :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ margin-top: 1.25em;
}
-.btn.glass.btn-active {
- --glass-opacity: 25%;
- --glass-border-opacity: 15%;
+.prose :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-color: var(--tw-prose-hr);
+ border-top-width: 1px;
+ margin-top: 3em;
+ margin-bottom: 3em;
}
-.btn-outline.btn-primary {
- --tw-text-opacity: 1;
- color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)));
+.prose :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 500;
+ font-style: italic;
+ color: var(--tw-prose-quotes);
+ border-inline-start-width: 0.25rem;
+ border-inline-start-color: var(--tw-prose-quote-borders);
+ quotes: "\201C""\201D""\2018""\2019";
+ margin-top: 1.6em;
+ margin-bottom: 1.6em;
+ padding-inline-start: 1em;
}
-.btn-outline.btn-primary.btn-active {
- --tw-text-opacity: 1;
- color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
+ content: open-quote;
}
-.btn.btn-disabled,
- .btn[disabled],
- .btn:disabled {
- --tw-border-opacity: 0;
- background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
- --tw-bg-opacity: 0.2;
- color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
- --tw-text-opacity: 0.2;
+.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
+ content: close-quote;
}
-.btn:is(input[type="checkbox"]:checked),
-.btn:is(input[type="radio"]:checked) {
- --tw-border-opacity: 1;
- border-color: var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));
- --tw-bg-opacity: 1;
- background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));
- --tw-text-opacity: 1;
- color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+.prose :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 800;
+ font-size: 2.25em;
+ margin-top: 0;
+ margin-bottom: 0.8888889em;
+ line-height: 1.1111111;
}
-.btn:is(input[type="checkbox"]:checked):focus-visible, .btn:is(input[type="radio"]:checked):focus-visible {
- outline-color: var(--fallback-p,oklch(var(--p)/1));
+.prose :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 900;
+ color: inherit;
}
-@keyframes button-pop {
- 0% {
- transform: scale(var(--btn-focus-scale, 0.98));
- }
+.prose :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 700;
+ font-size: 1.5em;
+ margin-top: 2em;
+ margin-bottom: 1em;
+ line-height: 1.3333333;
+}
- 40% {
- transform: scale(1.02);
- }
+.prose :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 800;
+ color: inherit;
+}
- 100% {
- transform: scale(1);
- }
+.prose :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ font-size: 1.25em;
+ margin-top: 1.6em;
+ margin-bottom: 0.6em;
+ line-height: 1.6;
}
-@keyframes checkmark {
- 0% {
- background-position-y: 5px;
- }
+.prose :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 700;
+ color: inherit;
+}
- 50% {
- background-position-y: -2px;
- }
+.prose :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ margin-top: 1.5em;
+ margin-bottom: 0.5em;
+ line-height: 1.5;
+}
- 100% {
- background-position-y: 0;
- }
+.prose :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 700;
+ color: inherit;
}
-.join > :where(*:not(:first-child)):is(.btn) {
- margin-inline-start: calc(var(--border-btn) * -1);
+.prose :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
}
-.link:focus {
- outline: 2px solid transparent;
- outline-offset: 2px;
+.prose :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ display: block;
+ margin-top: 2em;
+ margin-bottom: 2em;
}
-.link:focus-visible {
- outline: 2px solid currentColor;
- outline-offset: 2px;
+.prose :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
}
-.mockup-phone .display {
- overflow: hidden;
- border-radius: 40px;
- margin-top: -25px;
+.prose :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 500;
+ font-family: inherit;
+ color: var(--tw-prose-kbd);
+ box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);
+ font-size: 0.875em;
+ border-radius: 0.3125rem;
+ padding-top: 0.1875em;
+ padding-inline-end: 0.375em;
+ padding-bottom: 0.1875em;
+ padding-inline-start: 0.375em;
+}
+
+.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-code);
+ font-weight: 600;
+ font-size: 0.875em;
}
-@keyframes modal-pop {
- 0% {
- opacity: 0;
- }
+.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
+ content: "`";
}
-@keyframes progress-loading {
- 50% {
- background-position-x: -115%;
+.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
+ content: "`";
+}
+
+.prose :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ font-size: 0.875em;
+}
+
+.prose :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ font-size: 0.9em;
+}
+
+.prose :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-pre-code);
+ background-color: var(--tw-prose-pre-bg);
+ overflow-x: auto;
+ font-weight: 400;
+ font-size: 0.875em;
+ line-height: 1.7142857;
+ margin-top: 1.7142857em;
+ margin-bottom: 1.7142857em;
+ border-radius: 0.375rem;
+ padding-top: 0.8571429em;
+ padding-inline-end: 1.1428571em;
+ padding-bottom: 0.8571429em;
+ padding-inline-start: 1.1428571em;
+}
+
+.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ background-color: transparent;
+ border-width: 0;
+ border-radius: 0;
+ padding: 0;
+ font-weight: inherit;
+ color: inherit;
+ font-size: inherit;
+ font-family: inherit;
+ line-height: inherit;
+}
+
+.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
+ content: none;
+}
+
+.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
+ content: none;
+}
+
+.prose :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ width: 100%;
+ table-layout: auto;
+ margin-top: 2em;
+ margin-bottom: 2em;
+ font-size: 0.875em;
+ line-height: 1.7142857;
+}
+
+.prose :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-bottom-width: 1px;
+ border-bottom-color: var(--tw-prose-th-borders);
+}
+
+.prose :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ vertical-align: bottom;
+ padding-inline-end: 0.5714286em;
+ padding-bottom: 0.5714286em;
+ padding-inline-start: 0.5714286em;
+}
+
+.prose :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-bottom-width: 1px;
+ border-bottom-color: var(--tw-prose-td-borders);
+}
+
+.prose :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-bottom-width: 0;
+}
+
+.prose :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ vertical-align: baseline;
+}
+
+.prose :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-top-width: 1px;
+ border-top-color: var(--tw-prose-th-borders);
+}
+
+.prose :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ vertical-align: top;
+}
+
+.prose :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ text-align: start;
+}
+
+.prose :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.prose :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-captions);
+ font-size: 0.875em;
+ line-height: 1.4285714;
+ margin-top: 0.8571429em;
+}
+
+.prose {
+ --tw-prose-body: #374151;
+ --tw-prose-headings: #111827;
+ --tw-prose-lead: #4b5563;
+ --tw-prose-links: #111827;
+ --tw-prose-bold: #111827;
+ --tw-prose-counters: #6b7280;
+ --tw-prose-bullets: #d1d5db;
+ --tw-prose-hr: #e5e7eb;
+ --tw-prose-quotes: #111827;
+ --tw-prose-quote-borders: #e5e7eb;
+ --tw-prose-captions: #6b7280;
+ --tw-prose-kbd: #111827;
+ --tw-prose-kbd-shadows: rgb(17 24 39 / 10%);
+ --tw-prose-code: #111827;
+ --tw-prose-pre-code: #e5e7eb;
+ --tw-prose-pre-bg: #1f2937;
+ --tw-prose-th-borders: #d1d5db;
+ --tw-prose-td-borders: #e5e7eb;
+ --tw-prose-invert-body: #d1d5db;
+ --tw-prose-invert-headings: #fff;
+ --tw-prose-invert-lead: #9ca3af;
+ --tw-prose-invert-links: #fff;
+ --tw-prose-invert-bold: #fff;
+ --tw-prose-invert-counters: #9ca3af;
+ --tw-prose-invert-bullets: #4b5563;
+ --tw-prose-invert-hr: #374151;
+ --tw-prose-invert-quotes: #f3f4f6;
+ --tw-prose-invert-quote-borders: #374151;
+ --tw-prose-invert-captions: #9ca3af;
+ --tw-prose-invert-kbd: #fff;
+ --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);
+ --tw-prose-invert-code: #fff;
+ --tw-prose-invert-pre-code: #d1d5db;
+ --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
+ --tw-prose-invert-th-borders: #4b5563;
+ --tw-prose-invert-td-borders: #374151;
+ font-size: 1rem;
+ line-height: 1.75;
+}
+
+.prose :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.prose :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-start: 0.375em;
+}
+
+.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-start: 0.375em;
+}
+
+.prose :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+}
+
+.prose :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 1.25em;
+}
+
+.prose :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-bottom: 1.25em;
+}
+
+.prose :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 1.25em;
+}
+
+.prose :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-bottom: 1.25em;
+}
+
+.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+}
+
+.prose :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+}
+
+.prose :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0.5em;
+ padding-inline-start: 1.625em;
+}
+
+.prose :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-start: 0;
+}
+
+.prose :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-end: 0;
+}
+
+.prose :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-top: 0.5714286em;
+ padding-inline-end: 0.5714286em;
+ padding-bottom: 0.5714286em;
+ padding-inline-start: 0.5714286em;
+}
+
+.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-start: 0;
+}
+
+.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-end: 0;
+}
+
+.prose :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+}
+
+.prose :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-bottom: 0;
+}
+
+.alert {
+ display: grid;
+ width: 100%;
+ grid-auto-flow: row;
+ align-content: flex-start;
+ align-items: center;
+ justify-items: center;
+ gap: 1rem;
+ text-align: center;
+ border-radius: var(--rounded-box, 1rem);
+ border-width: 1px;
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));
+ padding: 1rem;
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ --alert-bg: var(--fallback-b2,oklch(var(--b2)/1));
+ --alert-bg-mix: var(--fallback-b1,oklch(var(--b1)/1));
+ background-color: var(--alert-bg);
+}
+
+@media (min-width: 640px) {
+ .alert {
+ grid-auto-flow: column;
+ grid-template-columns: auto minmax(auto,1fr);
+ justify-items: start;
+ text-align: start;
}
}
-@keyframes radiomark {
- 0% {
- box-shadow: 0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,
- 0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset;
+.avatar.placeholder > div {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.badge {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ transition-duration: 200ms;
+ height: 1.25rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ width: -moz-fit-content;
+ width: fit-content;
+ padding-left: 0.563rem;
+ padding-right: 0.563rem;
+ border-radius: var(--rounded-badge, 1.9rem);
+ border-width: 1px;
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+}
+
+@media (hover:hover) {
+ .checkbox-primary:hover {
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));
}
- 50% {
- box-shadow: 0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,
- 0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset;
+ .label a:hover {
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ }
+
+ .menu li > *:not(ul, .menu-title, details, .btn):active,
+.menu li > *:not(ul, .menu-title, details, .btn).active,
+.menu li > details > summary:active {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));
+ }
+
+ .table tr.hover:hover,
+ .table tr.hover:nth-child(even):hover {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));
}
+}
+
+.btn {
+ display: inline-flex;
+ height: 3rem;
+ min-height: 3rem;
+ flex-shrink: 0;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: center;
+ border-radius: var(--rounded-btn, 0.5rem);
+ border-color: transparent;
+ border-color: oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));
+ padding-left: 1rem;
+ padding-right: 1rem;
+ text-align: center;
+ font-size: 0.875rem;
+ line-height: 1em;
+ gap: 0.5rem;
+ font-weight: 600;
+ text-decoration-line: none;
+ transition-duration: 200ms;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ border-width: var(--border-btn, 1px);
+ transition-property: color, background-color, border-color, opacity, box-shadow, transform;
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ outline-color: var(--fallback-bc,oklch(var(--bc)/1));
+ background-color: oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));
+ --tw-bg-opacity: 1;
+ --tw-border-opacity: 1;
+}
+
+.btn-disabled,
+ .btn[disabled],
+ .btn:disabled {
+ pointer-events: none;
+}
+
+.btn-square {
+ height: 3rem;
+ width: 3rem;
+ padding: 0px;
+}
+
+:where(.btn:is(input[type="checkbox"])),
+:where(.btn:is(input[type="radio"])) {
+ width: auto;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+}
+
+.btn:is(input[type="checkbox"]):after,
+.btn:is(input[type="radio"]):after {
+ --tw-content: attr(aria-label);
+ content: var(--tw-content);
+}
+
+.checkbox {
+ flex-shrink: 0;
+ --chkbg: var(--fallback-bc,oklch(var(--bc)/1));
+ --chkfg: var(--fallback-b1,oklch(var(--b1)/1));
+ height: 1.5rem;
+ width: 1.5rem;
+ cursor: pointer;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ border-radius: var(--rounded-btn, 0.5rem);
+ border-width: 1px;
+ border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));
+ --tw-border-opacity: 0.2;
+}
+
+.dropdown {
+ position: relative;
+ display: inline-block;
+}
+
+.dropdown > *:not(summary):focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.dropdown .dropdown-content {
+ position: absolute;
+}
+
+.dropdown:is(:not(details)) .dropdown-content {
+ visibility: hidden;
+ opacity: 0;
+ transform-origin: top;
+ --tw-scale-x: .95;
+ --tw-scale-y: .95;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ transition-duration: 200ms;
+}
+
+.dropdown-end .dropdown-content {
+ inset-inline-end: 0px;
+}
+
+.dropdown-left .dropdown-content {
+ bottom: auto;
+ inset-inline-end: 100%;
+ top: 0px;
+ transform-origin: right;
+}
+
+.dropdown-right .dropdown-content {
+ bottom: auto;
+ inset-inline-start: 100%;
+ top: 0px;
+ transform-origin: left;
+}
+
+.dropdown-bottom .dropdown-content {
+ bottom: auto;
+ top: 100%;
+ transform-origin: top;
+}
+
+.dropdown-top .dropdown-content {
+ bottom: 100%;
+ top: auto;
+ transform-origin: bottom;
+}
+
+.dropdown-end.dropdown-right .dropdown-content {
+ bottom: 0px;
+ top: auto;
+}
+
+.dropdown-end.dropdown-left .dropdown-content {
+ bottom: 0px;
+ top: auto;
+}
+
+.dropdown.dropdown-open .dropdown-content,
+.dropdown:not(.dropdown-hover):focus .dropdown-content,
+.dropdown:focus-within .dropdown-content {
+ visibility: visible;
+ opacity: 1;
+}
+
+@media (hover: hover) {
+ .dropdown.dropdown-hover:hover .dropdown-content {
+ visibility: visible;
+ opacity: 1;
+ }
+
+ .btm-nav > *.disabled:hover,
+ .btm-nav > *[disabled]:hover {
+ pointer-events: none;
+ --tw-border-opacity: 0;
+ background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
+ --tw-bg-opacity: 0.1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ --tw-text-opacity: 0.2;
+ }
+
+ .btn:hover {
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn:hover {
+ background-color: color-mix(
+ in oklab,
+ oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,
+ black
+ );
+ border-color: color-mix(
+ in oklab,
+ oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,
+ black
+ );
+ }
+ }
+
+ @supports not (color: oklch(0% 0 0)) {
+ .btn:hover {
+ background-color: var(--btn-color, var(--fallback-b2));
+ border-color: var(--btn-color, var(--fallback-b2));
+ }
+ }
+
+ .btn.glass:hover {
+ --glass-opacity: 25%;
+ --glass-border-opacity: 15%;
+ }
+
+ .btn-ghost:hover {
+ border-color: transparent;
+ }
+
+ @supports (color: oklch(0% 0 0)) {
+ .btn-ghost:hover {
+ background-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+ }
+ }
+
+ .btn-outline:hover {
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-b1,oklch(var(--b1)/var(--tw-text-opacity)));
+ }
+
+ .btn-outline.btn-primary:hover {
+ --tw-text-opacity: 1;
+ color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn-outline.btn-primary:hover {
+ background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
+ }
+ }
+
+ .btn-outline.btn-secondary:hover {
+ --tw-text-opacity: 1;
+ color: var(--fallback-sc,oklch(var(--sc)/var(--tw-text-opacity)));
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn-outline.btn-secondary:hover {
+ background-color: color-mix(in oklab, var(--fallback-s,oklch(var(--s)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-s,oklch(var(--s)/1)) 90%, black);
+ }
+ }
+
+ .btn-outline.btn-accent:hover {
+ --tw-text-opacity: 1;
+ color: var(--fallback-ac,oklch(var(--ac)/var(--tw-text-opacity)));
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn-outline.btn-accent:hover {
+ background-color: color-mix(in oklab, var(--fallback-a,oklch(var(--a)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-a,oklch(var(--a)/1)) 90%, black);
+ }
+ }
+
+ .btn-outline.btn-success:hover {
+ --tw-text-opacity: 1;
+ color: var(--fallback-suc,oklch(var(--suc)/var(--tw-text-opacity)));
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn-outline.btn-success:hover {
+ background-color: color-mix(in oklab, var(--fallback-su,oklch(var(--su)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-su,oklch(var(--su)/1)) 90%, black);
+ }
+ }
+
+ .btn-outline.btn-info:hover {
+ --tw-text-opacity: 1;
+ color: var(--fallback-inc,oklch(var(--inc)/var(--tw-text-opacity)));
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn-outline.btn-info:hover {
+ background-color: color-mix(in oklab, var(--fallback-in,oklch(var(--in)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-in,oklch(var(--in)/1)) 90%, black);
+ }
+ }
+
+ .btn-outline.btn-warning:hover {
+ --tw-text-opacity: 1;
+ color: var(--fallback-wac,oklch(var(--wac)/var(--tw-text-opacity)));
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn-outline.btn-warning:hover {
+ background-color: color-mix(in oklab, var(--fallback-wa,oklch(var(--wa)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-wa,oklch(var(--wa)/1)) 90%, black);
+ }
+ }
+
+ .btn-outline.btn-error:hover {
+ --tw-text-opacity: 1;
+ color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn-outline.btn-error:hover {
+ background-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);
+ }
+ }
+
+ .btn-disabled:hover,
+ .btn[disabled]:hover,
+ .btn:disabled:hover {
+ --tw-border-opacity: 0;
+ background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
+ --tw-bg-opacity: 0.2;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ --tw-text-opacity: 0.2;
+ }
+
+ @supports (color: color-mix(in oklab, black, black)) {
+ .btn:is(input[type="checkbox"]:checked):hover, .btn:is(input[type="radio"]:checked):hover {
+ background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
+ }
+ }
+
+ .dropdown.dropdown-hover:hover .dropdown-content {
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+ }
+
+ :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(.active, .btn):hover, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(.active, .btn):hover {
+ cursor: pointer;
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+
+ @supports (color: oklch(0% 0 0)) {
+ :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(.active, .btn):hover, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(.active, .btn):hover {
+ background-color: var(--fallback-bc,oklch(var(--bc)/0.1));
+ }
+ }
+}
+
+.dropdown:is(details) summary::-webkit-details-marker {
+ display: none;
+}
+
+.footer {
+ display: grid;
+ width: 100%;
+ grid-auto-flow: row;
+ place-items: start;
+ -moz-column-gap: 1rem;
+ column-gap: 1rem;
+ row-gap: 2.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+}
+
+.footer > * {
+ display: grid;
+ place-items: start;
+ gap: 0.5rem;
+}
+
+@media (min-width: 48rem) {
+ .footer {
+ grid-auto-flow: column;
+ }
+
+ .footer-center {
+ grid-auto-flow: row dense;
+ }
+}
+
+.label {
+ display: flex;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ align-items: center;
+ justify-content: space-between;
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+}
+
+.hero {
+ display: grid;
+ width: 100%;
+ place-items: center;
+ background-size: cover;
+ background-position: center;
+}
+
+.hero > * {
+ grid-column-start: 1;
+ grid-row-start: 1;
+}
+
+.input {
+ flex-shrink: 1;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ height: 3rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ font-size: 1rem;
+ line-height: 2;
+ line-height: 1.5rem;
+ border-radius: var(--rounded-btn, 0.5rem);
+ border-width: 1px;
+ border-color: transparent;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
+}
+
+.input[type="number"]::-webkit-inner-spin-button,
+.input-md[type="number"]::-webkit-inner-spin-button {
+ margin-top: -1rem;
+ margin-bottom: -1rem;
+ margin-inline-end: -1rem;
+}
+
+.input-sm[type="number"]::-webkit-inner-spin-button {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ margin-inline-end: -0px;
+}
+
+.join .dropdown .join-item:first-child:not(:last-child),
+ .join *:first-child:not(:last-child) .dropdown .join-item {
+ border-start-end-radius: inherit;
+ border-end-end-radius: inherit;
+}
+
+.\!link {
+ cursor: pointer !important;
+ text-decoration-line: underline !important;
+}
+
+.link {
+ cursor: pointer;
+ text-decoration-line: underline;
+}
+
+.menu {
+ display: flex;
+ flex-direction: column;
+ flex-wrap: wrap;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ padding: 0.5rem;
+}
+
+.menu :where(li ul) {
+ position: relative;
+ white-space: nowrap;
+ margin-inline-start: 1rem;
+ padding-inline-start: 0.5rem;
+}
+
+.menu :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)), .menu :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
+ display: grid;
+ grid-auto-flow: column;
+ align-content: flex-start;
+ align-items: center;
+ gap: 0.5rem;
+ grid-auto-columns: minmax(auto, max-content) auto max-content;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+.menu li.disabled {
+ cursor: not-allowed;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ color: var(--fallback-bc,oklch(var(--bc)/0.3));
+}
+
+.menu :where(li > .menu-dropdown:not(.menu-dropdown-show)) {
+ display: none;
+}
+
+:where(.menu li) {
+ position: relative;
+ display: flex;
+ flex-shrink: 0;
+ flex-direction: column;
+ flex-wrap: wrap;
+ align-items: stretch;
+}
+
+:where(.menu li) .badge {
+ justify-self: end;
+}
+
+.select {
+ display: inline-flex;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ height: 3rem;
+ min-height: 3rem;
+ padding-inline-start: 1rem;
+ padding-inline-end: 2.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ line-height: 2;
+ border-radius: var(--rounded-btn, 0.5rem);
+ border-width: 1px;
+ border-color: transparent;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
+ background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
+ linear-gradient(135deg, currentColor 50%, transparent 50%);
+ background-position: calc(100% - 20px) calc(1px + 50%),
+ calc(100% - 16.1px) calc(1px + 50%);
+ background-size: 4px 4px,
+ 4px 4px;
+ background-repeat: no-repeat;
+}
+
+.select[multiple] {
+ height: auto;
+}
+
+.stats {
+ display: inline-grid;
+ border-radius: var(--rounded-box, 1rem);
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+}
+
+:where(.stats) {
+ grid-auto-flow: column;
+ overflow-x: auto;
+}
+
+.stat {
+ display: inline-grid;
+ width: 100%;
+ grid-template-columns: repeat(1, 1fr);
+ -moz-column-gap: 1rem;
+ column-gap: 1rem;
+ border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));
+ --tw-border-opacity: 0.1;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+}
+
+.swap {
+ position: relative;
+ display: inline-grid;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ place-content: center;
+ cursor: pointer;
+}
+
+.swap > * {
+ grid-column-start: 1;
+ grid-row-start: 1;
+ transition-duration: 300ms;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ transition-property: transform, opacity;
+}
+
+.swap input {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+}
+
+.swap .swap-on,
+.swap .swap-indeterminate,
+.swap input:indeterminate ~ .swap-on {
+ opacity: 0;
+}
+
+.swap input:checked ~ .swap-off,
+.swap-active .swap-off,
+.swap input:indeterminate ~ .swap-off {
+ opacity: 0;
+}
+
+.swap input:checked ~ .swap-on,
+.swap-active .swap-on,
+.swap input:indeterminate ~ .swap-indeterminate {
+ opacity: 1;
+}
+
+.table {
+ position: relative;
+ width: 100%;
+ border-radius: var(--rounded-box, 1rem);
+ text-align: left;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+}
+
+.table :where(.table-pin-rows thead tr) {
+ position: sticky;
+ top: 0px;
+ z-index: 1;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
+}
+
+.table :where(.table-pin-rows tfoot tr) {
+ position: sticky;
+ bottom: 0px;
+ z-index: 1;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
+}
+
+.table :where(.table-pin-cols tr th) {
+ position: sticky;
+ left: 0px;
+ right: 0px;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
+}
+
+.textarea {
+ min-height: 3rem;
+ flex-shrink: 1;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ line-height: 2;
+ border-radius: var(--rounded-btn, 0.5rem);
+ border-width: 1px;
+ border-color: transparent;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
+}
+
+.toggle {
+ flex-shrink: 0;
+ --tglbg: var(--fallback-b1,oklch(var(--b1)/1));
+ --handleoffset: 1.5rem;
+ --handleoffsetcalculator: calc(var(--handleoffset) * -1);
+ --togglehandleborder: 0 0;
+ height: 1.5rem;
+ width: 3rem;
+ cursor: pointer;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ border-radius: var(--rounded-badge, 1.9rem);
+ border-width: 1px;
+ border-color: currentColor;
+ background-color: currentColor;
+ color: var(--fallback-bc,oklch(var(--bc)/0.5));
+ transition: background,
+ box-shadow var(--animation-input, 0.2s) ease-out;
+ box-shadow: var(--handleoffsetcalculator) 0 0 2px var(--tglbg) inset,
+ 0 0 0 2px var(--tglbg) inset,
+ var(--togglehandleborder);
+}
+
+.badge-primary {
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+}
+
+.badge-outline {
+ border-color: currentColor;
+ --tw-border-opacity: 0.5;
+ background-color: transparent;
+ color: currentColor;
+}
+
+.badge-outline.badge-neutral {
+ --tw-text-opacity: 1;
+ color: var(--fallback-n,oklch(var(--n)/var(--tw-text-opacity)));
+}
+
+.badge-outline.badge-primary {
+ --tw-text-opacity: 1;
+ color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)));
+}
+
+.badge-outline.badge-secondary {
+ --tw-text-opacity: 1;
+ color: var(--fallback-s,oklch(var(--s)/var(--tw-text-opacity)));
+}
+
+.badge-outline.badge-accent {
+ --tw-text-opacity: 1;
+ color: var(--fallback-a,oklch(var(--a)/var(--tw-text-opacity)));
+}
+
+.badge-outline.badge-info {
+ --tw-text-opacity: 1;
+ color: var(--fallback-in,oklch(var(--in)/var(--tw-text-opacity)));
+}
+
+.badge-outline.badge-success {
+ --tw-text-opacity: 1;
+ color: var(--fallback-su,oklch(var(--su)/var(--tw-text-opacity)));
+}
+
+.badge-outline.badge-warning {
+ --tw-text-opacity: 1;
+ color: var(--fallback-wa,oklch(var(--wa)/var(--tw-text-opacity)));
+}
+
+.badge-outline.badge-error {
+ --tw-text-opacity: 1;
+ color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity)));
+}
+
+.btm-nav > *.disabled,
+ .btm-nav > *[disabled] {
+ pointer-events: none;
+ --tw-border-opacity: 0;
+ background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
+ --tw-bg-opacity: 0.1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ --tw-text-opacity: 0.2;
+}
+
+.btm-nav > * .label {
+ font-size: 1rem;
+ line-height: 1.5rem;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ .btn {
+ animation: button-pop var(--animation-btn, 0.25s) ease-out;
+ }
+}
+
+.btn:active:hover,
+ .btn:active:focus {
+ animation: button-pop 0s ease-out;
+ transform: scale(var(--btn-focus-scale, 0.97));
+}
+
+@supports not (color: oklch(0% 0 0)) {
+ .btn {
+ background-color: var(--btn-color, var(--fallback-b2));
+ border-color: var(--btn-color, var(--fallback-b2));
+ }
+
+ .btn-primary {
+ --btn-color: var(--fallback-p);
+ }
+
+ .prose :where(code):not(:where([class~="not-prose"] *, pre *)) {
+ background-color: var(--fallback-b3,oklch(var(--b3)/1));
+ }
+}
+
+@supports (color: color-mix(in oklab, black, black)) {
+ .btn-outline.btn-primary.btn-active {
+ background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);
+ }
+
+ .btn-outline.btn-secondary.btn-active {
+ background-color: color-mix(in oklab, var(--fallback-s,oklch(var(--s)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-s,oklch(var(--s)/1)) 90%, black);
+ }
+
+ .btn-outline.btn-accent.btn-active {
+ background-color: color-mix(in oklab, var(--fallback-a,oklch(var(--a)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-a,oklch(var(--a)/1)) 90%, black);
+ }
+
+ .btn-outline.btn-success.btn-active {
+ background-color: color-mix(in oklab, var(--fallback-su,oklch(var(--su)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-su,oklch(var(--su)/1)) 90%, black);
+ }
+
+ .btn-outline.btn-info.btn-active {
+ background-color: color-mix(in oklab, var(--fallback-in,oklch(var(--in)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-in,oklch(var(--in)/1)) 90%, black);
+ }
+
+ .btn-outline.btn-warning.btn-active {
+ background-color: color-mix(in oklab, var(--fallback-wa,oklch(var(--wa)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-wa,oklch(var(--wa)/1)) 90%, black);
+ }
+
+ .btn-outline.btn-error.btn-active {
+ background-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);
+ border-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);
+ }
+}
+
+.btn:focus-visible {
+ outline-style: solid;
+ outline-width: 2px;
+ outline-offset: 2px;
+}
+
+.btn-primary {
+ --tw-text-opacity: 1;
+ color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+ outline-color: var(--fallback-p,oklch(var(--p)/1));
+}
+
+@supports (color: oklch(0% 0 0)) {
+ .btn-primary {
+ --btn-color: var(--p);
+ }
+}
+
+.btn.glass {
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ outline-color: currentColor;
+}
+
+.btn.glass.btn-active {
+ --glass-opacity: 25%;
+ --glass-border-opacity: 15%;
+}
+
+.btn-ghost {
+ border-width: 1px;
+ border-color: transparent;
+ background-color: transparent;
+ color: currentColor;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ outline-color: currentColor;
+}
+
+.btn-ghost.btn-active {
+ border-color: transparent;
+ background-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.btn-outline {
+ border-color: currentColor;
+ background-color: transparent;
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.btn-outline.btn-active {
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-b1,oklch(var(--b1)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-primary {
+ --tw-text-opacity: 1;
+ color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-primary.btn-active {
+ --tw-text-opacity: 1;
+ color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-secondary {
+ --tw-text-opacity: 1;
+ color: var(--fallback-s,oklch(var(--s)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-secondary.btn-active {
+ --tw-text-opacity: 1;
+ color: var(--fallback-sc,oklch(var(--sc)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-accent {
+ --tw-text-opacity: 1;
+ color: var(--fallback-a,oklch(var(--a)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-accent.btn-active {
+ --tw-text-opacity: 1;
+ color: var(--fallback-ac,oklch(var(--ac)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-success {
+ --tw-text-opacity: 1;
+ color: var(--fallback-su,oklch(var(--su)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-success.btn-active {
+ --tw-text-opacity: 1;
+ color: var(--fallback-suc,oklch(var(--suc)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-info {
+ --tw-text-opacity: 1;
+ color: var(--fallback-in,oklch(var(--in)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-info.btn-active {
+ --tw-text-opacity: 1;
+ color: var(--fallback-inc,oklch(var(--inc)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-warning {
+ --tw-text-opacity: 1;
+ color: var(--fallback-wa,oklch(var(--wa)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-warning.btn-active {
+ --tw-text-opacity: 1;
+ color: var(--fallback-wac,oklch(var(--wac)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-error {
+ --tw-text-opacity: 1;
+ color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity)));
+}
+
+.btn-outline.btn-error.btn-active {
+ --tw-text-opacity: 1;
+ color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));
+}
+
+.btn.btn-disabled,
+ .btn[disabled],
+ .btn:disabled {
+ --tw-border-opacity: 0;
+ background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
+ --tw-bg-opacity: 0.2;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ --tw-text-opacity: 0.2;
+}
+
+.btn:is(input[type="checkbox"]:checked),
+.btn:is(input[type="radio"]:checked) {
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+}
+
+.btn:is(input[type="checkbox"]:checked):focus-visible, .btn:is(input[type="radio"]:checked):focus-visible {
+ outline-color: var(--fallback-p,oklch(var(--p)/1));
+}
+
+@keyframes button-pop {
+ 0% {
+ transform: scale(var(--btn-focus-scale, 0.98));
+ }
+
+ 40% {
+ transform: scale(1.02);
+ }
+
+ 100% {
+ transform: scale(1);
+ }
+}
+
+.checkbox:focus {
+ box-shadow: none;
+}
+
+.checkbox:focus-visible {
+ outline-style: solid;
+ outline-width: 2px;
+ outline-offset: 2px;
+ outline-color: var(--fallback-bc,oklch(var(--bc)/1));
+}
+
+.checkbox:disabled {
+ border-width: 0px;
+ cursor: not-allowed;
+ border-color: transparent;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));
+ opacity: 0.2;
+}
+
+.checkbox:checked,
+ .checkbox[aria-checked="true"] {
+ background-repeat: no-repeat;
+ animation: checkmark var(--animation-input, 0.2s) ease-out;
+ background-color: var(--chkbg);
+ background-image: linear-gradient(-45deg, transparent 65%, var(--chkbg) 65.99%),
+ linear-gradient(45deg, transparent 75%, var(--chkbg) 75.99%),
+ linear-gradient(-45deg, var(--chkbg) 40%, transparent 40.99%),
+ linear-gradient(
+ 45deg,
+ var(--chkbg) 30%,
+ var(--chkfg) 30.99%,
+ var(--chkfg) 40%,
+ transparent 40.99%
+ ),
+ linear-gradient(-45deg, var(--chkfg) 50%, var(--chkbg) 50.99%);
+}
+
+.checkbox:indeterminate {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));
+ background-repeat: no-repeat;
+ animation: checkmark var(--animation-input, 0.2s) ease-out;
+ background-image: linear-gradient(90deg, transparent 80%, var(--chkbg) 80%),
+ linear-gradient(-90deg, transparent 80%, var(--chkbg) 80%),
+ linear-gradient(0deg, var(--chkbg) 43%, var(--chkfg) 43%, var(--chkfg) 57%, var(--chkbg) 57%);
+}
+
+.checkbox-primary {
+ --chkbg: var(--fallback-p,oklch(var(--p)/1));
+ --chkfg: var(--fallback-pc,oklch(var(--pc)/1));
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));
+}
+
+.checkbox-primary:focus-visible {
+ outline-color: var(--fallback-p,oklch(var(--p)/1));
+}
+
+.checkbox-primary:checked,
+ .checkbox-primary[aria-checked="true"] {
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
+}
+
+@keyframes checkmark {
+ 0% {
+ background-position-y: 5px;
+ }
+
+ 50% {
+ background-position-y: -2px;
+ }
+
+ 100% {
+ background-position-y: 0;
+ }
+}
+
+.dropdown.dropdown-open .dropdown-content,
+.dropdown:focus .dropdown-content,
+.dropdown:focus-within .dropdown-content {
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.input input {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));
+ background-color: transparent;
+}
+
+.input input:focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.input[list]::-webkit-calendar-picker-indicator {
+ line-height: 1em;
+}
+
+.input-bordered {
+ border-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.input:focus,
+ .input:focus-within {
+ box-shadow: none;
+ border-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+ outline-style: solid;
+ outline-width: 2px;
+ outline-offset: 2px;
+ outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.input:has(> input[disabled]),
+ .input-disabled,
+ .input:disabled,
+ .input[disabled] {
+ cursor: not-allowed;
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));
+ color: var(--fallback-bc,oklch(var(--bc)/0.4));
+}
+
+.input:has(> input[disabled])::-moz-placeholder, .input-disabled::-moz-placeholder, .input:disabled::-moz-placeholder, .input[disabled]::-moz-placeholder {
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));
+ --tw-placeholder-opacity: 0.2;
+}
+
+.input:has(> input[disabled])::placeholder,
+ .input-disabled::placeholder,
+ .input:disabled::placeholder,
+ .input[disabled]::placeholder {
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));
+ --tw-placeholder-opacity: 0.2;
+}
+
+.input:has(> input[disabled]) > input[disabled] {
+ cursor: not-allowed;
+}
+
+.input::-webkit-date-and-time-value {
+ text-align: inherit;
+}
+
+.join > :where(*:not(:first-child)):is(.btn) {
+ margin-inline-start: calc(var(--border-btn) * -1);
+}
+
+.\!link:focus {
+ outline: 2px solid transparent !important;
+ outline-offset: 2px !important;
+}
+
+.link:focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.\!link:focus-visible {
+ outline: 2px solid currentColor !important;
+ outline-offset: 2px !important;
+}
+
+.link:focus-visible {
+ outline: 2px solid currentColor;
+ outline-offset: 2px;
+}
+
+.loading {
+ pointer-events: none;
+ display: inline-block;
+ aspect-ratio: 1 / 1;
+ width: 1.5rem;
+ background-color: currentColor;
+ -webkit-mask-size: 100%;
+ mask-size: 100%;
+ -webkit-mask-repeat: no-repeat;
+ mask-repeat: no-repeat;
+ -webkit-mask-position: center;
+ mask-position: center;
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");
+ mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");
+}
+
+.loading-spinner {
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");
+ mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");
+}
+
+.loading-xs {
+ width: 1rem;
+}
+
+:where(.menu li:empty) {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));
+ opacity: 0.1;
+ margin: 0.5rem 1rem;
+ height: 1px;
+}
+
+.menu :where(li ul):before {
+ position: absolute;
+ bottom: 0.75rem;
+ inset-inline-start: 0px;
+ top: 0.75rem;
+ width: 1px;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));
+ opacity: 0.1;
+ content: "";
+}
+
+.menu :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)),
+.menu :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
+ border-radius: var(--rounded-btn, 0.5rem);
+ padding-left: 1rem;
+ padding-right: 1rem;
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ text-align: start;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ transition-duration: 200ms;
+ text-wrap: balance;
+}
+
+:where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(summary, .active, .btn).focus, :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(summary, .active, .btn):focus, :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):is(summary):not(.active, .btn):focus-visible, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(summary, .active, .btn).focus, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(summary, .active, .btn):focus, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):is(summary):not(.active, .btn):focus-visible {
+ cursor: pointer;
+ background-color: var(--fallback-bc,oklch(var(--bc)/0.1));
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.menu li > *:not(ul, .menu-title, details, .btn):active,
+.menu li > *:not(ul, .menu-title, details, .btn).active,
+.menu li > details > summary:active {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
+ --tw-text-opacity: 1;
+ color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));
+}
+
+.menu :where(li > details > summary)::-webkit-details-marker {
+ display: none;
+}
+
+.menu :where(li > details > summary):after,
+.menu :where(li > .menu-dropdown-toggle):after {
+ justify-self: end;
+ display: block;
+ margin-top: -0.5rem;
+ height: 0.5rem;
+ width: 0.5rem;
+ transform: rotate(45deg);
+ transition-property: transform, margin-top;
+ transition-duration: 0.3s;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ content: "";
+ transform-origin: 75% 75%;
+ box-shadow: 2px 2px;
+ pointer-events: none;
+}
+
+.menu :where(li > details[open] > summary):after,
+.menu :where(li > .menu-dropdown-toggle.menu-dropdown-show):after {
+ transform: rotate(225deg);
+ margin-top: 0;
+}
+
+.mockup-phone .display {
+ overflow: hidden;
+ border-radius: 40px;
+ margin-top: -25px;
+}
+
+.mockup-browser .mockup-browser-toolbar .input {
+ position: relative;
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+ height: 1.75rem;
+ width: 24rem;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));
+ padding-left: 2rem;
+ direction: ltr;
+}
+
+.mockup-browser .mockup-browser-toolbar .input:before {
+ content: "";
+ position: absolute;
+ left: 0.5rem;
+ top: 50%;
+ aspect-ratio: 1 / 1;
+ height: 0.75rem;
+ --tw-translate-y: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+ border-radius: 9999px;
+ border-width: 2px;
+ border-color: currentColor;
+ opacity: 0.6;
+}
+
+.mockup-browser .mockup-browser-toolbar .input:after {
+ content: "";
+ position: absolute;
+ left: 1.25rem;
+ top: 50%;
+ height: 0.5rem;
+ --tw-translate-y: 25%;
+ --tw-rotate: -45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+ border-radius: 9999px;
+ border-width: 1px;
+ border-color: currentColor;
+ opacity: 0.6;
+}
+
+@keyframes modal-pop {
+ 0% {
+ opacity: 0;
+ }
+}
+
+@keyframes progress-loading {
+ 50% {
+ background-position-x: -115%;
+ }
+}
+
+@keyframes radiomark {
+ 0% {
+ box-shadow: 0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,
+ 0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset;
+ }
+
+ 50% {
+ box-shadow: 0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,
+ 0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset;
+ }
+
+ 100% {
+ box-shadow: 0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,
+ 0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset;
+ }
+}
+
+@keyframes rating-pop {
+ 0% {
+ transform: translateY(-0.125em);
+ }
+
+ 40% {
+ transform: translateY(-0.125em);
+ }
+
+ 100% {
+ transform: translateY(0);
+ }
+}
+
+.select-bordered {
+ border-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.select:focus {
+ box-shadow: none;
+ border-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+ outline-style: solid;
+ outline-width: 2px;
+ outline-offset: 2px;
+ outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.select-disabled,
+ .select:disabled,
+ .select[disabled] {
+ cursor: not-allowed;
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));
+ color: var(--fallback-bc,oklch(var(--bc)/0.4));
+}
+
+.select-disabled::-moz-placeholder, .select:disabled::-moz-placeholder, .select[disabled]::-moz-placeholder {
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));
+ --tw-placeholder-opacity: 0.2;
+}
+
+.select-disabled::placeholder,
+ .select:disabled::placeholder,
+ .select[disabled]::placeholder {
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));
+ --tw-placeholder-opacity: 0.2;
+}
+
+.select-multiple,
+ .select[multiple],
+ .select[size].select:not([size="1"]) {
+ background-image: none;
+ padding-right: 1rem;
+}
+
+[dir="rtl"] .select {
+ background-position: calc(0% + 12px) calc(1px + 50%),
+ calc(0% + 16px) calc(1px + 50%);
+}
+
+@keyframes skeleton {
+ from {
+ background-position: 150%;
+ }
+
+ to {
+ background-position: -50%;
+ }
+}
+
+:where(.stats) > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(1px * var(--tw-divide-x-reverse));
+ border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
+}
+
+[dir="rtl"] .stats > *:not([hidden]) ~ *:not([hidden]) {
+ --tw-divide-x-reverse: 1;
+}
+
+.table:where([dir="rtl"], [dir="rtl"] *) {
+ text-align: right;
+}
+
+.table :where(th, td) {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+ vertical-align: middle;
+}
+
+.table tr.active,
+ .table tr.active:nth-child(even),
+ .table-zebra tbody tr:nth-child(even) {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));
+}
+
+.table :where(thead tr, tbody tr:not(:last-child), tbody tr:first-child:last-child) {
+ border-bottom-width: 1px;
+ --tw-border-opacity: 1;
+ border-bottom-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));
+}
+
+.table :where(thead, tfoot) {
+ white-space: nowrap;
+ font-size: 0.75rem;
+ line-height: 1rem;
+ font-weight: 700;
+ color: var(--fallback-bc,oklch(var(--bc)/0.6));
+}
+
+.table :where(tfoot) {
+ border-top-width: 1px;
+ --tw-border-opacity: 1;
+ border-top-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));
+}
+
+.textarea-bordered {
+ border-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.textarea:focus {
+ box-shadow: none;
+ border-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+ outline-style: solid;
+ outline-width: 2px;
+ outline-offset: 2px;
+ outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.textarea-disabled,
+ .textarea:disabled,
+ .textarea[disabled] {
+ cursor: not-allowed;
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));
+ color: var(--fallback-bc,oklch(var(--bc)/0.4));
+}
+
+.textarea-disabled::-moz-placeholder, .textarea:disabled::-moz-placeholder, .textarea[disabled]::-moz-placeholder {
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));
+ --tw-placeholder-opacity: 0.2;
+}
+
+.textarea-disabled::placeholder,
+ .textarea:disabled::placeholder,
+ .textarea[disabled]::placeholder {
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));
+ --tw-placeholder-opacity: 0.2;
+}
+
+@keyframes toast-pop {
+ 0% {
+ transform: scale(0.9);
+ opacity: 0;
+ }
+
+ 100% {
+ transform: scale(1);
+ opacity: 1;
+ }
+}
+
+[dir="rtl"] .toggle {
+ --handleoffsetcalculator: calc(var(--handleoffset) * 1);
+}
+
+.toggle:focus-visible {
+ outline-style: solid;
+ outline-width: 2px;
+ outline-offset: 2px;
+ outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.toggle:hover {
+ background-color: currentColor;
+}
+
+.toggle:checked,
+ .toggle[aria-checked="true"] {
+ background-image: none;
+ --handleoffsetcalculator: var(--handleoffset);
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+}
+
+[dir="rtl"] .toggle:checked, [dir="rtl"] .toggle[aria-checked="true"] {
+ --handleoffsetcalculator: calc(var(--handleoffset) * -1);
+}
+
+.toggle:indeterminate {
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
+ box-shadow: calc(var(--handleoffset) / 2) 0 0 2px var(--tglbg) inset,
+ calc(var(--handleoffset) / -2) 0 0 2px var(--tglbg) inset,
+ 0 0 0 2px var(--tglbg) inset;
+}
+
+[dir="rtl"] .toggle:indeterminate {
+ box-shadow: calc(var(--handleoffset) / 2) 0 0 2px var(--tglbg) inset,
+ calc(var(--handleoffset) / -2) 0 0 2px var(--tglbg) inset,
+ 0 0 0 2px var(--tglbg) inset;
+}
+
+.toggle:disabled {
+ cursor: not-allowed;
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));
+ background-color: transparent;
+ opacity: 0.3;
+ --togglehandleborder: 0 0 0 3px var(--fallback-bc,oklch(var(--bc)/1)) inset,
+ var(--handleoffsetcalculator) 0 0 3px var(--fallback-bc,oklch(var(--bc)/1)) inset;
+}
+
+:root .prose {
+ --tw-prose-body: var(--fallback-bc,oklch(var(--bc)/0.8));
+ --tw-prose-headings: var(--fallback-bc,oklch(var(--bc)/1));
+ --tw-prose-lead: var(--fallback-bc,oklch(var(--bc)/1));
+ --tw-prose-links: var(--fallback-bc,oklch(var(--bc)/1));
+ --tw-prose-bold: var(--fallback-bc,oklch(var(--bc)/1));
+ --tw-prose-counters: var(--fallback-bc,oklch(var(--bc)/1));
+ --tw-prose-bullets: var(--fallback-bc,oklch(var(--bc)/0.5));
+ --tw-prose-hr: var(--fallback-bc,oklch(var(--bc)/0.2));
+ --tw-prose-quotes: var(--fallback-bc,oklch(var(--bc)/1));
+ --tw-prose-quote-borders: var(--fallback-bc,oklch(var(--bc)/0.2));
+ --tw-prose-captions: var(--fallback-bc,oklch(var(--bc)/0.5));
+ --tw-prose-code: var(--fallback-bc,oklch(var(--bc)/1));
+ --tw-prose-pre-code: var(--fallback-nc,oklch(var(--nc)/1));
+ --tw-prose-pre-bg: var(--fallback-n,oklch(var(--n)/1));
+ --tw-prose-th-borders: var(--fallback-bc,oklch(var(--bc)/0.5));
+ --tw-prose-td-borders: var(--fallback-bc,oklch(var(--bc)/0.2));
+ --tw-prose-kbd: var(--fallback-bc,oklch(var(--bc)/0.8));
+}
+
+.prose :where(code):not(:where([class~="not-prose"] *, pre *)) {
+ padding: 1px 8px;
+ border-radius: var(--rounded-badge);
+ font-weight: initial;
+ background-color: var(--fallback-bc,oklch(var(--bc)/0.1));
+}
+
+.prose :where(code):not(:where([class~="not-prose"], [class~="not-prose"] *))::before, .prose :where(code):not(:where([class~="not-prose"], [class~="not-prose"] *))::after {
+ display: none;
+}
+
+.prose pre code {
+ border-radius: 0;
+ padding: 0;
+}
+
+.prose :where(tbody tr, thead):not(:where([class~="not-prose"] *)) {
+ border-bottom-color: var(--fallback-bc,oklch(var(--bc)/0.2));
+}
+
+.btn-sm {
+ height: 2rem;
+ min-height: 2rem;
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ font-size: 0.875rem;
+}
+
+.btn-square:where(.btn-xs) {
+ height: 1.5rem;
+ width: 1.5rem;
+ padding: 0px;
+}
+
+.btn-square:where(.btn-sm) {
+ height: 2rem;
+ width: 2rem;
+ padding: 0px;
+}
+
+.btn-square:where(.btn-md) {
+ height: 3rem;
+ width: 3rem;
+ padding: 0px;
+}
+
+.btn-square:where(.btn-lg) {
+ height: 4rem;
+ width: 4rem;
+ padding: 0px;
+}
+
+.btn-circle:where(.btn-sm) {
+ height: 2rem;
+ width: 2rem;
+ border-radius: 9999px;
+ padding: 0px;
+}
+
+[type="checkbox"].checkbox-xs {
+ height: 1rem;
+ width: 1rem;
+}
+
+.input-sm {
+ height: 2rem;
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ font-size: 0.875rem;
+ line-height: 2rem;
+}
+
+.select-sm {
+ height: 2rem;
+ min-height: 2rem;
+ padding-left: 0.75rem;
+ padding-right: 2rem;
+ font-size: 0.875rem;
+ line-height: 2rem;
+}
+
+[dir="rtl"] .select-sm {
+ padding-left: 2rem;
+ padding-right: 0.75rem;
+}
+
+.join.join-vertical > :where(*:not(:first-child)):is(.btn) {
+ margin-top: calc(var(--border-btn) * -1);
+}
+
+.join.join-horizontal > :where(*:not(:first-child)):is(.btn) {
+ margin-inline-start: calc(var(--border-btn) * -1);
+ margin-top: 0px;
+}
+
+.site-container {
+ margin-left: auto;
+ margin-right: auto;
+ width: 100%;
+ max-width: 64rem;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+
+@media (min-width: 1024px) {
+ .site-container {
+ padding-left: 2rem;
+ padding-right: 2rem;
+ }
+}
+
+.section-pad {
+ padding-top: 5rem;
+ padding-bottom: 5rem;
+}
+
+@media (min-width: 768px) {
+ .section-pad {
+ padding-top: 7rem;
+ padding-bottom: 7rem;
+ }
+}
+
+.eyebrow {
+ margin-bottom: 1rem;
+ font-size: 0.75rem;
+ line-height: 1rem;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.22em;
+ --tw-text-opacity: 1;
+ color: rgb(8 117 209 / var(--tw-text-opacity, 1));
+}
+
+.section-title {
+ font-size: 1.875rem;
+ line-height: 2.25rem;
+ font-weight: 700;
+ letter-spacing: -0.025em;
+ --tw-text-opacity: 1;
+ color: rgb(3 21 41 / var(--tw-text-opacity, 1));
+}
+
+@media (min-width: 768px) {
+ .section-title {
+ font-size: 2.25rem;
+ line-height: 2.5rem;
+ }
+}
+
+.btn-primary {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0;
+}
+
+.pointer-events-none {
+ pointer-events: none;
+}
+
+.pointer-events-auto {
+ pointer-events: auto;
+}
+
+.fixed {
+ position: fixed;
+}
+
+.absolute {
+ position: absolute;
+}
+
+.relative {
+ position: relative;
+}
+
+.inset-x-0 {
+ left: 0px;
+ right: 0px;
+}
+
+.bottom-0 {
+ bottom: 0px;
+}
+
+.right-3 {
+ right: 0.75rem;
+}
+
+.top-0 {
+ top: 0px;
+}
+
+.top-3 {
+ top: 0.75rem;
+}
+
+.top-\[53px\] {
+ top: 53px;
+}
+
+.isolate {
+ isolation: isolate;
+}
+
+.z-10 {
+ z-index: 10;
+}
+
+.z-20 {
+ z-index: 20;
+}
+
+.z-50 {
+ z-index: 50;
+}
+
+.z-\[1\] {
+ z-index: 1;
+}
+
+.order-first {
+ order: -9999;
+}
+
+.mx-auto {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.\!mb-3 {
+ margin-bottom: 0.75rem !important;
+}
+
+.mb-1 {
+ margin-bottom: 0.25rem;
+}
+
+.mb-1\.5 {
+ margin-bottom: 0.375rem;
+}
+
+.ml-auto {
+ margin-left: auto;
+}
+
+.mt-0\.5 {
+ margin-top: 0.125rem;
+}
+
+.mt-1 {
+ margin-top: 0.25rem;
+}
+
+.mt-12 {
+ margin-top: 3rem;
+}
+
+.mt-2 {
+ margin-top: 0.5rem;
+}
+
+.mt-3 {
+ margin-top: 0.75rem;
+}
+
+.mt-4 {
+ margin-top: 1rem;
+}
+
+.mt-5 {
+ margin-top: 1.25rem;
+}
+
+.mt-6 {
+ margin-top: 1.5rem;
+}
+
+.mt-7 {
+ margin-top: 1.75rem;
+}
+
+.mt-8 {
+ margin-top: 2rem;
+}
+
+.mt-9 {
+ margin-top: 2.25rem;
+}
+
+.block {
+ display: block;
+}
+
+.flex {
+ display: flex;
+}
+
+.inline-flex {
+ display: inline-flex;
+}
+
+.table {
+ display: table;
+}
+
+.grid {
+ display: grid;
+}
+
+.hidden {
+ display: none;
+}
+
+.aspect-\[16\/9\] {
+ aspect-ratio: 16/9;
+}
+
+.size-1\.5 {
+ width: 0.375rem;
+ height: 0.375rem;
+}
+
+.size-10 {
+ width: 2.5rem;
+ height: 2.5rem;
+}
+
+.size-4 {
+ width: 1rem;
+ height: 1rem;
+}
+
+.h-12 {
+ height: 3rem;
+}
+
+.h-16 {
+ height: 4rem;
+}
+
+.h-20 {
+ height: 5rem;
+}
+
+.h-24 {
+ height: 6rem;
+}
+
+.h-3 {
+ height: 0.75rem;
+}
+
+.h-8 {
+ height: 2rem;
+}
+
+.h-full {
+ height: 100%;
+}
+
+.min-h-screen {
+ min-height: 100vh;
+}
+
+.w-12 {
+ width: 3rem;
+}
+
+.w-16 {
+ width: 4rem;
+}
+
+.w-20 {
+ width: 5rem;
+}
+
+.w-28 {
+ width: 7rem;
+}
+
+.w-5 {
+ width: 1.25rem;
+}
+
+.w-56 {
+ width: 14rem;
+}
+
+.w-auto {
+ width: auto;
+}
+
+.w-full {
+ width: 100%;
+}
+
+.min-w-0 {
+ min-width: 0px;
+}
+
+.min-w-\[190px\] {
+ min-width: 190px;
+}
+
+.min-w-\[580px\] {
+ min-width: 580px;
+}
+
+.max-w-2xl {
+ max-width: 42rem;
+}
+
+.max-w-5xl {
+ max-width: 64rem;
+}
+
+.max-w-7xl {
+ max-width: 80rem;
+}
+
+.max-w-lg {
+ max-width: 32rem;
+}
+
+.max-w-md {
+ max-width: 28rem;
+}
+
+.max-w-none {
+ max-width: none;
+}
+
+.max-w-xl {
+ max-width: 36rem;
+}
+
+.flex-1 {
+ flex: 1 1 0%;
+}
+
+.shrink-0 {
+ flex-shrink: 0;
+}
+
+.border-collapse {
+ border-collapse: collapse;
+}
+
+.-translate-y-full {
+ --tw-translate-y: -100%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-0 {
+ --tw-translate-y: 0px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+@keyframes bounce {
+ 0%, 100% {
+ transform: translateY(-25%);
+ animation-timing-function: cubic-bezier(0.8,0,1,1);
+ }
+
+ 50% {
+ transform: none;
+ animation-timing-function: cubic-bezier(0,0,0.2,1);
+ }
+}
+
+.animate-bounce {
+ animation: bounce 1s infinite;
+}
+
+@keyframes pulse {
+ 50% {
+ opacity: .5;
+ }
+}
+
+.animate-pulse {
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+}
+
+.cursor-pointer {
+ cursor: pointer;
+}
+
+.resize-y {
+ resize: vertical;
+}
+
+.resize {
+ resize: both;
+}
+
+.snap-x {
+ scroll-snap-type: x var(--tw-scroll-snap-strictness);
+}
+
+.snap-mandatory {
+ --tw-scroll-snap-strictness: mandatory;
+}
+
+.snap-start {
+ scroll-snap-align: start;
+}
+
+.grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+
+.flex-col {
+ flex-direction: column;
+}
+
+.flex-wrap {
+ flex-wrap: wrap;
+}
+
+.items-start {
+ align-items: flex-start;
+}
+
+.items-center {
+ align-items: center;
+}
+
+.justify-center {
+ justify-content: center;
+}
+
+.justify-between {
+ justify-content: space-between;
+}
+
+.gap-1\.5 {
+ gap: 0.375rem;
+}
+
+.gap-10 {
+ gap: 2.5rem;
+}
+
+.gap-12 {
+ gap: 3rem;
+}
+
+.gap-14 {
+ gap: 3.5rem;
+}
+
+.gap-2 {
+ gap: 0.5rem;
+}
+
+.gap-3 {
+ gap: 0.75rem;
+}
+
+.gap-5 {
+ gap: 1.25rem;
+}
+
+.gap-6 {
+ gap: 1.5rem;
+}
+
+.gap-7 {
+ gap: 1.75rem;
+}
+
+.gap-8 {
+ gap: 2rem;
+}
+
+.gap-x-4 {
+ -moz-column-gap: 1rem;
+ column-gap: 1rem;
+}
+
+.gap-x-8 {
+ -moz-column-gap: 2rem;
+ column-gap: 2rem;
+}
+
+.gap-y-2 {
+ row-gap: 0.5rem;
+}
+
+.gap-y-4 {
+ row-gap: 1rem;
+}
+
+.gap-y-8 {
+ row-gap: 2rem;
+}
+
+.space-y-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2rem * var(--tw-space-y-reverse));
+}
+
+.justify-self-start {
+ justify-self: start;
+}
+
+.overflow-hidden {
+ overflow: hidden;
+}
+
+.overflow-x-auto {
+ overflow-x: auto;
+}
+
+.whitespace-nowrap {
+ white-space: nowrap;
+}
+
+.rounded-full {
+ border-radius: 9999px;
+}
+
+.rounded-lg {
+ border-radius: 0.5rem;
+}
+
+.rounded-none {
+ border-radius: 0px;
+}
+
+.rounded-sm {
+ border-radius: 0.125rem;
+}
+
+.border {
+ border-width: 1px;
+}
+
+.border-b {
+ border-bottom-width: 1px;
+}
+
+.border-l {
+ border-left-width: 1px;
+}
+
+.border-r {
+ border-right-width: 1px;
+}
+
+.border-t {
+ border-top-width: 1px;
+}
+
+.border-base-300 {
+ --tw-border-opacity: 1;
+ border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity, 1)));
+}
+
+.border-white\/10 {
+ border-color: rgb(255 255 255 / 0.1);
+}
+
+.border-white\/15 {
+ border-color: rgb(255 255 255 / 0.15);
+}
+
+.border-white\/50 {
+ border-color: rgb(255 255 255 / 0.5);
+}
+
+.bg-\[\#020d1d\]\/90 {
+ background-color: rgb(2 13 29 / 0.9);
+}
+
+.bg-\[\#06172a\] {
+ --tw-bg-opacity: 1;
+ background-color: rgb(6 23 42 / var(--tw-bg-opacity, 1));
+}
+
+.bg-base-200 {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity, 1)));
+}
+
+.bg-base-200\/60 {
+ background-color: var(--fallback-b2,oklch(var(--b2)/0.6));
+}
+
+.bg-base-300 {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity, 1)));
+}
+
+.bg-navy-950 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(3 21 41 / var(--tw-bg-opacity, 1));
+}
+
+.bg-primary\/15 {
+ background-color: var(--fallback-p,oklch(var(--p)/0.15));
+}
+
+.bg-secondary {
+ --tw-bg-opacity: 1;
+ background-color: var(--fallback-s,oklch(var(--s)/var(--tw-bg-opacity, 1)));
+}
+
+.bg-signal {
+ --tw-bg-opacity: 1;
+ background-color: rgb(62 174 43 / var(--tw-bg-opacity, 1));
+}
+
+.bg-signal\/15 {
+ background-color: rgb(62 174 43 / 0.15);
+}
+
+.bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
+}
+
+.bg-white\/45 {
+ background-color: rgb(255 255 255 / 0.45);
+}
+
+.bg-white\/95 {
+ background-color: rgb(255 255 255 / 0.95);
+}
+
+.bg-gradient-to-r {
+ background-image: linear-gradient(to right, var(--tw-gradient-stops));
+}
+
+.from-navy-950 {
+ --tw-gradient-from: #031529 var(--tw-gradient-from-position);
+ --tw-gradient-to: rgb(3 21 41 / 0) var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.to-navy-800 {
+ --tw-gradient-to: #073c68 var(--tw-gradient-to-position);
+}
+
+.bg-cover {
+ background-size: cover;
+}
+
+.bg-center {
+ background-position: center;
+}
+
+.object-cover {
+ -o-object-fit: cover;
+ object-fit: cover;
+}
+
+.p-2 {
+ padding: 0.5rem;
+}
+
+.p-6 {
+ padding: 1.5rem;
+}
+
+.p-7 {
+ padding: 1.75rem;
+}
+
+.p-8 {
+ padding: 2rem;
+}
+
+.px-0 {
+ padding-left: 0px;
+ padding-right: 0px;
+}
+
+.px-5 {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+}
+
+.px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+
+.py-16 {
+ padding-top: 4rem;
+ padding-bottom: 4rem;
+}
+
+.py-20 {
+ padding-top: 5rem;
+ padding-bottom: 5rem;
+}
+
+.py-3 {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+}
+
+.py-4 {
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+}
+
+.py-5 {
+ padding-top: 1.25rem;
+ padding-bottom: 1.25rem;
+}
+
+.py-6 {
+ padding-top: 1.5rem;
+ padding-bottom: 1.5rem;
+}
+
+.py-7 {
+ padding-top: 1.75rem;
+ padding-bottom: 1.75rem;
+}
+
+.py-8 {
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+}
+
+.\!pt-2 {
+ padding-top: 0.5rem !important;
+}
+
+.pb-40 {
+ padding-bottom: 10rem;
+}
+
+.pr-16 {
+ padding-right: 4rem;
+}
+
+.pt-10 {
+ padding-top: 2.5rem;
+}
+
+.pt-6 {
+ padding-top: 1.5rem;
+}
+
+.pt-8 {
+ padding-top: 2rem;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem;
+}
+
+.text-3xl {
+ font-size: 1.875rem;
+ line-height: 2.25rem;
+}
+
+.text-4xl {
+ font-size: 2.25rem;
+ line-height: 2.5rem;
+}
+
+.text-\[0\.65rem\] {
+ font-size: 0.65rem;
+}
+
+.text-\[0\.6rem\] {
+ font-size: 0.6rem;
+}
+
+.text-base {
+ font-size: 1rem;
+ line-height: 1.5rem;
+}
+
+.text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem;
+}
+
+.text-sm {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+}
+
+.text-xl {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+}
+
+.text-xs {
+ font-size: 0.75rem;
+ line-height: 1rem;
+}
+
+.font-bold {
+ font-weight: 700;
+}
+
+.font-extrabold {
+ font-weight: 800;
+}
+
+.font-light {
+ font-weight: 300;
+}
+
+.font-medium {
+ font-weight: 500;
+}
+
+.font-semibold {
+ font-weight: 600;
+}
+
+.uppercase {
+ text-transform: uppercase;
+}
+
+.leading-5 {
+ line-height: 1.25rem;
+}
+
+.leading-6 {
+ line-height: 1.5rem;
+}
+
+.leading-7 {
+ line-height: 1.75rem;
+}
+
+.leading-8 {
+ line-height: 2rem;
+}
+
+.leading-normal {
+ line-height: 1.5;
+}
- 100% {
- box-shadow: 0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,
- 0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset;
- }
+.leading-relaxed {
+ line-height: 1.625;
}
-@keyframes rating-pop {
- 0% {
- transform: translateY(-0.125em);
- }
+.leading-tight {
+ line-height: 1.25;
+}
- 40% {
- transform: translateY(-0.125em);
- }
+.tracking-\[0\.12em\] {
+ letter-spacing: 0.12em;
+}
- 100% {
- transform: translateY(0);
- }
+.tracking-\[0\.14em\] {
+ letter-spacing: 0.14em;
}
-@keyframes skeleton {
- from {
- background-position: 150%;
- }
+.tracking-\[0\.16em\] {
+ letter-spacing: 0.16em;
+}
- to {
- background-position: -50%;
- }
+.tracking-\[0\.18em\] {
+ letter-spacing: 0.18em;
}
-@keyframes toast-pop {
- 0% {
- transform: scale(0.9);
- opacity: 0;
- }
+.tracking-\[0\.22em\] {
+ letter-spacing: 0.22em;
+}
- 100% {
- transform: scale(1);
- opacity: 1;
- }
+.tracking-\[0\.2em\] {
+ letter-spacing: 0.2em;
}
-.join.join-vertical > :where(*:not(:first-child)):is(.btn) {
- margin-top: calc(var(--border-btn) * -1);
+.tracking-tight {
+ letter-spacing: -0.025em;
}
-.join.join-horizontal > :where(*:not(:first-child)):is(.btn) {
- margin-inline-start: calc(var(--border-btn) * -1);
- margin-top: 0px;
+.\!text-sky-300 {
+ --tw-text-opacity: 1 !important;
+ color: rgb(125 211 252 / var(--tw-text-opacity, 1)) !important;
}
-.relative {
- position: relative;
+.text-base-content {
+ --tw-text-opacity: 1;
+ color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity, 1)));
}
-.isolate {
- isolation: isolate;
+.text-base-content\/30 {
+ color: var(--fallback-bc,oklch(var(--bc)/0.3));
}
-.z-10 {
- z-index: 10;
+.text-base-content\/40 {
+ color: var(--fallback-bc,oklch(var(--bc)/0.4));
}
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
+.text-base-content\/45 {
+ color: var(--fallback-bc,oklch(var(--bc)/0.45));
}
-.mt-5 {
- margin-top: 1.25rem;
+.text-base-content\/50 {
+ color: var(--fallback-bc,oklch(var(--bc)/0.5));
}
-.mt-6 {
- margin-top: 1.5rem;
+.text-base-content\/55 {
+ color: var(--fallback-bc,oklch(var(--bc)/0.55));
}
-.mt-9 {
- margin-top: 2.25rem;
+.text-base-content\/65 {
+ color: var(--fallback-bc,oklch(var(--bc)/0.65));
}
-.block {
- display: block;
+.text-base-content\/70 {
+ color: var(--fallback-bc,oklch(var(--bc)/0.7));
}
-.flex {
- display: flex;
+.text-error {
+ --tw-text-opacity: 1;
+ color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity, 1)));
}
-.h-12 {
- height: 3rem;
+.text-navy-950 {
+ --tw-text-opacity: 1;
+ color: rgb(3 21 41 / var(--tw-text-opacity, 1));
}
-.h-20 {
- height: 5rem;
+.text-ocean {
+ --tw-text-opacity: 1;
+ color: rgb(8 117 209 / var(--tw-text-opacity, 1));
}
-.min-h-screen {
- min-height: 100vh;
+.text-primary {
+ --tw-text-opacity: 1;
+ color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity, 1)));
}
-.w-auto {
- width: auto;
+.text-secondary {
+ --tw-text-opacity: 1;
+ color: var(--fallback-s,oklch(var(--s)/var(--tw-text-opacity, 1)));
}
-.w-full {
- width: 100%;
+.text-signal {
+ --tw-text-opacity: 1;
+ color: rgb(62 174 43 / var(--tw-text-opacity, 1));
}
-.max-w-7xl {
- max-width: 80rem;
+.text-sky-300 {
+ --tw-text-opacity: 1;
+ color: rgb(125 211 252 / var(--tw-text-opacity, 1));
}
-.max-w-xl {
- max-width: 36rem;
+.text-success {
+ --tw-text-opacity: 1;
+ color: var(--fallback-su,oklch(var(--su)/var(--tw-text-opacity, 1)));
}
-.flex-1 {
- flex: 1 1 0%;
+.text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
-.shrink-0 {
- flex-shrink: 0;
+.text-white\/45 {
+ color: rgb(255 255 255 / 0.45);
}
-.flex-col {
- flex-direction: column;
+.text-white\/55 {
+ color: rgb(255 255 255 / 0.55);
}
-.items-center {
- align-items: center;
+.text-white\/60 {
+ color: rgb(255 255 255 / 0.6);
}
-.justify-between {
- justify-content: space-between;
+.text-white\/65 {
+ color: rgb(255 255 255 / 0.65);
}
-.gap-6 {
- gap: 1.5rem;
+.text-white\/70 {
+ color: rgb(255 255 255 / 0.7);
}
-.overflow-hidden {
- overflow: hidden;
+.text-white\/75 {
+ color: rgb(255 255 255 / 0.75);
}
-.rounded-none {
- border-radius: 0px;
+.underline {
+ text-decoration-line: underline;
}
-.border-t {
- border-top-width: 1px;
+.opacity-0 {
+ opacity: 0;
}
-.border-white\/10 {
- border-color: rgb(255 255 255 / 0.1);
+.opacity-100 {
+ opacity: 1;
}
-.bg-navy-950 {
- --tw-bg-opacity: 1;
- background-color: rgb(3 21 41 / var(--tw-bg-opacity, 1));
+.shadow-\[0_-8px_30px_rgba\(3\2c 21\2c 41\2c 0\.08\)\] {
+ --tw-shadow: 0 -8px 30px rgba(3,21,41,0.08);
+ --tw-shadow-colored: 0 -8px 30px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
-.bg-cover {
- background-size: cover;
+.shadow-panel {
+ --tw-shadow: 0 24px 70px rgba(2, 18, 35, 0.18);
+ --tw-shadow-colored: 0 24px 70px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
-.px-6 {
- padding-left: 1.5rem;
- padding-right: 1.5rem;
+.shadow-sm {
+ --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
-.py-16 {
- padding-top: 4rem;
- padding-bottom: 4rem;
+.outline {
+ outline-style: solid;
}
-.py-6 {
- padding-top: 1.5rem;
- padding-bottom: 1.5rem;
+.backdrop-blur {
+ --tw-backdrop-blur: blur(8px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
-.pt-10 {
- padding-top: 2.5rem;
+.backdrop-blur-\[1px\] {
+ --tw-backdrop-blur: blur(1px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
-.text-4xl {
- font-size: 2.25rem;
- line-height: 2.5rem;
+.transition {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
}
-.text-\[0\.65rem\] {
- font-size: 0.65rem;
+.transition-all {
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
}
-.text-base {
- font-size: 1rem;
- line-height: 1.5rem;
+.transition-colors {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
}
-.text-xs {
- font-size: 0.75rem;
- line-height: 1rem;
+.transition-transform {
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
}
-.font-bold {
- font-weight: 700;
+.duration-300 {
+ transition-duration: 300ms;
}
-.font-extrabold {
- font-weight: 800;
+@media (prefers-reduced-motion: reduce) {
+ html {
+ scroll-behavior: auto;
+ }
+
+ *, *::before, *::after {
+ scroll-behavior: auto !important;
+ transition-duration: 0.01ms !important;
+ }
}
-.uppercase {
- text-transform: uppercase;
+.placeholder\:text-white\/25::-moz-placeholder {
+ color: rgb(255 255 255 / 0.25);
}
-.leading-7 {
- line-height: 1.75rem;
+.placeholder\:text-white\/25::placeholder {
+ color: rgb(255 255 255 / 0.25);
}
-.leading-tight {
- line-height: 1.25;
+.first\:border-l:first-child {
+ border-left-width: 1px;
}
-.tracking-\[0\.18em\] {
- letter-spacing: 0.18em;
+.last\:border-b-0:last-child {
+ border-bottom-width: 0px;
}
-.tracking-\[0\.22em\] {
- letter-spacing: 0.22em;
+.hover\:border-white:hover {
+ --tw-border-opacity: 1;
+ border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
}
-.tracking-tight {
- letter-spacing: -0.025em;
+.hover\:bg-white:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
}
-.text-sky-300 {
+.hover\:text-navy-950:hover {
--tw-text-opacity: 1;
- color: rgb(125 211 252 / var(--tw-text-opacity, 1));
+ color: rgb(3 21 41 / var(--tw-text-opacity, 1));
}
-.text-white {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+.hover\:underline:hover {
+ text-decoration-line: underline;
}
-.text-white\/45 {
- color: rgb(255 255 255 / 0.45);
+.focus\:border-signal:focus {
+ --tw-border-opacity: 1;
+ border-color: rgb(62 174 43 / var(--tw-border-opacity, 1));
}
-.text-white\/70 {
- color: rgb(255 255 255 / 0.7);
+.group:hover .group-hover\:translate-x-1 {
+ --tw-translate-x: 0.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group:hover .group-hover\:text-secondary {
+ --tw-text-opacity: 1;
+ color: var(--fallback-s,oklch(var(--s)/var(--tw-text-opacity, 1)));
}
@media (min-width: 640px) {
+ .sm\:col-span-2 {
+ grid-column: span 2 / span 2;
+ }
+
+ .sm\:grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+
+ .sm\:flex-row {
+ flex-direction: row;
+ }
+
+ .sm\:items-center {
+ align-items: center;
+ }
+
+ .sm\:justify-between {
+ justify-content: space-between;
+ }
+
.sm\:text-5xl {
font-size: 3rem;
line-height: 1;
@@ -1329,7 +4224,97 @@ body {
}
}
+@media (min-width: 768px) {
+ .md\:grid {
+ display: grid;
+ }
+
+ .md\:min-w-0 {
+ min-width: 0px;
+ }
+
+ .md\:grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+
+ .md\:grid-cols-\[360px_1fr\] {
+ grid-template-columns: 360px 1fr;
+ }
+
+ .md\:grid-cols-\[repeat\(var\(--navigation-count\)\2c minmax\(0\2c 1fr\)\)\] {
+ grid-template-columns: repeat(var(--navigation-count),minmax(0,1fr));
+ }
+
+ .md\:items-center {
+ align-items: center;
+ }
+
+ .md\:overflow-visible {
+ overflow: visible;
+ }
+
+ .md\:py-24 {
+ padding-top: 6rem;
+ padding-bottom: 6rem;
+ }
+
+ .md\:pb-36 {
+ padding-bottom: 9rem;
+ }
+
+ .md\:text-5xl {
+ font-size: 3rem;
+ line-height: 1;
+ }
+}
+
@media (min-width: 1024px) {
+ .lg\:flex {
+ display: flex;
+ }
+
+ .lg\:w-1\/3 {
+ width: 33.333333%;
+ }
+
+ .lg\:w-2\/3 {
+ width: 66.666667%;
+ }
+
+ .lg\:grid-cols-3 {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+
+ .lg\:grid-cols-\[0\.75fr_1\.25fr\] {
+ grid-template-columns: 0.75fr 1.25fr;
+ }
+
+ .lg\:grid-cols-\[0\.9fr_1\.1fr\] {
+ grid-template-columns: 0.9fr 1.1fr;
+ }
+
+ .lg\:grid-cols-\[1\.3fr_1fr\] {
+ grid-template-columns: 1.3fr 1fr;
+ }
+
+ .lg\:items-start {
+ align-items: flex-start;
+ }
+
+ .lg\:items-center {
+ align-items: center;
+ }
+
+ .lg\:gap-16 {
+ gap: 4rem;
+ }
+
+ .lg\:space-y-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(0px * var(--tw-space-y-reverse));
+ }
+
.lg\:px-8 {
padding-left: 2rem;
padding-right: 2rem;
@@ -1339,8 +4324,26 @@ body {
padding-right: 2rem;
}
+ .lg\:text-left {
+ text-align: left;
+ }
+
+ .lg\:text-right {
+ text-align: right;
+ }
+
.lg\:text-6xl {
font-size: 3.75rem;
line-height: 1;
}
}
+
+@media (min-width: 1280px) {
+ .xl\:flex {
+ display: flex;
+ }
+
+ .xl\:hidden {
+ display: none;
+ }
+}
diff --git a/assets/css/tailwind.css b/assets/css/tailwind.css
index 26b7d39..7662c78 100644
--- a/assets/css/tailwind.css
+++ b/assets/css/tailwind.css
@@ -3,6 +3,32 @@
@tailwind utilities;
@layer base {
- body { @apply m-0 bg-navy-950 font-sans antialiased; }
+ html { scroll-behavior: smooth; }
+ body { @apply bg-white text-base-content antialiased; }
:focus-visible { @apply outline outline-2 outline-offset-4 outline-signal; }
+ section[id] { scroll-margin-top: 4rem; }
+}
+
+@layer components {
+ .site-container { @apply mx-auto w-full max-w-5xl px-6 lg:px-8; }
+ .section-pad { @apply py-20 md:py-28; }
+ .eyebrow { @apply mb-4 text-xs font-bold uppercase tracking-[0.22em] text-ocean; }
+ .section-title { @apply text-3xl font-bold tracking-tight text-navy-950 md:text-4xl; }
+ .hero-grid {
+ background-image:
+ linear-gradient(90deg, rgba(3,21,41,.96) 0%, rgba(3,35,62,.78) 48%, rgba(3,21,41,.45) 100%),
+ radial-gradient(circle at 72% 30%, rgba(8,117,209,.55), transparent 26%),
+ linear-gradient(rgba(76,196,59,.08) 1px, transparent 1px),
+ linear-gradient(90deg, rgba(76,196,59,.08) 1px, transparent 1px);
+ background-size: auto, auto, 48px 48px, 48px 48px;
+ }
+ .release-art { @apply relative overflow-hidden bg-navy-900; }
+ .release-art::before { content: ""; @apply absolute inset-0 opacity-70; background: radial-gradient(circle at 70% 30%, #0875d1, transparent 28%), linear-gradient(145deg, transparent 42%, #4cc43b 43%, transparent 44%); }
+ .release-art::after { content: ""; @apply absolute border border-signal/70; inset: 28% 18% 22% 36%; }
+ .btn-primary { @apply text-white; }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ html { scroll-behavior: auto; }
+ *, *::before, *::after { scroll-behavior: auto !important; transition-duration: 0.01ms !important; }
}
diff --git a/assets/images/hero-placeholder.svg b/assets/images/hero-placeholder.svg
new file mode 100644
index 0000000..44c20d3
--- /dev/null
+++ b/assets/images/hero-placeholder.svg
@@ -0,0 +1,27 @@
+
diff --git a/assets/images/logo.svg b/assets/images/logo.svg
new file mode 100644
index 0000000..1925762
--- /dev/null
+++ b/assets/images/logo.svg
@@ -0,0 +1,56 @@
+
+
\ No newline at end of file
diff --git a/assets/images/release-coastal-placeholder.svg b/assets/images/release-coastal-placeholder.svg
new file mode 100644
index 0000000..ce3a155
--- /dev/null
+++ b/assets/images/release-coastal-placeholder.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/images/release-harbor-placeholder.svg b/assets/images/release-harbor-placeholder.svg
new file mode 100644
index 0000000..4332341
--- /dev/null
+++ b/assets/images/release-harbor-placeholder.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/images/release-tracks-placeholder.svg b/assets/images/release-tracks-placeholder.svg
new file mode 100644
index 0000000..007cf0e
--- /dev/null
+++ b/assets/images/release-tracks-placeholder.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/js/navigation.js b/assets/js/navigation.js
new file mode 100644
index 0000000..fa100c0
--- /dev/null
+++ b/assets/js/navigation.js
@@ -0,0 +1,29 @@
+(() => {
+ const header = document.querySelector("#fixed-navigation");
+ const sectionNavigation = document.querySelector("#section-navigation");
+
+ if (!header || !sectionNavigation) return;
+
+ const updateHeader = () => {
+ const navigationBottom = sectionNavigation.getBoundingClientRect().bottom;
+ const isVisible = navigationBottom <= 0;
+
+ header.classList.toggle("pointer-events-none", !isVisible);
+ header.classList.toggle("-translate-y-full", !isVisible);
+ header.classList.toggle("opacity-0", !isVisible);
+ header.classList.toggle("pointer-events-auto", isVisible);
+ header.classList.toggle("translate-y-0", isVisible);
+ header.classList.toggle("opacity-100", isVisible);
+ header.setAttribute("aria-hidden", String(!isVisible));
+
+ if (isVisible) {
+ header.removeAttribute("inert");
+ } else {
+ header.setAttribute("inert", "");
+ }
+ };
+
+ updateHeader();
+ window.addEventListener("scroll", updateHeader, { passive: true });
+ window.addEventListener("resize", updateHeader);
+})();
diff --git a/assets/js/uniqueship-scripts.js b/assets/js/uniqueship-scripts.js
new file mode 100644
index 0000000..31d1877
--- /dev/null
+++ b/assets/js/uniqueship-scripts.js
@@ -0,0 +1,53 @@
+// Copy to clipboard functionality for citation text
+
+document.querySelectorAll("[data-copy-button]").forEach((button) => {
+ button.addEventListener("click", async () => {
+ const container = button.closest(".relative");
+ const source = container.querySelector("[data-copy-source]");
+ const icon = button.querySelector("[data-copy-icon]");
+ const status = button.querySelector("[data-copy-status]");
+
+ try {
+ await navigator.clipboard.writeText(source.textContent);
+
+ icon.classList.remove("ri-file-copy-line");
+ icon.classList.add("ri-check-line", "animate-bounce");
+ button.classList.add("text-success");
+
+ button.setAttribute("aria-label", "Citation copied");
+ button.setAttribute("title", "Copied!");
+ status.textContent = "Citation copied to clipboard";
+
+ window.setTimeout(() => {
+ icon.classList.remove("ri-check-line", "animate-bounce");
+ icon.classList.add("ri-file-copy-line");
+ button.classList.remove("text-success");
+
+ button.setAttribute("aria-label", "Copy citation");
+ button.setAttribute("title", "Copy citation");
+ status.textContent = "";
+ }, 1600);
+ } catch (error) {
+ button.setAttribute("title", "Unable to copy");
+ status.textContent = "Unable to copy citation";
+ }
+ });
+});
+
+// Smooth scrolling for anchor links
+
+document.addEventListener("click", (event) => {
+ const link = event.target.closest('a[href^="#"]');
+ if (!link) return;
+
+ const target = document.querySelector(link.getAttribute("href"));
+ if (!target) return;
+
+ event.preventDefault();
+
+ target.scrollIntoView({
+ behavior: "smooth",
+ block: "start"
+ });
+ });
+
\ No newline at end of file
diff --git a/assets/js/web-form.js b/assets/js/web-form.js
new file mode 100644
index 0000000..478531b
--- /dev/null
+++ b/assets/js/web-form.js
@@ -0,0 +1,97 @@
+(() => {
+ const forms = document.querySelectorAll(
+ "[data-request-form]"
+ );
+
+ forms.forEach((form) => {
+ const container = form.closest(
+ "[data-form-container]"
+ );
+
+ const successPanel = container?.querySelector(
+ "[data-form-success]"
+ );
+
+ const errorMessage = form.querySelector(
+ "[data-form-error]"
+ );
+
+ const submitButton = form.querySelector(
+ "[data-submit-button]"
+ );
+
+ const buttonLabel = submitButton?.querySelector(
+ "[data-button-label]"
+ );
+
+ const buttonSpinner = submitButton?.querySelector(
+ "[data-button-spinner]"
+ );
+
+ if (
+ !container ||
+ !successPanel ||
+ !submitButton ||
+ !buttonLabel
+ ) {
+ return;
+ }
+
+ const setSubmitting = (isSubmitting) => {
+ submitButton.disabled = isSubmitting;
+
+ submitButton.setAttribute(
+ "aria-busy",
+ String(isSubmitting)
+ );
+
+ buttonLabel.textContent = isSubmitting
+ ? submitButton.dataset.submittingLabel
+ : submitButton.dataset.defaultLabel;
+
+ buttonSpinner?.classList.toggle(
+ "hidden",
+ !isSubmitting
+ );
+ };
+
+ form.addEventListener("submit", async (event) => {
+ event.preventDefault();
+
+ if (!form.reportValidity()) {
+ return;
+ }
+
+ errorMessage?.classList.add("hidden");
+ setSubmitting(true);
+
+ try {
+ const formData = new FormData(form);
+ const body = new URLSearchParams(formData);
+
+ await fetch(form.action, {
+ method: "POST",
+ mode: "no-cors",
+ headers: {
+ "Content-Type":
+ "application/x-www-form-urlencoded"
+ },
+ body: body.toString()
+ });
+
+ form.reset();
+ form.classList.add("hidden");
+ successPanel.classList.remove("hidden");
+ successPanel.focus();
+ } catch (error) {
+ console.error(
+ "Google Form submission failed:",
+ error
+ );
+
+ errorMessage?.classList.remove("hidden");
+ setSubmitting(false);
+ }
+ });
+ });
+})();
\ No newline at end of file
diff --git a/index.md b/index.md
index f3c0c1f..7fd1fd4 100644
--- a/index.md
+++ b/index.md
@@ -1,20 +1,217 @@
---
-layout: coming-soon
-title: UniqueShip — Coming Soon
-description: UniqueShip is a labeled maritime acoustic dataset for underwater target recognition.
-
-# Replace this file path if the background image changes.
-background_image: "/assets/images/coming-soon-background.jpg"
-
-eyebrow: Maritime acoustic research data
-headline: >-
- UniqueShip: Coming to OCEANS 2026.
-text: >-
- We will be releasing UniqueShip, a labeled dataset for underwater acoustic target recognition, on September 22, 2026.
-
-# Remove this entire button block if a call to action is not needed yet.
-# button:
-# label: Contact the team
-# url: "mailto:data@example.org"
-# icon: mail-line
+layout: home
+title: MARINA Dataset
+description: A large labeled dataset for underwater acoustic target recognition.
+
+# ==================================================
+# HERO AREA
+# Button styles: primary or outline
+# ==================================================
+hero:
+ # Replace this path with the final hero image in assets/images.
+ background_image: "/assets/images/coming-soon-background.jpg"
+ subheadline: Open benchmark · Underwater Acoustics
+ headline: >-
+ UniqueShip: Large, public underwater acoustic target recognition (UATR) datasets for ships
+ text: >-
+ 2,460 hours of ship-radiated noise from 4,218 unique vessels, split by vessel ID so no ship appears in both training and test split. Sourced from the Ocean Networks Canada (ONC) repository.
+ buttons:
+ - label: Browse releases
+ url: "#releases"
+ style: primary
+ - label: Read the overview
+ url: "#overview"
+ style: outline
+
+# ==================================================
+# OVERVIEW
+# Button styles: primary or outline
+# ==================================================
+overview:
+ subheadline: Overview
+ headline: Built to train generalizable UATR models using leakproof splits
+ paragraphs:
+ - >-
+ UniqueShip pairs hydrophone recordings from seven ONC deployments in the Strait of Georgia (May 2016 – November 2023) with AIS vessel tracking data. Each 5-second sample is labeled with its vessel class and 17 AIS metadata fields. Unlike earlier ONC-based datasets, every split keeps each vessel in a single partition and groups background audio by day, so test accuracy reflects performance on ships the model has never heard.
+ cta_section:
+ paragraphs:
+ - >-
+ The paper describes the dataset in more detail and includes results with and without data leakage, ablations on vessel diversity vs. audio duration, a metadata analysis, and additional baseline results.
+ buttons:
+ - label: Read the paper
+ url: "https://arxiv.org/pdf/2609.13659"
+ target: _blank
+ style: primary
+
+ stats:
+ - value: "3,437"
+ label: Hours of ship & background audio
+ - value: "4,218"
+ label: Unique vessels
+ - value: "11"
+ label: Vessel classes
+ - value: "2.5M"
+ label: 5-second recordings
+
+# ==================================================
+# THE DIFFERENCE
+# ==================================================
+difference:
+ subheadline: What makes it different?
+ headline: Larger, more diverse, and free of data leakage that inflates other benchmarks
+ items:
+ - title: Leak-free splits
+ text: Vessel audio is grouped by MMSI and background by day instead of random splitting. On previous datasets, random splitting inflated accuracy by 10–48 points.
+ - title: Largest open ONC dataset
+ text: The balanced benchmark subset alone has 4× the audio and 12× the vessels of DeepShip, and 70% more audio than the unbalanced Oceanship dataset.
+ - title: Rich AIS metadata
+ text: 17 fields per sample, including MMSI, distance to hydrophone, speed, course, length, beam, draught, and navigation status.
+ - title: Ready-made splits
+ text: Choose anything from a 25-hour quick-start subset to the full 3,437-hour corpus, with five 80/10/10 folds.
+ - title: Baselines included
+ text: MobileNetV3, ViT-B/16, and SwinV2 with STFT and Mel inputs. The best result is 66.5% accuracy (Swin + Mel).
+ - title: Cleaner background class
+ text: 8km ship-free radius ensures quieter ambient samples for the background class
+
+# ==================================================
+# DATA RELEASES
+# Button styles: primary or outline
+# ==================================================
+releases:
+ subheadline: Data releases
+ headline: Current dataset splits
+ text: All splits are vessel-disjoint and include per-sample AIS metadata. Samples are 5-second clips at 20 kHz; full-length recordings are available through the codebase.
+ items:
+ - title: 5 Class - Balanced
+ image: "/assets/images/release-coastal-placeholder.svg"
+ image_alt: Placeholder
+ description: Contains the main 5 classes (Tug/Tow, Tanker, Passengership, Cargo) and balances the total audio for each class such that they are equal. Current version = 1.0
+ size: "89 GB (Unzipped), 59 GB (Zipped)"
+ views: 213h, 3175 vessels, 5 classes
+ date: Released September 2026
+ buttons:
+ - label: Download audio
+ url: "https://drive.google.com/drive/folders/1G0e-2Nhi6CWKuBRStlR8GTtcGyYiT2h6?usp=drive_link"
+ target: _blank
+ style: primary
+ - label: Download spectrograms
+ url: "https://drive.google.com/drive/folders/1a6wLqfuBh3PMqSlZfy-IVjTfrJMtqo11?usp=sharing"
+ target: _blank
+ style: primary
+ - title: 12 Class - 5 Hours Each
+ image: "/assets/images/release-coastal-placeholder.svg"
+ image_alt: Placeholder
+ description: Contains all ship classes and balances the total audio such that it is 5 hours each class. Current version = 1.0
+ size: "10 GB (Unzipped), 7 GB (Zipped)"
+ views: 60h, 4218 vessels, 12 classes
+ date: Released September 2026
+ buttons:
+ - label: Download audio
+ url: "https://drive.google.com/drive/folders/1HxV8AGh8ckZS3JehAU_gY2fuCnscX-eV?usp=drive_link"
+ target: _blank
+ style: primary
+ - label: Download spectrograms
+ url: "https://drive.google.com/drive/folders/1xOXX4dUmtSET7Utb4gfscZp1dlPoT76e?usp=drive_link"
+ target: _blank
+ style: primary
+
+# ==================================================
+# LEADERBOARDS
+# ==================================================
+leaderboards:
+ subheadline: Benchmark results
+ headline: Leaderboards
+ status: Coming soon
+ text: >-
+ Compare published results across the UniqueShip dataset splits.
+ Rankings, evaluation metrics, and submission guidance will be
+ available following the dataset release.
+
+ preview:
+ columns:
+ - Rank
+ - Submission
+ - Dataset split
+ - Score
+ - Updated
+ rows: 4
+
+# ==================================================
+# INQUIRY FORM
+# ==================================================
+inquiries:
+ subheadline: Inquiries
+ headline: Need additional information or a different split?
+ text: >-
+ Current dataset splits are available to download directly — no request or approval is required. Use this form if you have questions, need additional information, or would like to request a split that is not currently available.
+ benefits:
+ - Ask questions about the data or documentation
+ - Request additional or specialized dataset splits
+ form:
+ # Get "action" by inspecting your google form, searching for "action"
+ # and then copy/pasting the URL (should end in "formResponse").
+
+ action: "https://docs.google.com/forms/u/0/d/e/1FAIpQLScgdYqByeXFuj-dDJ-7_McmpmoaArhqkgZZsilMZhcHieopAA/formResponse"
+
+ submit_label: Submit inquiry
+ submitting_label: Submitting…
+ error_message: We could not send your request. Check your connection and try again.
+
+ success:
+ eyebrow: Request received
+ headline: Thanks for your submission
+ text: We have received your request and will be in touch.
+
+ fields:
+ # Get "name" field by inspecting your Google form, searching for "entry."
+ # (include the period for faster searching) and copy/pasting the number.
+
+ - type: text
+ name: entry.925008751
+ label: Full name
+ autocomplete: name
+ required: true
+ width: half
+
+ - type: email
+ name: entry.2144715529
+ label: Work email
+ autocomplete: email
+ required: true
+ width: half
+
+ - type: text
+ name: entry.241770130
+ label: Organization
+ autocomplete: organization
+ required: false
+ width: full
+
+ - type: textarea
+ name: entry.1262269016
+ label: Inquiry
+ required: true
+ width: full
+
+# ==================================================
+# CITATION AND CONTACT
+# ==================================================
+citation:
+ subheadline: Citing this dataset
+ headline: Reference the dataset paper
+ text: If you use UniqueShip, please cite the paper below.
+ code: |-
+ @inproceedings{hashemi_2026_uniqueship,
+ author = {Hashemi, Connor and Stout, Trevor and Hoogs, Anthony and Parham, Jason},
+ title = {UniqueShip: Mitigating Data Leakage in Acoustic Ship Classification Benchmark Datasets},
+ booktitle = {OCEANS 2026},
+ year = {2026},
+ pages = {TODO}
+ }
+ contact:
+ headline: Questions, corrections, or collaboration?
+ text: Our team can help with access and research partnerships.
+ button_label: Contact the team
+ url: "https://www.kitware.com/contact/"
+
---
diff --git a/package-lock.json b/package-lock.json
index 105fc7c..1eeb5f2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,15 +1,14 @@
{
- "name": "marina-coming-soon",
+ "name": "darpa-marina-jekyll",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "marina-coming-soon",
+ "name": "darpa-marina-jekyll",
"devDependencies": {
"@tailwindcss/typography": "^0.5.16",
"concurrently": "^9.1.2",
"daisyui": "^4.12.24",
- "remixicon": "^4.9.1",
"tailwindcss": "^3.4.17"
}
},
@@ -1012,13 +1011,6 @@
"node": ">=8.10.0"
}
},
- "node_modules/remixicon": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/remixicon/-/remixicon-4.9.1.tgz",
- "integrity": "sha512-36gLSoujkabnCFZFDyP17VNh9piuBA/rsXUb4auSJWLGsHVXtmxLj/EM5FjaEAGnk8oIAj1Azob/DZ2N+90lAQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
diff --git a/package.json b/package.json
index c3b65ca..15e18c6 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "name": "marina-coming-soon",
+ "name": "darpa-marina-jekyll",
"private": true,
"scripts": {
"css:build": "tailwindcss -i ./assets/css/tailwind.css -o ./assets/css/site.css --minify",
@@ -12,7 +12,6 @@
"@tailwindcss/typography": "^0.5.16",
"concurrently": "^9.1.2",
"daisyui": "^4.12.24",
- "remixicon": "^4.9.1",
"tailwindcss": "^3.4.17"
}
}
diff --git a/tailwind.config.js b/tailwind.config.js
index ff95a04..9c5610f 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -14,7 +14,7 @@ module.exports = {
900: "#062847",
800: "#073c68"
},
- signal: "#4cc43b",
+ signal: "#3eae2b",
ocean: "#0875d1"
},
fontFamily: {
@@ -30,7 +30,7 @@ module.exports = {
themes: [
{
marina: {
- primary: "#4cc43b",
+ primary: "#3eae2b",
"primary-content": "#031529",
secondary: "#0875d1",
"secondary-content": "#ffffff",