commit ed3a0d65104a90d17f1fe5c34b5813560b73c153
Author: dyzulk <66510723+dyzulk@users.noreply.github.com>
Date: Sun Jan 18 16:00:12 2026 +0700
docs: add MIT license
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..1a14372
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2026 DyzulkDev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..58e8576
--- /dev/null
+++ b/README.md
@@ -0,0 +1,21 @@
+# Mivo Theme Downloader
+
+**Category:** Hotspot Tools
+**Author:** DyzulkDev
+**Version:** 1.0.0
+
+The **Mivo Theme Downloader** allows you to easily download and install the latest Captive Portal themes directly from the Mivo settings panel.
+
+## Features
+- **One-Click Download**: Fetch the latest themes from the official repository.
+- **Auto-Extraction**: Automatically extracts and places theme files in the correct directory.
+- **Updates**: Keeps your hotspot login page up to date with new designs.
+
+## Installation
+1. Download the plugin ZIP file.
+2. Go to **Mivo > Settings > Plugins**.
+3. Click **Upload Plugin** and select the ZIP file.
+4. The plugin will appear in your installed list.
+
+## Usage
+Navigate to the **Theme Manager** in the sidebar (under Hotspot Tools) to browse and download available themes.
diff --git a/plugin.php b/plugin.php
new file mode 100644
index 0000000..08931a4
--- /dev/null
+++ b/plugin.php
@@ -0,0 +1,234 @@
+= 1.0
+ */
+
+// 1. Register Routes
+Hooks::addAction('router_init', function(Router $router) {
+
+ // Page to show the download button
+ $router->get('/{session}/theme/manager', function($session) {
+ $title = 'Theme Manager'; // Fallback title
+
+ // Include Header
+ require ROOT . '/app/Views/layouts/header_main.php';
+
+ // 1. Inject Plugin Translations using the new extend() method
+ ?>
+
+
+
+
+
Theme Manager
+
Manage and download your captive portal theme.
+
+
+
+
Download Mivo Theme
+
Download the fully configured captive portal theme for this router session. The package includes your specific configuration (API Base URL and Session ID) automatically injected into the theme assets.
+
+
+
+
+
Installation
+
+ Download the zip file.
+ Extract the contents.
+ Upload the folders (css, fonts, js, etc.) and login.html to your Mikrotik Hotspot directory.
+
+
+
+
+ post('/{session}/theme/download', function($session) {
+ $sourcePath = __DIR__ . '/theme';
+ if (!is_dir($sourcePath)) {
+ die("Theme source not found.");
+ }
+
+ // Determine Configuration
+ $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
+ $host = $_SERVER['HTTP_HOST'];
+ $baseUrl = $protocol . $host . '/mivo/public'; // Adjust if needed based on real deployment, maybe just $protocol . $host if root
+ // If app is in root:
+ $baseUrl = $protocol . $host;
+
+ // Prepare Zip
+ $zipFile = sys_get_temp_dir() . '/mivo-theme-' . $session . '-' . date('YmdHis') . '.zip';
+ $zip = new ZipArchive();
+
+ if ($zip->open($zipFile, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== TRUE) {
+ die("Cannot create zip file.");
+ }
+
+ $files = new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator($sourcePath, RecursiveDirectoryIterator::SKIP_DOTS),
+ RecursiveIteratorIterator::LEAVES_ONLY
+ );
+
+ foreach ($files as $name => $file) {
+ if ($file->isDir()) continue;
+
+ $filePath = $file->getRealPath();
+ $relativePath = substr($filePath, strlen($sourcePath) + 1);
+
+ // Normalize slashes for Zip
+ $zipPath = str_replace('\\', '/', $relativePath);
+
+ if (strpos($zipPath, 'assets/js/main.js') !== false) {
+ // Read and Replace
+ $content = file_get_contents($filePath);
+
+ // Replacements
+ $content = str_replace('apiBaseUrl: ""', 'apiBaseUrl: "' . $baseUrl . '"', $content);
+ $content = str_replace('apiSession: "router-jakarta-1"', 'apiSession: "' . $session . '"', $content);
+
+ $zip->addFromString($zipPath, $content);
+ } else {
+ $zip->addFile($filePath, $zipPath);
+ }
+ }
+
+ $zip->close();
+
+ // Serve File
+ if (file_exists($zipFile)) {
+ header('Content-Description: File Transfer');
+ header('Content-Type: application/zip');
+ header('Content-Disposition: attachment; filename="mivo-theme-'.$session.'.zip"');
+ header('Expires: 0');
+ header('Cache-Control: must-revalidate');
+ header('Pragma: public');
+ header('Content-Length: ' . filesize($zipFile));
+ readfile($zipFile);
+ unlink($zipFile);
+ exit;
+ } else {
+ die("Failed to create zip.");
+ }
+ });
+
+});
+
+// 2. Inject Menu into Sidebar (Using Footer JS Hack)
+Hooks::addAction('mivo_footer', function() {
+ // Get current session from URL if possible
+ $uri = $_SERVER['REQUEST_URI'] ?? '/';
+ $parts = explode('/', trim($uri, '/'));
+ if (count($parts) >= 2 && $parts[1] === 'dashboard' || isset($parts[0])) {
+ $session = $parts[0]; // Assuming /{session}/...
+
+ // Check if it's a valid session context looking like a session string
+ // Simple basic check to avoid injecting on non-session pages
+ if (!empty($session) && $session !== 'settings' && $session !== 'login' && $session !== 'install') {
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Redirecting...
+
You are being redirected to your destination.
+
+
+
+ If you are not redirected automatically, click here .
+
+
+
+
+
MIVO THEME BY DYZULKDEV • POWERED BY MIVO
+
+
+
+
+
+
+
+
+
diff --git a/theme/api.json b/theme/api.json
new file mode 100644
index 0000000..7074b29
--- /dev/null
+++ b/theme/api.json
@@ -0,0 +1,11 @@
+{
+ "captive": $(if logged-in == 'yes')false$(else)true$(endif),
+ "user-portal-url": "$(link-login-only)",
+$(if session-timeout-secs != 0)
+ "seconds-remaining": $(session-timeout-secs),
+$(endif)
+$(if remain-bytes-total)
+ "bytes-remaining": $(remain-bytes-total),
+$(endif)
+ "can-extend-session": true
+}
diff --git a/theme/assets/aa.txt b/theme/assets/aa.txt
new file mode 100644
index 0000000..e69de29
diff --git a/theme/assets/css/styles.css b/theme/assets/css/styles.css
new file mode 100644
index 0000000..672de9d
--- /dev/null
+++ b/theme/assets/css/styles.css
@@ -0,0 +1,2512 @@
+*, ::before, ::after {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgb(59 130 246 / 0.5);
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+ --tw-contain-size: ;
+ --tw-contain-layout: ;
+ --tw-contain-paint: ;
+ --tw-contain-style: ;
+}
+
+::backdrop {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgb(59 130 246 / 0.5);
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+ --tw-contain-size: ;
+ --tw-contain-layout: ;
+ --tw-contain-paint: ;
+ --tw-contain-style: ;
+}
+
+/*
+! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com
+*/
+
+/*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+*/
+
+*,
+::before,
+::after {
+ box-sizing: border-box;
+ /* 1 */
+ border-width: 0;
+ /* 2 */
+ border-style: solid;
+ /* 2 */
+ border-color: #e5e7eb;
+ /* 2 */
+}
+
+::before,
+::after {
+ --tw-content: '';
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Use the user's configured `sans` font-family by default.
+5. Use the user's configured `sans` font-feature-settings by default.
+6. Use the user's configured `sans` font-variation-settings by default.
+7. Disable tap highlights on iOS
+*/
+
+html,
+:host {
+ line-height: 1.5;
+ /* 1 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */
+ -moz-tab-size: 4;
+ /* 3 */
+ -o-tab-size: 4;
+ tab-size: 4;
+ /* 3 */
+ font-family: Inter, sans-serif;
+ /* 4 */
+ font-feature-settings: normal;
+ /* 5 */
+ font-variation-settings: normal;
+ /* 6 */
+ -webkit-tap-highlight-color: transparent;
+ /* 7 */
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
+*/
+
+body {
+ margin: 0;
+ /* 1 */
+ line-height: inherit;
+ /* 2 */
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+
+hr {
+ height: 0;
+ /* 1 */
+ color: inherit;
+ /* 2 */
+ border-top-width: 1px;
+ /* 3 */
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+/*
+Remove the default font size and weight for headings.
+*/
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+/*
+Reset links to optimize for opt-in styling instead of opt-out.
+*/
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+/*
+Add the correct font weight in Edge and Safari.
+*/
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/*
+1. Use the user's configured `mono` font-family by default.
+2. Use the user's configured `mono` font-feature-settings by default.
+3. Use the user's configured `mono` font-variation-settings by default.
+4. Correct the odd `em` font sizing in all browsers.
+*/
+
+code,
+kbd,
+samp,
+pre {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ /* 1 */
+ font-feature-settings: normal;
+ /* 2 */
+ font-variation-settings: normal;
+ /* 3 */
+ font-size: 1em;
+ /* 4 */
+}
+
+/*
+Add the correct font size in all browsers.
+*/
+
+small {
+ font-size: 80%;
+}
+
+/*
+Prevent `sub` and `sup` elements from affecting the line height in all browsers.
+*/
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+
+table {
+ text-indent: 0;
+ /* 1 */
+ border-color: inherit;
+ /* 2 */
+ border-collapse: collapse;
+ /* 3 */
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ /* 1 */
+ font-feature-settings: inherit;
+ /* 1 */
+ font-variation-settings: inherit;
+ /* 1 */
+ font-size: 100%;
+ /* 1 */
+ font-weight: inherit;
+ /* 1 */
+ line-height: inherit;
+ /* 1 */
+ letter-spacing: inherit;
+ /* 1 */
+ color: inherit;
+ /* 1 */
+ margin: 0;
+ /* 2 */
+ padding: 0;
+ /* 3 */
+}
+
+/*
+Remove the inheritance of text transform in Edge and Firefox.
+*/
+
+button,
+select {
+ text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+
+button,
+input:where([type='button']),
+input:where([type='reset']),
+input:where([type='submit']) {
+ -webkit-appearance: button;
+ /* 1 */
+ background-color: transparent;
+ /* 2 */
+ background-image: none;
+ /* 2 */
+}
+
+/*
+Use the modern Firefox focus style for all focusable elements.
+*/
+
+:-moz-focusring {
+ outline: auto;
+}
+
+/*
+Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
+*/
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+/*
+Add the correct vertical alignment in Chrome and Firefox.
+*/
+
+progress {
+ vertical-align: baseline;
+}
+
+/*
+Correct the cursor style of increment and decrement buttons in Safari.
+*/
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+
+[type='search'] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ outline-offset: -2px;
+ /* 2 */
+}
+
+/*
+Remove the inner padding in Chrome and Safari on macOS.
+*/
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Change font properties to `inherit` in Safari.
+*/
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ /* 1 */
+ font: inherit;
+ /* 2 */
+}
+
+/*
+Add the correct display in Chrome and Safari.
+*/
+
+summary {
+ display: list-item;
+}
+
+/*
+Removes the default spacing and border for appropriate elements.
+*/
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol,
+ul,
+menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+/*
+Reset default styling for dialogs.
+*/
+
+dialog {
+ padding: 0;
+}
+
+/*
+Prevent resizing textareas horizontally by default.
+*/
+
+textarea {
+ resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user's configured gray 400 color.
+*/
+
+input::-moz-placeholder, textarea::-moz-placeholder {
+ opacity: 1;
+ /* 1 */
+ color: #9ca3af;
+ /* 2 */
+}
+
+input::placeholder,
+textarea::placeholder {
+ opacity: 1;
+ /* 1 */
+ color: #9ca3af;
+ /* 2 */
+}
+
+/*
+Set the default cursor for buttons.
+*/
+
+button,
+[role="button"] {
+ cursor: pointer;
+}
+
+/*
+Make sure disabled buttons don't get the pointer cursor.
+*/
+
+:disabled {
+ cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+ This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+ display: block;
+ /* 1 */
+ vertical-align: middle;
+ /* 2 */
+}
+
+/*
+Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+
+img,
+video {
+ max-width: 100%;
+ height: auto;
+}
+
+/* Make elements with the HTML hidden attribute stay hidden by default */
+
+[hidden]:where(:not([hidden="until-found"])) {
+ display: none;
+}
+
+:root {
+ --background: #f8fafc;
+ /* Lighter background for better contrast */
+ --foreground: #020617;
+ /* Deeper slate for text */
+ --accents-1: #f1f5f9;
+ --accents-2: #e2e8f0;
+ --accents-3: #cbd5e1;
+ --accents-4: #94a3b8;
+ --accents-5: #64748b;
+ --accents-6: #475569;
+ --accents-7: #334155;
+ --accents-8: #0f172a;
+}
+
+.dark {
+ --background: #000000;
+ --foreground: #ffffff;
+ --accents-1: #111111;
+ --accents-2: #333333;
+ --accents-3: #444444;
+ --accents-4: #666666;
+ --accents-5: #888888;
+ --accents-6: #999999;
+ --accents-7: #eaeaea;
+ --accents-8: #fafafa;
+}
+
+body {
+ background-color: var(--background);
+ font-family: Inter, sans-serif;
+ color: var(--foreground);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* Card System */
+
+.card {
+ border-radius: 1rem;
+ border-width: 2px;
+ border-color: rgb(255 255 255 / 0.4);
+ background-color: rgb(255 255 255 / 0.7);
+ padding: 1.5rem;
+ color: var(--foreground);
+ --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
+ --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ --tw-backdrop-blur: blur(40px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 500ms;
+}
+
+.card:hover {
+ --tw-translate-y: -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));
+ border-color: rgb(255 255 255 / 0.6);
+ background-color: rgb(255 255 255 / 0.8);
+}
+
+.card:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+ background-color: rgb(0 0 0 / 0.4);
+}
+
+.card:hover:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.2);
+ background-color: rgb(0 0 0 / 0.6);
+}
+
+.card-inner {
+ border-radius: 0.75rem;
+ border-width: 1px;
+ border-color: rgb(0 0 0 / 0.05);
+ background-color: rgb(0 0 0 / 0.05);
+ padding: 1rem;
+ --tw-backdrop-blur: blur(12px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+.card-inner:hover {
+ background-color: rgb(0 0 0 / 0.1);
+}
+
+.card-inner:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+ background-color: rgb(255 255 255 / 0.05);
+}
+
+.card-inner:hover:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+.nav-card {
+ position: fixed;
+ top: 1.5rem;
+ left: 50%;
+ z-index: 50;
+ display: flex;
+ --tw-translate-x: -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));
+ align-items: center;
+ gap: 0.5rem;
+ border-radius: 9999px;
+ border-width: 1px;
+ border-color: rgb(255 255 255 / 0.4);
+ background-color: rgb(255 255 255 / 0.7);
+ padding: 0.375rem;
+ --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ --tw-backdrop-blur: blur(24px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 500ms;
+}
+
+.nav-card:hover {
+ background-color: rgb(255 255 255 / 0.8);
+ --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
+ --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.nav-card:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+ background-color: rgb(0 0 0 / 0.4);
+}
+
+.nav-card:hover:is(.dark *) {
+ background-color: rgb(0 0 0 / 0.6);
+}
+
+.form-input {
+ display: flex;
+ height: 2.5rem;
+ width: 100%;
+ min-width: 0px;
+ align-items: center;
+ border-radius: 0.75rem;
+ border-width: 1px;
+ border-color: var(--accents-2);
+ background-color: rgb(255 255 255 / 0.4);
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ color: var(--foreground);
+ --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);
+ --tw-backdrop-blur: blur(24px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+.form-input::-moz-placeholder {
+ color: var(--accents-5);
+}
+
+.form-input::placeholder {
+ color: var(--accents-5);
+}
+
+.form-input:hover {
+ border-color: var(--accents-4);
+ background-color: rgb(255 255 255 / 0.6);
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.form-input:focus-visible {
+ border-color: var(--foreground);
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ --tw-ring-color: var(--foreground);
+}
+
+.form-input:disabled {
+ cursor: not-allowed;
+ opacity: 0.5;
+}
+
+.form-input:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+ background-color: rgb(255 255 255 / 0.05);
+}
+
+.form-input:hover:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+/* Remove Chrome Autofill Background */
+
+input:-webkit-autofill,
+ input:-webkit-autofill:hover,
+ input:-webkit-autofill:focus,
+ input:-webkit-autofill:active {
+ -webkit-box-shadow: 0 0 0 30px rgba(0,0,0,0) inset !important;
+ -webkit-text-fill-color: var(--foreground) !important;
+ -webkit-transition: background-color 5000s ease-in-out 0s;
+ transition: background-color 5000s ease-in-out 0s;
+}
+
+/* Global Button System */
+
+.btn {
+ display: inline-flex;
+ height: 3rem;
+ align-items: center;
+ justify-content: center;
+ border-radius: 0.75rem;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 700;
+ letter-spacing: 0.025em;
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+.btn:active {
+ --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));
+}
+
+.btn:disabled {
+ pointer-events: none;
+ opacity: 0.5;
+}
+
+.btn-primary {
+ display: inline-flex;
+ height: 3rem;
+ align-items: center;
+ justify-content: center;
+ border-radius: 0.75rem;
+ background-color: var(--foreground);
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 700;
+ letter-spacing: 0.025em;
+ color: var(--background);
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+.btn-primary:hover {
+ opacity: 0.9;
+}
+
+.btn-primary:focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.btn-primary:active {
+ --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));
+}
+
+.btn-primary:disabled {
+ pointer-events: none;
+ opacity: 0.5;
+}
+
+.btn-danger {
+ display: inline-flex;
+ height: 3rem;
+ align-items: center;
+ justify-content: center;
+ border-radius: 0.75rem;
+ border-width: 1px;
+ border-color: rgb(239 68 68 / 0.2);
+ background-color: rgb(239 68 68 / 0.1);
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 700;
+ letter-spacing: 0.025em;
+ --tw-text-opacity: 1;
+ color: rgb(220 38 38 / var(--tw-text-opacity, 1));
+ --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);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+.btn-danger:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.btn-danger:active {
+ --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));
+}
+
+.btn-danger:disabled {
+ pointer-events: none;
+ opacity: 0.5;
+}
+
+.btn-danger:is(.dark *) {
+ background-color: rgb(239 68 68 / 0.2);
+ --tw-text-opacity: 1;
+ color: rgb(248 113 113 / var(--tw-text-opacity, 1));
+}
+
+.btn-danger:hover:is(.dark *) {
+ --tw-bg-opacity: 1;
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.btn-secondary {
+ display: inline-flex;
+ height: 3rem;
+ align-items: center;
+ justify-content: center;
+ border-radius: 0.75rem;
+ border-width: 1px;
+ border-color: rgb(0 0 0 / 0.05);
+ background-color: var(--accents-2);
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 700;
+ letter-spacing: 0.025em;
+ color: var(--foreground);
+ --tw-backdrop-blur: blur(12px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+.btn-secondary:hover {
+ background-color: var(--accents-3);
+}
+
+.btn-secondary:focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.btn-secondary:active {
+ --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));
+}
+
+.btn-secondary:disabled {
+ pointer-events: none;
+ opacity: 0.5;
+}
+
+.btn-secondary:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+ background-color: rgb(255 255 255 / 0.05);
+}
+
+.btn-secondary:hover:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+/* Tab System */
+
+.tabs-container {
+ position: relative;
+ margin-bottom: 2rem;
+ display: flex;
+ overflow: hidden;
+ border-radius: 0.75rem;
+ border-width: 1px;
+ border-color: rgb(0 0 0 / 0.05);
+ background-color: rgb(0 0 0 / 0.05);
+ padding: 0.25rem;
+ --tw-backdrop-blur: blur(12px);
+ 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);
+}
+
+.tabs-container:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.05);
+ background-color: rgb(0 0 0 / 0.4);
+}
+
+.tab-link {
+ position: relative;
+ z-index: 10;
+ flex: 1 1 0%;
+ border-radius: 0.5rem;
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 700;
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+.tab-link-active {
+ color: var(--foreground);
+}
+
+.tab-link-active:is(.dark *) {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.tab-link-inactive {
+ color: var(--accents-5);
+}
+
+.tab-link-inactive:hover {
+ color: var(--foreground);
+}
+
+.tab-slider {
+ position: absolute;
+ top: 0.25rem;
+ bottom: 0.25rem;
+ left: 0.25rem;
+ border-radius: 0.5rem;
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
+ --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);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 500ms;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+}
+
+.tab-slider:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+/* Tab Content Sliding */
+
+.tab-window {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+
+.tab-track {
+ display: flex;
+ width: 200%;
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 500ms;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+}
+
+.tab-track-3 {
+ display: flex;
+ width: 300%;
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 500ms;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+}
+
+.tab-pane {
+ width: 50%;
+ flex-shrink: 0;
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+}
+
+.tab-pane-3 {
+ width: 33.333333%;
+ flex-shrink: 0;
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+}
+
+/* Theme Toggle Sliding */
+
+.theme-toggle-container {
+ position: relative;
+ display: flex;
+ align-items: center;
+ gap: 0.25rem;
+ border-radius: 9999px;
+ border-width: 1px;
+ border-color: rgb(0 0 0 / 0.05);
+ background-color: rgb(0 0 0 / 0.05);
+ padding: 0.25rem;
+}
+
+.theme-toggle-container:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+ background-color: rgb(255 255 255 / 0.05);
+}
+
+.theme-slider {
+ position: absolute;
+ top: 0.25rem;
+ bottom: 0.25rem;
+ left: 0.25rem;
+ width: 2rem;
+ border-radius: 9999px;
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
+ --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);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 500ms;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+}
+
+.theme-slider:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+.theme-btn {
+ position: relative;
+ z-index: 10;
+ display: flex;
+ height: 2rem;
+ width: 2rem;
+ align-items: center;
+ justify-content: center;
+ border-radius: 9999px;
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+/* Html5-Qrcode Overrides */
+
+#reader {
+ border-style: none !important;
+}
+
+#reader button {
+ cursor: pointer;
+ border-radius: 0.5rem;
+ border-width: 1px;
+ border-color: rgb(0 0 0 / 0.05);
+ background-color: var(--accents-2);
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 700;
+ color: var(--foreground);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+
+#reader button:hover {
+ background-color: var(--accents-3);
+}
+
+#reader button:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+#reader button:hover:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.2);
+}
+
+#reader #reader__dashboard_section_csr button {
+ display: inline-flex;
+ height: 3rem;
+ align-items: center;
+ justify-content: center;
+ border-radius: 0.75rem;
+ background-color: var(--foreground);
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 700;
+ letter-spacing: 0.025em;
+ color: var(--background);
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+#reader #reader__dashboard_section_csr button:hover {
+ opacity: 0.9;
+}
+
+#reader #reader__dashboard_section_csr button:focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+#reader #reader__dashboard_section_csr button:active {
+ --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));
+}
+
+#reader #reader__dashboard_section_csr button:disabled {
+ pointer-events: none;
+ opacity: 0.5;
+}
+
+#reader #reader__dashboard_section_csr button {
+ margin-bottom: 0.5rem;
+ height: 2.5rem;
+ width: 100%;
+ font-size: 0.75rem;
+ line-height: 1rem;
+}
+
+#reader #reader__dashboard_section_swaplink {
+ margin-top: 1rem;
+ display: block;
+ border-radius: 0.5rem;
+ background-color: rgb(0 0 0 / 0.05);
+ padding: 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ color: var(--foreground);
+ text-decoration-line: underline;
+ text-decoration-style: dotted;
+}
+
+#reader #reader__dashboard_section_swaplink:hover {
+ text-decoration-style: solid;
+}
+
+#reader #reader__dashboard_section_swaplink:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.05);
+}
+
+#reader select {
+ display: flex;
+ height: 2.5rem;
+ width: 100%;
+ min-width: 0px;
+ align-items: center;
+ border-radius: 0.75rem;
+ border-width: 1px;
+ border-color: var(--accents-2);
+ background-color: rgb(255 255 255 / 0.4);
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ color: var(--foreground);
+ --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);
+ --tw-backdrop-blur: blur(24px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
+
+#reader select::-moz-placeholder {
+ color: var(--accents-5);
+}
+
+#reader select::placeholder {
+ color: var(--accents-5);
+}
+
+#reader select:hover {
+ border-color: var(--accents-4);
+ background-color: rgb(255 255 255 / 0.6);
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+#reader select:focus-visible {
+ border-color: var(--foreground);
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ --tw-ring-color: var(--foreground);
+}
+
+#reader select:disabled {
+ cursor: not-allowed;
+ opacity: 0.5;
+}
+
+#reader select:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+ background-color: rgb(255 255 255 / 0.05);
+}
+
+#reader select:hover:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+#reader select {
+ margin-bottom: 1rem;
+}
+
+#reader span, #reader div {
+ color: var(--foreground);
+}
+
+.pointer-events-none {
+ pointer-events: none;
+}
+
+.visible {
+ visibility: visible;
+}
+
+.collapse {
+ visibility: collapse;
+}
+
+.static {
+ position: static;
+}
+
+.fixed {
+ position: fixed;
+}
+
+.absolute {
+ position: absolute;
+}
+
+.relative {
+ position: relative;
+}
+
+.inset-0 {
+ inset: 0px;
+}
+
+.-left-\[10\%\] {
+ left: -10%;
+}
+
+.-right-\[15\%\] {
+ right: -15%;
+}
+
+.-top-\[20\%\] {
+ top: -20%;
+}
+
+.bottom-0 {
+ bottom: 0px;
+}
+
+.left-0 {
+ left: 0px;
+}
+
+.right-0 {
+ right: 0px;
+}
+
+.right-2 {
+ right: 0.5rem;
+}
+
+.right-4 {
+ right: 1rem;
+}
+
+.top-0 {
+ top: 0px;
+}
+
+.top-1\/2 {
+ top: 50%;
+}
+
+.top-4 {
+ top: 1rem;
+}
+
+.top-\[30\%\] {
+ top: 30%;
+}
+
+.z-0 {
+ z-index: 0;
+}
+
+.z-10 {
+ z-index: 10;
+}
+
+.z-\[100\] {
+ z-index: 100;
+}
+
+.m-8 {
+ margin: 2rem;
+}
+
+.mx-1 {
+ margin-left: 0.25rem;
+ margin-right: 0.25rem;
+}
+
+.mx-auto {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.-mb-0\.5 {
+ margin-bottom: -0.125rem;
+}
+
+.-ml-0\.5 {
+ margin-left: -0.125rem;
+}
+
+.-mr-0\.5 {
+ margin-right: -0.125rem;
+}
+
+.-mt-0\.5 {
+ margin-top: -0.125rem;
+}
+
+.mb-1 {
+ margin-bottom: 0.25rem;
+}
+
+.mb-2 {
+ margin-bottom: 0.5rem;
+}
+
+.mb-4 {
+ margin-bottom: 1rem;
+}
+
+.mb-6 {
+ margin-bottom: 1.5rem;
+}
+
+.mb-8 {
+ margin-bottom: 2rem;
+}
+
+.ml-1 {
+ margin-left: 0.25rem;
+}
+
+.mt-0\.5 {
+ margin-top: 0.125rem;
+}
+
+.mt-1 {
+ margin-top: 0.25rem;
+}
+
+.mt-2 {
+ margin-top: 0.5rem;
+}
+
+.mt-4 {
+ margin-top: 1rem;
+}
+
+.mt-8 {
+ margin-top: 2rem;
+}
+
+.block {
+ display: block;
+}
+
+.inline-block {
+ display: inline-block;
+}
+
+.inline {
+ display: inline;
+}
+
+.flex {
+ display: flex;
+}
+
+.inline-flex {
+ display: inline-flex;
+}
+
+.table {
+ display: table;
+}
+
+.grid {
+ display: grid;
+}
+
+.contents {
+ display: contents;
+}
+
+.hidden {
+ display: none;
+}
+
+.aspect-square {
+ aspect-ratio: 1 / 1;
+}
+
+.size-1 {
+ width: 0.25rem;
+ height: 0.25rem;
+}
+
+.h-1 {
+ height: 0.25rem;
+}
+
+.h-10 {
+ height: 2.5rem;
+}
+
+.h-12 {
+ height: 3rem;
+}
+
+.h-16 {
+ height: 4rem;
+}
+
+.h-2 {
+ height: 0.5rem;
+}
+
+.h-3 {
+ height: 0.75rem;
+}
+
+.h-3\.5 {
+ height: 0.875rem;
+}
+
+.h-4 {
+ height: 1rem;
+}
+
+.h-5 {
+ height: 1.25rem;
+}
+
+.h-6 {
+ height: 1.5rem;
+}
+
+.h-8 {
+ height: 2rem;
+}
+
+.h-\[60vw\] {
+ height: 60vw;
+}
+
+.h-\[70vw\] {
+ height: 70vw;
+}
+
+.h-full {
+ height: 100%;
+}
+
+.min-h-\[100px\] {
+ min-height: 100px;
+}
+
+.min-h-screen {
+ min-height: 100vh;
+}
+
+.w-12 {
+ width: 3rem;
+}
+
+.w-16 {
+ width: 4rem;
+}
+
+.w-2 {
+ width: 0.5rem;
+}
+
+.w-3\.5 {
+ width: 0.875rem;
+}
+
+.w-4 {
+ width: 1rem;
+}
+
+.w-48 {
+ width: 12rem;
+}
+
+.w-5 {
+ width: 1.25rem;
+}
+
+.w-6 {
+ width: 1.5rem;
+}
+
+.w-8 {
+ width: 2rem;
+}
+
+.w-\[60vw\] {
+ width: 60vw;
+}
+
+.w-\[70vw\] {
+ width: 70vw;
+}
+
+.w-\[calc\(33\.33\%-4px\)\] {
+ width: calc(33.33% - 4px);
+}
+
+.w-\[calc\(50\%-4px\)\] {
+ width: calc(50% - 4px);
+}
+
+.w-auto {
+ width: auto;
+}
+
+.w-full {
+ width: 100%;
+}
+
+.w-px {
+ width: 1px;
+}
+
+.min-w-\[80px\] {
+ min-width: 80px;
+}
+
+.max-w-md {
+ max-width: 28rem;
+}
+
+.max-w-sm {
+ max-width: 24rem;
+}
+
+.flex-1 {
+ flex: 1 1 0%;
+}
+
+.shrink-0 {
+ flex-shrink: 0;
+}
+
+.grow {
+ flex-grow: 1;
+}
+
+.-translate-x-1\/2 {
+ --tw-translate-x: -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));
+}
+
+.-translate-x-1\/3 {
+ --tw-translate-x: -33.333333%;
+ 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-x-2\/3 {
+ --tw-translate-x: -66.666667%;
+ 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-1\/2 {
+ --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));
+}
+
+.-translate-y-24 {
+ --tw-translate-y: -6rem;
+ 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-x-0 {
+ --tw-translate-x: 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));
+}
+
+.translate-x-\[36px\] {
+ --tw-translate-x: 36px;
+ 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-x-\[calc\(100\%\+4px\)\] {
+ --tw-translate-x: calc(100% + 4px);
+ 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-x-\[calc\(200\%\+8px\)\] {
+ --tw-translate-x: calc(200% + 8px);
+ 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-x-full {
+ --tw-translate-x: 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));
+}
+
+.translate-y-2 {
+ --tw-translate-y: 0.5rem;
+ 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));
+}
+
+.rotate-180 {
+ --tw-rotate: 180deg;
+ 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));
+}
+
+.scale-100 {
+ --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));
+}
+
+.scale-95 {
+ --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));
+}
+
+.transform {
+ 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 ping {
+ 75%, 100% {
+ transform: scale(2);
+ opacity: 0;
+ }
+}
+
+.animate-ping {
+ animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
+}
+
+@keyframes pulse {
+ 50% {
+ opacity: .5;
+ }
+}
+
+.animate-pulse {
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+}
+
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.animate-spin {
+ animation: spin 1s linear infinite;
+}
+
+.grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+
+.flex-col {
+ flex-direction: column;
+}
+
+.items-start {
+ align-items: flex-start;
+}
+
+.items-center {
+ align-items: center;
+}
+
+.justify-start {
+ justify-content: flex-start;
+}
+
+.justify-center {
+ justify-content: center;
+}
+
+.justify-between {
+ justify-content: space-between;
+}
+
+.gap-1\.5 {
+ gap: 0.375rem;
+}
+
+.gap-2 {
+ gap: 0.5rem;
+}
+
+.gap-3 {
+ gap: 0.75rem;
+}
+
+.gap-4 {
+ gap: 1rem;
+}
+
+.space-y-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(0.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-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
+}
+
+.space-y-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
+}
+
+.overflow-hidden {
+ overflow: hidden;
+}
+
+.truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.break-words {
+ overflow-wrap: break-word;
+}
+
+.rounded-2xl {
+ border-radius: 1rem;
+}
+
+.rounded-full {
+ border-radius: 9999px;
+}
+
+.rounded-lg {
+ border-radius: 0.5rem;
+}
+
+.rounded-md {
+ border-radius: 0.375rem;
+}
+
+.rounded-sm {
+ border-radius: 0.125rem;
+}
+
+.rounded-xl {
+ border-radius: 0.75rem;
+}
+
+.border {
+ border-width: 1px;
+}
+
+.border-2 {
+ border-width: 2px;
+}
+
+.border-b-4 {
+ border-bottom-width: 4px;
+}
+
+.border-l-4 {
+ border-left-width: 4px;
+}
+
+.border-r-4 {
+ border-right-width: 4px;
+}
+
+.border-t {
+ border-top-width: 1px;
+}
+
+.border-t-4 {
+ border-top-width: 4px;
+}
+
+.border-accents-2 {
+ border-color: var(--accents-2);
+}
+
+.border-black\/5 {
+ border-color: rgb(0 0 0 / 0.05);
+}
+
+.border-emerald-500 {
+ --tw-border-opacity: 1;
+ border-color: rgb(16 185 129 / var(--tw-border-opacity, 1));
+}
+
+.border-red-500\/20 {
+ border-color: rgb(239 68 68 / 0.2);
+}
+
+.border-white\/10 {
+ border-color: rgb(255 255 255 / 0.1);
+}
+
+.border-white\/30 {
+ border-color: rgb(255 255 255 / 0.3);
+}
+
+.border-white\/5 {
+ border-color: rgb(255 255 255 / 0.05);
+}
+
+.bg-amber-500\/10 {
+ background-color: rgb(245 158 11 / 0.1);
+}
+
+.bg-background {
+ background-color: var(--background);
+}
+
+.bg-black\/5 {
+ background-color: rgb(0 0 0 / 0.05);
+}
+
+.bg-black\/80 {
+ background-color: rgb(0 0 0 / 0.8);
+}
+
+.bg-blue-500\/10 {
+ background-color: rgb(59 130 246 / 0.1);
+}
+
+.bg-emerald-400 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1));
+}
+
+.bg-emerald-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
+}
+
+.bg-green-500\/20 {
+ background-color: rgb(34 197 94 / 0.2);
+}
+
+.bg-purple-500\/10 {
+ background-color: rgb(168 85 247 / 0.1);
+}
+
+.bg-red-500\/10 {
+ background-color: rgb(239 68 68 / 0.1);
+}
+
+.bg-red-500\/20 {
+ background-color: rgb(239 68 68 / 0.2);
+}
+
+.bg-slate-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
+}
+
+.bg-transparent {
+ background-color: transparent;
+}
+
+.bg-white\/90 {
+ background-color: rgb(255 255 255 / 0.9);
+}
+
+.bg-\[url\(\'data\:image\/svg\+xml\;base64\2c PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI\+PGNpcmNsZSBjeD0iMSIgY3k9IjEiIHI9IjEiIGZpbGw9InJnYmEoMCwwLDAsMC4wNSkiLz48L3N2Zz4\=\'\)\] {
+ background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBjeD0iMSIgY3k9IjEiIHI9IjEiIGZpbGw9InJnYmEoMCwwLDAsMC4wNSkiLz48L3N2Zz4=');
+}
+
+.bg-gradient-to-br {
+ background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
+}
+
+.from-white\/10 {
+ --tw-gradient-from: rgb(255 255 255 / 0.1) var(--tw-gradient-from-position);
+ --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.to-transparent {
+ --tw-gradient-to: transparent 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-1 {
+ padding: 0.25rem;
+}
+
+.p-3 {
+ padding: 0.75rem;
+}
+
+.p-4 {
+ padding: 1rem;
+}
+
+.p-64 {
+ padding: 16rem;
+}
+
+.p-8 {
+ padding: 2rem;
+}
+
+.px-3 {
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+}
+
+.px-4 {
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+.py-0\.5 {
+ padding-top: 0.125rem;
+ padding-bottom: 0.125rem;
+}
+
+.py-1 {
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+}
+
+.py-3 {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+}
+
+.py-4 {
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+}
+
+.pr-10 {
+ padding-right: 2.5rem;
+}
+
+.pt-2 {
+ padding-top: 0.5rem;
+}
+
+.pt-36 {
+ padding-top: 9rem;
+}
+
+.pt-8 {
+ padding-top: 2rem;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.font-mono {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+}
+
+.text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem;
+}
+
+.text-\[10px\] {
+ font-size: 10px;
+}
+
+.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-medium {
+ font-weight: 500;
+}
+
+.font-semibold {
+ font-weight: 600;
+}
+
+.uppercase {
+ text-transform: uppercase;
+}
+
+.leading-relaxed {
+ line-height: 1.625;
+}
+
+.tracking-tight {
+ letter-spacing: -0.025em;
+}
+
+.tracking-wider {
+ letter-spacing: 0.05em;
+}
+
+.tracking-widest {
+ letter-spacing: 0.1em;
+}
+
+.text-accents-5 {
+ color: var(--accents-5);
+}
+
+.text-amber-500 {
+ --tw-text-opacity: 1;
+ color: rgb(245 158 11 / var(--tw-text-opacity, 1));
+}
+
+.text-black {
+ --tw-text-opacity: 1;
+ color: rgb(0 0 0 / var(--tw-text-opacity, 1));
+}
+
+.text-blue-500 {
+ --tw-text-opacity: 1;
+ color: rgb(59 130 246 / var(--tw-text-opacity, 1));
+}
+
+.text-cyan-400 {
+ --tw-text-opacity: 1;
+ color: rgb(34 211 238 / var(--tw-text-opacity, 1));
+}
+
+.text-emerald-400 {
+ --tw-text-opacity: 1;
+ color: rgb(52 211 153 / var(--tw-text-opacity, 1));
+}
+
+.text-emerald-500 {
+ --tw-text-opacity: 1;
+ color: rgb(16 185 129 / var(--tw-text-opacity, 1));
+}
+
+.text-emerald-600 {
+ --tw-text-opacity: 1;
+ color: rgb(5 150 105 / var(--tw-text-opacity, 1));
+}
+
+.text-foreground {
+ color: var(--foreground);
+}
+
+.text-green-500 {
+ --tw-text-opacity: 1;
+ color: rgb(34 197 94 / var(--tw-text-opacity, 1));
+}
+
+.text-red-400 {
+ --tw-text-opacity: 1;
+ color: rgb(248 113 113 / var(--tw-text-opacity, 1));
+}
+
+.text-red-500 {
+ --tw-text-opacity: 1;
+ color: rgb(239 68 68 / var(--tw-text-opacity, 1));
+}
+
+.text-slate-300 {
+ --tw-text-opacity: 1;
+ color: rgb(203 213 225 / var(--tw-text-opacity, 1));
+}
+
+.text-slate-400 {
+ --tw-text-opacity: 1;
+ color: rgb(148 163 184 / var(--tw-text-opacity, 1));
+}
+
+.text-slate-500 {
+ --tw-text-opacity: 1;
+ color: rgb(100 116 139 / var(--tw-text-opacity, 1));
+}
+
+.text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.underline {
+ text-decoration-line: underline;
+}
+
+.antialiased {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.opacity-0 {
+ opacity: 0;
+}
+
+.opacity-100 {
+ opacity: 1;
+}
+
+.opacity-25 {
+ opacity: 0.25;
+}
+
+.opacity-75 {
+ opacity: 0.75;
+}
+
+.shadow-inner {
+ --tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
+ --tw-shadow-colored: inset 0 2px 4px 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);
+}
+
+.shadow-lg {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.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);
+}
+
+.shadow-xl {
+ --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-red-500\/5 {
+ --tw-shadow-color: rgb(239 68 68 / 0.05);
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.outline {
+ outline-style: solid;
+}
+
+.ring-1 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-black\/5 {
+ --tw-ring-color: rgb(0 0 0 / 0.05);
+}
+
+.blur-\[100px\] {
+ --tw-blur: blur(100px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-\[120px\] {
+ --tw-blur: blur(120px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-lg {
+ --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.invert {
+ --tw-invert: invert(100%);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.filter {
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.backdrop-blur-md {
+ --tw-backdrop-blur: blur(12px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-sm {
+ --tw-backdrop-blur: blur(4px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-xl {
+ --tw-backdrop-blur: blur(24px);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.transition {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+
+.transition-all {
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+
+.transition-colors {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+
+.transition-transform {
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+
+.duration-100 {
+ transition-duration: 100ms;
+}
+
+.duration-1000 {
+ transition-duration: 1000ms;
+}
+
+.duration-500 {
+ transition-duration: 500ms;
+}
+
+.ease-out {
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+}
+
+.\[mask-image\:linear-gradient\(to_bottom\2c white\2c transparent\)\] {
+ -webkit-mask-image: linear-gradient(to bottom,white,transparent);
+ mask-image: linear-gradient(to bottom,white,transparent);
+}
+
+.selection\:text-white *::-moz-selection {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.selection\:text-white *::selection {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.selection\:text-white::-moz-selection {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.selection\:text-white::selection {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.hover\:bg-black\/10:hover {
+ background-color: rgb(0 0 0 / 0.1);
+}
+
+.hover\:bg-black\/5:hover {
+ background-color: rgb(0 0 0 / 0.05);
+}
+
+.hover\:bg-slate-200:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(226 232 240 / var(--tw-bg-opacity, 1));
+}
+
+.hover\:bg-white\/5:hover {
+ background-color: rgb(255 255 255 / 0.05);
+}
+
+.hover\:text-foreground:hover {
+ color: var(--foreground);
+}
+
+.hover\:text-slate-700:hover {
+ --tw-text-opacity: 1;
+ color: rgb(51 65 85 / var(--tw-text-opacity, 1));
+}
+
+.hover\:text-white:hover {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.hover\:underline:hover {
+ text-decoration-line: underline;
+}
+
+.focus\:ring-foreground:focus {
+ --tw-ring-color: var(--foreground);
+}
+
+.group:hover .group-hover\:text-foreground {
+ color: var(--foreground);
+}
+
+.dark\:border-white\/10:is(.dark *) {
+ border-color: rgb(255 255 255 / 0.1);
+}
+
+.dark\:bg-black\/80:is(.dark *) {
+ background-color: rgb(0 0 0 / 0.8);
+}
+
+.dark\:bg-blue-500\/5:is(.dark *) {
+ background-color: rgb(59 130 246 / 0.05);
+}
+
+.dark\:bg-purple-500\/5:is(.dark *) {
+ background-color: rgb(168 85 247 / 0.05);
+}
+
+.dark\:bg-white\/10:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+.dark\:bg-white\/5:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.05);
+}
+
+.dark\:bg-\[url\(\'data\:image\/svg\+xml\;base64\2c PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI\+PGNpcmNsZSBjeD0iMSIgY3k9IjEiIHI9IjEiIGZpbGw9InJnYmEoMjU1LDI1NSwyNTUsMC4wNSkiLz48L3N2Zz4\=\'\)\]:is(.dark *) {
+ background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBjeD0iMSIgY3k9IjEiIHI9IjEiIGZpbGw9InJnYmEoMjU1LDI1NSwyNTUsMC4wNSkiLz48L3N2Zz4=');
+}
+
+.dark\:text-blue-400:is(.dark *) {
+ --tw-text-opacity: 1;
+ color: rgb(96 165 250 / var(--tw-text-opacity, 1));
+}
+
+.dark\:text-emerald-400:is(.dark *) {
+ --tw-text-opacity: 1;
+ color: rgb(52 211 153 / var(--tw-text-opacity, 1));
+}
+
+.dark\:hover\:bg-white\/10:hover:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.1);
+}
+
+.dark\:hover\:bg-white\/20:hover:is(.dark *) {
+ background-color: rgb(255 255 255 / 0.2);
+}
diff --git a/theme/assets/img/logo-m-dark.svg b/theme/assets/img/logo-m-dark.svg
new file mode 100644
index 0000000..0df2041
--- /dev/null
+++ b/theme/assets/img/logo-m-dark.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/theme/assets/img/logo-m.svg b/theme/assets/img/logo-m.svg
new file mode 100644
index 0000000..ff08b11
--- /dev/null
+++ b/theme/assets/img/logo-m.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/theme/assets/js/alpine.min.js b/theme/assets/js/alpine.min.js
new file mode 100644
index 0000000..a3be81c
--- /dev/null
+++ b/theme/assets/js/alpine.min.js
@@ -0,0 +1,5 @@
+(()=>{var nt=!1,it=!1,W=[],ot=-1;function Ut(e){Rn(e)}function Rn(e){W.includes(e)||W.push(e),Mn()}function Wt(e){let t=W.indexOf(e);t!==-1&&t>ot&&W.splice(t,1)}function Mn(){!it&&!nt&&(nt=!0,queueMicrotask(Nn))}function Nn(){nt=!1,it=!0;for(let e=0;ee.effect(t,{scheduler:r=>{st?Ut(r):r()}}),at=e.raw}function ct(e){N=e}function Yt(e){let t=()=>{};return[n=>{let i=N(n);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),$(i))},i},()=>{t()}]}function ve(e,t){let r=!0,n,i=N(()=>{let o=e();JSON.stringify(o),r?n=o:queueMicrotask(()=>{t(o,n),n=o}),r=!1});return()=>$(i)}var Xt=[],Zt=[],Qt=[];function er(e){Qt.push(e)}function te(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,Zt.push(t))}function Ae(e){Xt.push(e)}function Oe(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function lt(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(i=>i()),delete e._x_attributeCleanups[r])})}function tr(e){for(e._x_effects?.forEach(Wt);e._x_cleanups?.length;)e._x_cleanups.pop()()}var ut=new MutationObserver(mt),ft=!1;function ue(){ut.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),ft=!0}function dt(){kn(),ut.disconnect(),ft=!1}var le=[];function kn(){let e=ut.takeRecords();le.push(()=>e.length>0&&mt(e));let t=le.length;queueMicrotask(()=>{if(le.length===t)for(;le.length>0;)le.shift()()})}function m(e){if(!ft)return e();dt();let t=e();return ue(),t}var pt=!1,Se=[];function rr(){pt=!0}function nr(){pt=!1,mt(Se),Se=[]}function mt(e){if(pt){Se=Se.concat(e);return}let t=[],r=new Set,n=new Map,i=new Map;for(let o=0;o{s.nodeType===1&&s._x_marker&&r.add(s)}),e[o].addedNodes.forEach(s=>{if(s.nodeType===1){if(r.has(s)){r.delete(s);return}s._x_marker||t.push(s)}})),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,c=e[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(u(),l()):u()}i.forEach((o,s)=>{lt(s,o)}),n.forEach((o,s)=>{Xt.forEach(a=>a(s,o))});for(let o of r)t.some(s=>s.contains(o))||Zt.forEach(s=>s(o));for(let o of t)o.isConnected&&Qt.forEach(s=>s(o));t=null,r=null,n=null,i=null}function Ce(e){return z(B(e))}function k(e,t,r){return e._x_dataStack=[t,...B(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function B(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?B(e.host):e.parentNode?B(e.parentNode):[]}function z(e){return new Proxy({objects:e},Dn)}var Dn={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(r=>Object.prototype.hasOwnProperty.call(r,t)||Reflect.has(r,t))},get({objects:e},t,r){return t=="toJSON"?Pn:Reflect.get(e.find(n=>Reflect.has(n,t))||{},t,r)},set({objects:e},t,r,n){let i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o?.set&&o?.get?o.set.call(n,r)||!0:Reflect.set(i,t,r)}};function Pn(){return Reflect.ownKeys(this).reduce((t,r)=>(t[r]=Reflect.get(this,r),t),{})}function Te(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let c=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[o]=s.initialize(e,c,o):t(s)&&s!==n&&!(s instanceof Element)&&r(s,c)})};return r(e)}function Re(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,i,o){return e(this.initialValue,()=>In(n,i),s=>ht(n,i,s),i,o)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let i=r.initialize.bind(r);r.initialize=(o,s,a)=>{let c=n.initialize(o,s,a);return r.initialValue=c,i(o,s,a)}}else r.initialValue=n;return r}}function In(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function ht(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),ht(e[t[0]],t.slice(1),r)}}var ir={};function y(e,t){ir[e]=t}function fe(e,t){let r=Ln(t);return Object.entries(ir).forEach(([n,i])=>{Object.defineProperty(e,`$${n}`,{get(){return i(t,r)},enumerable:!1})}),e}function Ln(e){let[t,r]=_t(e),n={interceptor:Re,...t};return te(e,r),n}function or(e,t,r,...n){try{return r(...n)}catch(i){re(i,e,t)}}function re(e,t,r=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:r}),console.warn(`Alpine Expression Error: ${e.message}
+
+${r?'Expression: "'+r+`"
+
+`:""}`,t),setTimeout(()=>{throw e},0)}var Me=!0;function ke(e){let t=Me;Me=!1;let r=e();return Me=t,r}function R(e,t,r={}){let n;return x(e,t)(i=>n=i,r),n}function x(...e){return sr(...e)}var sr=xt;function ar(e){sr=e}function xt(e,t){let r={};fe(r,e);let n=[r,...B(e)],i=typeof t=="function"?$n(n,t):Fn(n,t,e);return or.bind(null,e,t,i)}function $n(e,t){return(r=()=>{},{scope:n={},params:i=[]}={})=>{let o=t.apply(z([n,...e]),i);Ne(r,o)}}var gt={};function jn(e,t){if(gt[e])return gt[e];let r=Object.getPrototypeOf(async function(){}).constructor,n=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,o=(()=>{try{let s=new r(["__self","scope"],`with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${e}`}),s}catch(s){return re(s,t,e),Promise.resolve()}})();return gt[e]=o,o}function Fn(e,t,r){let n=jn(t,r);return(i=()=>{},{scope:o={},params:s=[]}={})=>{n.result=void 0,n.finished=!1;let a=z([o,...e]);if(typeof n=="function"){let c=n(n,a).catch(l=>re(l,r,t));n.finished?(Ne(i,n.result,a,s,r),n.result=void 0):c.then(l=>{Ne(i,l,a,s,r)}).catch(l=>re(l,r,t)).finally(()=>n.result=void 0)}}}function Ne(e,t,r,n,i){if(Me&&typeof t=="function"){let o=t.apply(r,n);o instanceof Promise?o.then(s=>Ne(e,s,r,n)).catch(s=>re(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var wt="x-";function C(e=""){return wt+e}function cr(e){wt=e}var De={};function d(e,t){return De[e]=t,{before(r){if(!De[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`);return}let n=G.indexOf(r);G.splice(n>=0?n:G.indexOf("DEFAULT"),0,e)}}}function lr(e){return Object.keys(De).includes(e)}function pe(e,t,r){if(t=Array.from(t),e._x_virtualDirectives){let o=Object.entries(e._x_virtualDirectives).map(([a,c])=>({name:a,value:c})),s=Et(o);o=o.map(a=>s.find(c=>c.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(o)}let n={};return t.map(dr((o,s)=>n[o]=s)).filter(mr).map(zn(n,r)).sort(Kn).map(o=>Bn(e,o))}function Et(e){return Array.from(e).map(dr()).filter(t=>!mr(t))}var yt=!1,de=new Map,ur=Symbol();function fr(e){yt=!0;let t=Symbol();ur=t,de.set(t,[]);let r=()=>{for(;de.get(t).length;)de.get(t).shift()();de.delete(t)},n=()=>{yt=!1,r()};e(r),n()}function _t(e){let t=[],r=a=>t.push(a),[n,i]=Yt(e);return t.push(i),[{Alpine:K,effect:n,cleanup:r,evaluateLater:x.bind(x,e),evaluate:R.bind(R,e)},()=>t.forEach(a=>a())]}function Bn(e,t){let r=()=>{},n=De[t.type]||r,[i,o]=_t(e);Oe(e,t.original,o);let s=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,i),n=n.bind(n,e,t,i),yt?de.get(ur).push(n):n())};return s.runCleanups=o,s}var Pe=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),Ie=e=>e;function dr(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:i}=pr.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var pr=[];function ne(e){pr.push(e)}function mr({name:e}){return hr().test(e)}var hr=()=>new RegExp(`^${wt}([^:^.]+)\\b`);function zn(e,t){return({name:r,value:n})=>{let i=r.match(hr()),o=r.match(/:([a-zA-Z0-9\-_:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var bt="DEFAULT",G=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",bt,"teleport"];function Kn(e,t){let r=G.indexOf(e.type)===-1?bt:e.type,n=G.indexOf(t.type)===-1?bt:t.type;return G.indexOf(r)-G.indexOf(n)}function J(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function D(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>D(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)D(n,t,!1),n=n.nextElementSibling}function E(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var _r=!1;function gr(){_r&&E("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),_r=!0,document.body||E("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `
+
+
+
+
+ Mivo Hotspot - Error
+
+
+
+
+
+
+
+
+
+
+