diff --git a/.github/workflows/deploy-docs-staging.yaml b/.github/workflows/deploy-docs-staging.yaml new file mode 100644 index 00000000..0142e235 --- /dev/null +++ b/.github/workflows/deploy-docs-staging.yaml @@ -0,0 +1,54 @@ +name: Deploy MkDocs Site to S3 + +on: + push: + branches: + - dev # Change this to your deployment branch + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout source code + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: Install Python dependencies + run: | + pip install -r requirements.txt + + - name: Install AWS CLI + run: | + if ! command -v aws &> /dev/null; then + echo "AWS CLI not found. Installing..." + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + sudo ./aws/install + else + echo "AWS CLI already installed." + fi + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-2 # or your preferred region + + - name: Build MkDocs site + run: | + rm -rf site + mkdocs build + + - name: Deploy to S3 + run: | + aws s3 sync ./site s3://openobserve-website-staging/docs --exclude=".git/*" + + - name: Invalidate CloudFront cache + run: | + aws cloudfront create-invalidation --distribution-id E2GZJM0TJIDFRM --paths "/docs/*" \ No newline at end of file diff --git a/docs/.pages b/docs/.pages index 1ae56698..de9b90c0 100644 --- a/docs/.pages +++ b/docs/.pages @@ -16,7 +16,7 @@ nav: - API Reference: api - Ingestion: ingestion - Integrations: integration -- Migration: migration +- Migration: migration.md - Monitoring OpenObserve: expose-metrics.md - Telemetry: telemetry.md - zPlane: zplane.md diff --git a/docs/assets/Support.svg b/docs/assets/Support.svg new file mode 100644 index 00000000..aefcc434 --- /dev/null +++ b/docs/assets/Support.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/assets/close.svg b/docs/assets/close.svg new file mode 100644 index 00000000..d903e5ce --- /dev/null +++ b/docs/assets/close.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/community-support/community.svg b/docs/assets/community-support/community.svg new file mode 100644 index 00000000..d02ac502 --- /dev/null +++ b/docs/assets/community-support/community.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/assets/community-support/contact-dark.svg b/docs/assets/community-support/contact-dark.svg new file mode 100644 index 00000000..ca191a03 --- /dev/null +++ b/docs/assets/community-support/contact-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/community-support/contact-white.svg b/docs/assets/community-support/contact-white.svg new file mode 100644 index 00000000..bb747ffa --- /dev/null +++ b/docs/assets/community-support/contact-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/community-support/github-icon-2.svg b/docs/assets/community-support/github-icon-2.svg new file mode 100644 index 00000000..2a528821 --- /dev/null +++ b/docs/assets/community-support/github-icon-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/community-support/resources.svg b/docs/assets/community-support/resources.svg new file mode 100644 index 00000000..aa8b71be --- /dev/null +++ b/docs/assets/community-support/resources.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/assets/docker-4.svg b/docs/assets/docker-4.svg new file mode 100644 index 00000000..2e59ee72 --- /dev/null +++ b/docs/assets/docker-4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/docs-dark.svg b/docs/assets/docs-dark.svg new file mode 100644 index 00000000..133d03f8 --- /dev/null +++ b/docs/assets/docs-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/docs-light.svg b/docs/assets/docs-light.svg new file mode 100644 index 00000000..e4eee46f --- /dev/null +++ b/docs/assets/docs-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/download.svg b/docs/assets/download.svg new file mode 100644 index 00000000..be006c2e --- /dev/null +++ b/docs/assets/download.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/assets/github-dark.svg b/docs/assets/github-dark.svg new file mode 100644 index 00000000..bfab3a80 --- /dev/null +++ b/docs/assets/github-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/assets/github_White.svg b/docs/assets/github_White.svg new file mode 100644 index 00000000..505346aa --- /dev/null +++ b/docs/assets/github_White.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/grafana.svg b/docs/assets/grafana.svg new file mode 100644 index 00000000..7dd09038 --- /dev/null +++ b/docs/assets/grafana.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/linkdin-icon.svg b/docs/assets/linkdin-icon.svg new file mode 100644 index 00000000..9914eb87 --- /dev/null +++ b/docs/assets/linkdin-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/assets/logo_horizontal.svg b/docs/assets/logo_horizontal.svg new file mode 100644 index 00000000..83d63dbd --- /dev/null +++ b/docs/assets/logo_horizontal.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/moon.svg b/docs/assets/moon.svg new file mode 100644 index 00000000..6bd2db16 --- /dev/null +++ b/docs/assets/moon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/assets/navmenu.svg b/docs/assets/navmenu.svg new file mode 100644 index 00000000..076f1d20 --- /dev/null +++ b/docs/assets/navmenu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/o2-logo-readme.svg b/docs/assets/o2-logo-readme.svg new file mode 100644 index 00000000..e0a71dfb --- /dev/null +++ b/docs/assets/o2-logo-readme.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/popular-integration/aws-dark.svg b/docs/assets/popular-integration/aws-dark.svg new file mode 100644 index 00000000..3f47b716 --- /dev/null +++ b/docs/assets/popular-integration/aws-dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/assets/popular-integration/aws.svg b/docs/assets/popular-integration/aws.svg new file mode 100644 index 00000000..c30fa007 --- /dev/null +++ b/docs/assets/popular-integration/aws.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/assets/popular-integration/db-dark.svg b/docs/assets/popular-integration/db-dark.svg new file mode 100644 index 00000000..a9ac7873 --- /dev/null +++ b/docs/assets/popular-integration/db-dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/assets/popular-integration/db.svg b/docs/assets/popular-integration/db.svg new file mode 100644 index 00000000..1dc91b80 --- /dev/null +++ b/docs/assets/popular-integration/db.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/assets/popular-integration/devops-2 1.svg b/docs/assets/popular-integration/devops-2 1.svg new file mode 100644 index 00000000..b61bd38b --- /dev/null +++ b/docs/assets/popular-integration/devops-2 1.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/popular-integration/kubernets.svg b/docs/assets/popular-integration/kubernets.svg new file mode 100644 index 00000000..97cd6bc4 --- /dev/null +++ b/docs/assets/popular-integration/kubernets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/popular-integration/linux.svg b/docs/assets/popular-integration/linux.svg new file mode 100644 index 00000000..9a543dc9 --- /dev/null +++ b/docs/assets/popular-integration/linux.svg @@ -0,0 +1,1726 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/popular-integration/nginx.svg b/docs/assets/popular-integration/nginx.svg new file mode 100644 index 00000000..49ac842a --- /dev/null +++ b/docs/assets/popular-integration/nginx.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/assets/popular-integration/windows.svg b/docs/assets/popular-integration/windows.svg new file mode 100644 index 00000000..41f42183 --- /dev/null +++ b/docs/assets/popular-integration/windows.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/assets/prometheus.svg b/docs/assets/prometheus.svg new file mode 100644 index 00000000..4c444886 --- /dev/null +++ b/docs/assets/prometheus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/slack-icon.svg b/docs/assets/slack-icon.svg new file mode 100644 index 00000000..0ce81ac1 --- /dev/null +++ b/docs/assets/slack-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/assets/soc.webp b/docs/assets/soc.webp new file mode 100644 index 00000000..bad274e9 Binary files /dev/null and b/docs/assets/soc.webp differ diff --git a/docs/assets/submenu-icon.svg b/docs/assets/submenu-icon.svg new file mode 100644 index 00000000..64e46f2a --- /dev/null +++ b/docs/assets/submenu-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/sun.svg b/docs/assets/sun.svg new file mode 100644 index 00000000..4d5a9d74 --- /dev/null +++ b/docs/assets/sun.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/assets/twitter-icon.svg b/docs/assets/twitter-icon.svg new file mode 100644 index 00000000..5487ae47 --- /dev/null +++ b/docs/assets/twitter-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/assets/user-guides/Log Search.svg b/docs/assets/user-guides/Log Search.svg new file mode 100644 index 00000000..0020f0b4 --- /dev/null +++ b/docs/assets/user-guides/Log Search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/assets/user-guides/action.svg b/docs/assets/user-guides/action.svg new file mode 100644 index 00000000..eb53db40 --- /dev/null +++ b/docs/assets/user-guides/action.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/user-guides/alerts.svg b/docs/assets/user-guides/alerts.svg new file mode 100644 index 00000000..f879809f --- /dev/null +++ b/docs/assets/user-guides/alerts.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/user-guides/dashboard.svg b/docs/assets/user-guides/dashboard.svg new file mode 100644 index 00000000..b9058bbd --- /dev/null +++ b/docs/assets/user-guides/dashboard.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/assets/user-guides/env-variable.svg b/docs/assets/user-guides/env-variable.svg new file mode 100644 index 00000000..b676b036 --- /dev/null +++ b/docs/assets/user-guides/env-variable.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/user-guides/iam.svg b/docs/assets/user-guides/iam.svg new file mode 100644 index 00000000..800ba8ab --- /dev/null +++ b/docs/assets/user-guides/iam.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/user-guides/ingestion.svg b/docs/assets/user-guides/ingestion.svg new file mode 100644 index 00000000..d35995f8 --- /dev/null +++ b/docs/assets/user-guides/ingestion.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/user-guides/pipeline.svg b/docs/assets/user-guides/pipeline.svg new file mode 100644 index 00000000..adae6ace --- /dev/null +++ b/docs/assets/user-guides/pipeline.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/user-guides/rum.svg b/docs/assets/user-guides/rum.svg new file mode 100644 index 00000000..596993ab --- /dev/null +++ b/docs/assets/user-guides/rum.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/user-guides/status-up.svg b/docs/assets/user-guides/status-up.svg new file mode 100644 index 00000000..4ec1ea95 --- /dev/null +++ b/docs/assets/user-guides/status-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/user-guides/storage-management.svg b/docs/assets/user-guides/storage-management.svg new file mode 100644 index 00000000..544befd8 --- /dev/null +++ b/docs/assets/user-guides/storage-management.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/assets/user-guides/stream.svg b/docs/assets/user-guides/stream.svg new file mode 100644 index 00000000..4e71551c --- /dev/null +++ b/docs/assets/user-guides/stream.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/assets/view.svg b/docs/assets/view.svg new file mode 100644 index 00000000..b104f4de --- /dev/null +++ b/docs/assets/view.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/assets/youtube-icon.svg b/docs/assets/youtube-icon.svg new file mode 100644 index 00000000..c7a145ae --- /dev/null +++ b/docs/assets/youtube-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/index.md b/docs/index.md index 67269954..a8b25fab 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,8 +1,7 @@ --- -description: >- - OpenObserve Technical Documentation--cloud-native observability for logs, - metrics, and traces +template: /partials/index.html --- + # OpenObserve: Introduction ## What is OpenObserve? diff --git a/docs/js/search-close-minimal.js b/docs/js/search-close-minimal.js new file mode 100644 index 00000000..d5e44bd1 --- /dev/null +++ b/docs/js/search-close-minimal.js @@ -0,0 +1,72 @@ +/** + * Minimal Search Close Functionality + * Adds click handler to the close icon in the search input + */ + +document.addEventListener("DOMContentLoaded", function () { + // Add click handler to search input when close icon area is clicked + document.addEventListener("click", function (e) { + const searchInput = document.querySelector(".md-search__input"); + if (!searchInput) return; + + // Check if click is in the close icon area (right side of input) + const inputRect = searchInput.getBoundingClientRect(); + const clickX = e.clientX; + const closeIconArea = inputRect.right - 50; // 50px from the right edge + + if ( + clickX >= closeIconArea && + clickX <= inputRect.right && + e.clientY >= inputRect.top && + e.clientY <= inputRect.bottom && + (searchInput.value !== "" || searchInput === document.activeElement) + ) { + // Clear the search + searchInput.value = ""; + searchInput.blur(); + + // Close search overlay + const searchContainer = document.querySelector(".md-search"); + if (searchContainer) { + searchContainer.classList.remove("md-search--active"); + } + + // Close mobile search + const searchToggle = document.querySelector("#__search"); + if (searchToggle && searchToggle.checked) { + searchToggle.checked = false; + } + + // Trigger input event to clear results + searchInput.dispatchEvent(new Event("input", { bubbles: true })); + + e.preventDefault(); + e.stopPropagation(); + } + }); + + // Add escape key handler + document.addEventListener("keydown", function (e) { + if (e.key === "Escape") { + const searchInput = document.querySelector(".md-search__input"); + const searchContainer = document.querySelector(".md-search"); + + if ( + searchInput && + searchContainer && + searchContainer.classList.contains("md-search--active") + ) { + searchInput.value = ""; + searchInput.blur(); + searchContainer.classList.remove("md-search--active"); + + const searchToggle = document.querySelector("#__search"); + if (searchToggle && searchToggle.checked) { + searchToggle.checked = false; + } + + searchInput.dispatchEvent(new Event("input", { bubbles: true })); + } + } + }); +}); diff --git a/docs/js/search-tracking.js b/docs/js/search-tracking.js new file mode 100644 index 00000000..b2f556bb --- /dev/null +++ b/docs/js/search-tracking.js @@ -0,0 +1,508 @@ +/** + * MkDocs Search Tracking Analytics + * Simple implementation matching Vue.js reference exactly + */ + +(function () { + "use strict"; + + // Configuration - matching Vue.js reference + const ANALYTICS_CONFIG = { + API_ENDPOINT: + "https://introspection.dev.zinclabs.dev/api/328BSXphtxxMrgN41UUYA7Ll9ie/website_search/_json", + USERNAME: "vaidehi@openobserve.ai", + PASSWORD: "vaidehikiaratechx", + ENABLED: true, + }; + + // Tracking state - matching Vue.js reference variables + let originatingPage = ""; // page path where search started + let navigationUrl = ""; // full URL + let pageType = "unknown"; // docs/blog/marketing + let lastSearchQuery = ""; + let totalResults = 0; + + /** + * Check if analytics is disabled via cookie + */ + function isAnalyticsDisabled() { + try { + return ( + document.cookie + .split("; ") + .find((row) => row.startsWith("internal_user=")) + ?.split("=")[1] === "1" + ); + } catch { + return false; + } + } + + /** + * Infer page type from pathname - matching Vue.js reference + */ + function inferPageType(pathname) { + try { + if (/\/docs(\/|$)|\/documentation(\/|$)/i.test(pathname)) return "docs"; + if (/\/guides?(\/|$)/i.test(pathname)) return "docs"; + if (/\/blog(\/|$)/i.test(pathname)) return "blog"; + if (/\/articles(\/|$)/i.test(pathname)) return "articles"; + return "marketing"; + } catch { + return "unknown"; + } + } + + /** + * Initialize tracking context when page loads - enhanced to match Vue.js reference + */ + function initializeContext() { + try { + const urlObj = new URL(window.location.href); + originatingPage = urlObj.pathname; // page path + navigationUrl = urlObj.href; // full URL + pageType = inferPageType(urlObj.pathname); // infer docs/blog/marketing + } catch (e) { + console.warn("Failed to initialize search tracking context:", e); + originatingPage = ""; + navigationUrl = ""; + pageType = "unknown"; + } + } + + /** + * Send analytics event - enhanced to match Vue.js reference exactly + */ + async function sendAnalyticsEvent(eventType, payload) { + // Check if analytics is disabled for internal users + if (isAnalyticsDisabled()) { + console.log( + "Analytics disabled for internal user, skipping:", + eventType, + payload + ); + return; + } + + if (!ANALYTICS_CONFIG.ENABLED || !ANALYTICS_CONFIG.API_ENDPOINT) { + console.log("Search Analytics (Demo Mode):", eventType, payload); + return; + } + + try { + const now = new Date(); + await fetch(ANALYTICS_CONFIG.API_ENDPOINT, { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: + "Basic " + + btoa(`${ANALYTICS_CONFIG.USERNAME}:${ANALYTICS_CONFIG.PASSWORD}`), + }, + body: JSON.stringify({ + url: navigationUrl, // full URL + path: originatingPage, // where search started + domain: window.location.hostname, + type: eventType, // search / result_click + // pageType, // docs / blog / marketing (uncomment if needed) + ...payload, + }), + }); + + console.log("Search analytics event sent:", eventType, payload); + } catch (error) { + console.warn("Analytics API error:", error); + } + } + + /** + * Track search query - enhanced to match Vue.js reference exactly + */ + function trackSearchQuery(query, resultCount = 0) { + if (!query || query.trim() === "") return; + + const _q = query.trim(); + lastSearchQuery = _q; + totalResults = resultCount; + + // Send search event exactly like Vue.js reference + sendAnalyticsEvent("search", { + search_query: _q, + result_count: resultCount, + }); + + // Also send analytics for zero results (like Vue.js reference) + if (resultCount === 0) { + sendAnalyticsEvent("search", { + search_query: _q, + result_count: resultCount, + }); + } + } + + /** + * Track result click - enhanced to match Vue.js reference exactly + */ + function trackResultClick(resultUrl, resultTitle, resultRank) { + const _q = lastSearchQuery.trim(); + + console.log("trackResultClick called:", { + resultUrl, + resultTitle, + resultRank, + lastSearchQuery: _q, + totalResults, + }); + + // Send result_click event exactly like Vue.js reference + sendAnalyticsEvent("result_click", { + result_url: resultUrl, + result_rank: resultRank, + result_title: resultTitle, + search_query: _q, + result_count: totalResults, + }); + } + + /** + * Track page feedback (thumbs up/down) - new functionality + */ + function trackPageFeedback(feedbackValue, pageUrl, pageTitle) { + console.log("trackPageFeedback called:", { + feedbackValue, + pageUrl, + pageTitle, + }); + + // Send feedback event to same analytics endpoint + sendAnalyticsEvent("reaction", { + feedback_value: feedbackValue === 1 ? "like" : "dislike", // 1 for thumbs up, 0 for thumbs down + // feedback_type: "reaction", + page_url: pageUrl, + }); + } + + /** + * Get result count from search results + */ + function getSearchResultCount() { + const results = document.querySelectorAll(".md-search-result__item"); + return results.length; + } + + /** + * Extract result information from clicked element + */ + function extractResultInfo(clickedElement) { + // Find the search result item - try multiple selectors + let resultItem = + clickedElement.closest(".md-search-result__item") || + clickedElement.closest(".md-search-result") || + clickedElement.closest("[data-md-component='search-result']"); + + if (!resultItem) { + console.warn("Could not find result item for:", clickedElement); + return null; + } + + // Get result URL - try multiple ways + let linkElement = + resultItem.querySelector("a") || + clickedElement.querySelector("a") || + clickedElement; + if (clickedElement.tagName === "A") { + linkElement = clickedElement; + } + + const resultUrl = linkElement && linkElement.href ? linkElement.href : ""; + + // Get result title - try multiple selectors + let titleElement = + resultItem.querySelector(".md-search-result__title") || + resultItem.querySelector("[data-md-component='search-result-title']") || + resultItem.querySelector("h1, h2, h3, h4, h5, h6") || + linkElement; + + const resultTitle = titleElement + ? titleElement.textContent.trim() + : "Unknown"; + + // Calculate result rank - try multiple selectors for all results + const allResults = document.querySelectorAll( + ".md-search-result__item, .md-search-result, [data-md-component='search-result']" + ); + const resultRank = Array.from(allResults).indexOf(resultItem) + 1; + + console.log("Extracted result info:", { + url: resultUrl, + title: resultTitle, + rank: resultRank, + resultItem: resultItem, + linkElement: linkElement, + titleElement: titleElement, + }); + + return { + url: resultUrl, + title: resultTitle, + rank: resultRank, + }; + } + + /** + * Initialize search tracking - enhanced to match Vue.js reference behavior + */ + function initializeSearchTracking() { + let searchTimeout; + let lastTrackedQuery = ""; + + console.log("Initializing MkDocs search tracking..."); + + // Update context when search becomes active (like Vue.js modal opening) + const updateContextOnSearchActivation = () => { + try { + const urlObj = new URL(window.location.href); + originatingPage = urlObj.pathname; // page path where search started + navigationUrl = urlObj.href; // full URL + pageType = inferPageType(urlObj.pathname); // infer docs/blog/marketing + } catch { + originatingPage = ""; + navigationUrl = ""; + pageType = "unknown"; + } + }; + + // Track search input changes with enhanced debouncing + document.addEventListener("input", function (e) { + const searchInput = e.target; + + // Check if this is the MkDocs search input + if (!searchInput.matches(".md-search__input")) return; + + // Update context when user starts searching + updateContextOnSearchActivation(); + + const query = searchInput.value.trim(); + + // Clear existing timeout + if (searchTimeout) { + clearTimeout(searchTimeout); + } + + // Debounce search tracking (500ms like Vue.js reference) + if (query && query !== lastTrackedQuery) { + searchTimeout = setTimeout(() => { + const resultCount = getSearchResultCount(); + trackSearchQuery(query, resultCount); + lastTrackedQuery = query; + }, 500); // Matching Vue.js 500ms debounce + } + + // Clear tracking when input is cleared + if (!query && lastTrackedQuery) { + lastTrackedQuery = ""; + lastSearchQuery = ""; + totalResults = 0; + } + }); + + // Track search result clicks with enhanced logic + document.addEventListener("click", function (e) { + console.log("Click detected on:", e.target); + + // Multiple ways to detect search result clicks + const isSearchResult = + e.target.closest(".md-search-result__item") || + e.target.closest(".md-search-result") || + e.target.closest("[data-md-component='search-result']"); + + // Also check if clicked element has search-related classes + const isSearchLink = + e.target.matches("a") && + (e.target.closest(".md-search-result__item") || + e.target.closest(".md-search-result") || + (e.target.href && document.querySelector(".md-search--active"))); + + if (!isSearchResult && !isSearchLink) { + console.log("Not a search result click, ignoring"); + return; + } + + console.log("Search result clicked!", { + isSearchResult: !!isSearchResult, + isSearchLink: !!isSearchLink, + targetElement: e.target, + closestResult: e.target.closest(".md-search-result__item"), + }); + + // Check if search is active (more lenient check) + const searchContainer = document.querySelector(".md-search"); + const searchInput = document.querySelector(".md-search__input"); + const hasSearchValue = searchInput && searchInput.value.trim().length > 0; + + if ( + !searchContainer || + (!searchContainer.classList.contains("md-search--active") && + !hasSearchValue) + ) { + console.log("Search not active and no search value, ignoring click"); + return; + } + + // Update context right before tracking click (ensure fresh data) + updateContextOnSearchActivation(); + + const resultInfo = extractResultInfo(e.target); + console.log("Result info extracted:", resultInfo); + + if (resultInfo && resultInfo.url) { + console.log("Calling trackResultClick with:", resultInfo); + trackResultClick(resultInfo.url, resultInfo.title, resultInfo.rank); + } else { + console.warn("Could not extract result info from clicked element"); + } + }); + + console.log("MkDocs search tracking initialized"); + } + + /** + * Initialize feedback tracking - new functionality for page feedback + */ + function initializeFeedbackTracking() { + console.log("Initializing MkDocs feedback tracking..."); + + // Track feedback button clicks + document.addEventListener("click", function (e) { + // Check if clicked element is a feedback button + const feedbackButton = e.target.closest(".md-feedback__icon"); + + if (!feedbackButton) { + return; + } + + console.log("Feedback button clicked:", feedbackButton); + + // Get feedback value from data-md-value attribute + const feedbackValue = feedbackButton.getAttribute("data-md-value"); + + if (feedbackValue === null) { + console.warn("No feedback value found on button"); + return; + } + + // Get current page information + const pageUrl = window.location.href; + const pageTitle = document.title || "Unknown Page"; + + // Convert feedback value to number + const feedbackValueNum = parseInt(feedbackValue, 10); + + console.log("Tracking feedback:", { + value: feedbackValueNum, + url: pageUrl, + title: pageTitle, + }); + + // Track the feedback + trackPageFeedback(feedbackValueNum, pageUrl, pageTitle); + }); + + console.log("MkDocs feedback tracking initialized"); + } + + /** + * Initialize when DOM is ready + */ + function init() { + initializeContext(); + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", function () { + initializeSearchTracking(); + initializeFeedbackTracking(); + }); + } else { + initializeSearchTracking(); + initializeFeedbackTracking(); + } + } + + // Start initialization + init(); + + // Expose for manual testing - enhanced interface + window.SearchTracking = { + updateConfig: function (newConfig) { + Object.assign(ANALYTICS_CONFIG, newConfig); + }, + getConfig: function () { + return { ...ANALYTICS_CONFIG }; + }, + getState: function () { + return { + originatingPage, + navigationUrl, + pageType, + lastSearchQuery, + totalResults, + }; + }, + sendEvent: sendAnalyticsEvent, + trackSearch: trackSearchQuery, + trackClick: trackResultClick, + trackFeedback: trackPageFeedback, + updateContext: function () { + initializeContext(); + }, + // Debug helpers + testClickDetection: function () { + const searchResults = document.querySelectorAll( + ".md-search-result__item, .md-search-result, [data-md-component='search-result']" + ); + console.log("Found search results:", searchResults); + return searchResults; + }, + testFeedbackDetection: function () { + const feedbackButtons = document.querySelectorAll(".md-feedback__icon"); + console.log("Found feedback buttons:", feedbackButtons); + return feedbackButtons; + }, + getCurrentSearchState: function () { + const searchContainer = document.querySelector(".md-search"); + const searchInput = document.querySelector(".md-search__input"); + const isActive = searchContainer?.classList.contains("md-search--active"); + const hasValue = searchInput?.value.trim().length > 0; + + return { + searchContainer: !!searchContainer, + isActive, + hasValue, + searchValue: searchInput?.value || "", + lastSearchQuery, + totalResults, + }; + }, + simulateResultClick: function (index = 0) { + const results = document.querySelectorAll( + ".md-search-result__item, .md-search-result" + ); + if (results[index]) { + const link = results[index].querySelector("a"); + if (link) { + console.log("Simulating click on:", link); + link.click(); + } + } + }, + simulateFeedbackClick: function (value = 1) { + const feedbackButton = document.querySelector( + `.md-feedback__icon[data-md-value="${value}"]` + ); + if (feedbackButton) { + console.log("Simulating feedback click:", feedbackButton); + feedbackButton.click(); + } + }, + }; +})(); diff --git a/docs/js/zinc.js b/docs/js/zinc.js index 544b76a5..fc140536 100644 --- a/docs/js/zinc.js +++ b/docs/js/zinc.js @@ -149,3 +149,71 @@ // Initial track when the script loads handleTracking(); })(); + +// Simple theme persistence - leverages MkDocs Material's built-in theme system +(function() { + // Apply saved theme immediately to prevent flash + function applySavedTheme() { + const savedScheme = localStorage.getItem('theme-preference'); + if (savedScheme) { + document.documentElement.setAttribute('data-md-color-scheme', savedScheme); + // Set the correct radio button as checked + var paletteForm = document.querySelector('form[data-md-component="palette"]'); + if (paletteForm) { + var inputs = paletteForm.querySelectorAll('input[name="__palette"]'); + inputs.forEach(function(input) { + if (input.getAttribute('data-md-color-scheme') === savedScheme) { + input.checked = true; + } else { + input.checked = false; + } + }); + } + } + } + + // Save theme preference when changed + function observeThemeChanges() { + // Attach change event to theme radio buttons + var paletteForm = document.querySelector('form[data-md-component="palette"]'); + if (paletteForm) { + var inputs = paletteForm.querySelectorAll('input[name="__palette"]'); + inputs.forEach(function(input) { + input.addEventListener('change', function() { + if (this.checked) { + var scheme = this.getAttribute('data-md-color-scheme'); + document.documentElement.setAttribute('data-md-color-scheme', scheme); + localStorage.setItem('theme-preference', scheme); + } + }); + }); + } + // Also keep the MutationObserver for manual changes + const observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if (mutation.attributeName === 'data-md-color-scheme') { + const scheme = document.documentElement.getAttribute('data-md-color-scheme'); + if (scheme) { + localStorage.setItem('theme-preference', scheme); + } + } + }); + }); + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ['data-md-color-scheme'] + }); + } + + // Setup theme persistence (apply + observe) + function setupThemePersistence() { + applySavedTheme(); + observeThemeChanges(); + } + + // Initial setup + setupThemePersistence(); + + // Re-apply on every DOMContentLoaded (instant navigation) + document.addEventListener('DOMContentLoaded', setupThemePersistence); +})(); diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 151d92a9..2ce80a1b 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,7 +1,7 @@ [data-md-color-scheme="openobserve"] { --md-primary-fg-color: #ffffff; - --md-primary-fg-color--light: #ECB7B7; - --md-primary-fg-color--dark: #90030C; + --md-primary-fg-color--light: #ecb7b7; + --md-primary-fg-color--dark: #90030c; } @media only screen and (min-width: 76.25em) { @@ -27,4 +27,580 @@ html { font-size: 125%; -} \ No newline at end of file +} +/* --- Sidebar overlap fix -------------------------------------------------- + Issue: Bottom of left navigation sidebar links were being hidden by a white + overlay/section when scrolling the page body. In Material for MkDocs this + is commonly caused by the main content (or footer) layering above the + sidebar, or by the sidebar losing its own scroll context causing the fade + pseudo-element to cover final items. + + Fix: + 1. Reassert a dedicated scroll container + full height for primary sidebar. + 2. Remove bottom/top gradient (pseudo elements) that can mask final items. + 3. Raise z-index so main content/footer can't visually overlap it. + 4. Provide stable scrollbar to avoid layout shift. +*/ +@media (min-width: 60em) { + /* Minimal, non-intrusive adjustments */ + .md-sidebar--primary { + position: sticky; /* stay visible */ + top: 0; /* eliminate excess gap */ + z-index: 200; + display: flex; + flex-direction: column; + } + + /* Add bottom padding to main content so sidebar never gets overlapped by footer */ + .md-main, + .md-content { + padding-bottom: 0.5rem; + } + .md-footer { + z-index: 0; + } + /* Give room so last items can scroll fully into view */ + .md-sidebar--primary .md-sidebar__scrollwrap { + flex: 1; + overflow-y: auto; + padding: 0.25rem 0 2.25rem; /* trim top, moderate bottom */ + overscroll-behavior: contain; + } + /* Remove bottom fade/overlay that appeared as white block */ + .md-sidebar--primary .md-sidebar__scrollwrap:after { + display: none !important; + } + /* Also disable any other potential masking pseudo-elements */ + .md-sidebar--primary:before, + .md-sidebar--primary:after, + .md-sidebar--primary .md-sidebar__inner:before, + .md-sidebar--primary .md-sidebar__inner:after { + display: none !important; + } + /* Tighter default nav spacing */ + .md-sidebar--primary .md-nav { + margin-top: 0; + } + .md-sidebar--primary .md-nav__list { + padding-bottom: 0; + } + /* Ensure main/content layers don't cover sidebar */ + .md-main, + .md-main__inner, + .md-content, + .md-content__inner { + position: relative; + z-index: 0; + } +} + +[data-md-color-scheme="slate"] .md-search__input { + background-color: #7c3aed !important; + border: 2px solid #7c3aed !important; + border-radius: 999px !important; + color: #fff !important; +} + +[data-md_color_scheme="slate"] .md-search__icon { + color: #fff !important; +} + +/* Search dropdown styling for dark theme */ +[data-md_color_scheme="slate"] .md-search__suggest { + background: #222 !important; + color: #fff !important; + border: 1px solid rgba(255, 255, 255, 0.18) !important; +} + +/* Cursor pointer only on search elements */ +.md-header__button[for="__search"], +.md-search__input, +.md-search__icon { + cursor: pointer !important; +} + +.md-header, +.md-header__inner, +.md-header__title, +.md-header__ellipsis { + cursor: default !important; +} + +/* Theme-specific full screen backgrounds */ +[data-md-color-scheme="default"] body { + background-color: rgb(255, 255, 255) !important; +} + +[data-md-color-scheme="slate"] body { + background-color: rgb(18, 18, 18) !important; +} + +[data-md-color-scheme="openobserve"] body { + background-color: #1a1a2e !important; +} + +/* Custom search bar styles for MkDocs Material */ + +.md-search__input { + background-color: rgb(245, 243, 254); + border: 2px solid #7c3aed !important; + border-radius: 8px !important; + color: #222 !important; + transition: border-color 0.2s; + box-shadow: none !important; + padding: 0.75em 2.5em 0.75em 1em !important; /* more height and space for icon */ + font-size: 1.5em !important; + min-width: 16em !important; +} + +.md-search__input:focus { + border-color: #7c3aed !important; + outline: none; +} + +.md-search__icon { + color: #000 !important; /* black icon for light theme */ + /* transition: color 0.2s; */ + padding-top: 10px; +} + +/* Dark theme overrides */ + +[data-md-color-scheme="slate"] .md-search__input { + background-color: rgb(29, 22, 40) !important; + color: #fff !important; + border-radius: 8px !important; + box-shadow: none !important; + padding: 0.75em 2.5em 0.75em 3.2em !important; + font-size: 1.5em !important; + min-width: 16em !important; +} +.md-search__output { + border: 2px solid #7c3aed !important; + border-radius: 8px !important; + margin-top: 1em !important; +} + +[data-md_color-scheme="slate"] .md-search__icon { + color: #fff !important; /* white icon for dark theme */ +} + +/* --- Improved Search Bar Styles: Always Override --- */ +.md-search__form { + background: transparent !important; + border: none !important; + box-shadow: none !important; + border-radius: 8px !important; + padding: 0 !important; +} + +/* Direct approach: Add close button to search input */ +.md-search__input { + background-color: rgb(245, 243, 254); + border: 2px solid #7c3aed !important; + border-radius: 8px !important; + color: #222 !important; + transition: border-color 0.2s; + box-shadow: none !important; + padding: 0.2em 3.2em 0.2em 3.2em !important; /* Remove extra right padding for desktop */ + font-size: 1.5em !important; + min-width: 20em !important; + height: 3em !important; + /* Remove background image for desktop - will be added for mobile only */ +} +.md-search__input::placeholder { + color: #7c3aed !important; + opacity: 1 !important; + font-size: 1.25em !important; + font-weight: 500 !important; + letter-spacing: 0.02em; +} + +.md-search__icon { + color: #000 !important; + /* transition: color 0.2s; */ + position: absolute !important; + right: 1.5em !important; + top: 50% !important; + transform: translateY(-50%) !important; + font-size: 1.25em !important; + pointer-events: auto; + display: flex; + align-items: center; + cursor: pointer; +} + +[data-md-color-scheme="slate"] .md-search__form { + background: transparent !important; + border: none !important; + box-shadow: none !important; + border-radius: 999px !important; + padding: 0 !important; +} + +[data-md_color-scheme="slate"] .md-search__input { + background-color: #7c3aed !important; + color: #fff !important; + border-radius: 999px !important; + box-shadow: none !important; + padding: 0.85em 3.2em 0.85em 3.2em !important; /* Remove extra right padding for desktop */ + font-size: 1.5em !important; + min-width: 20em !important; + height: 3em !important; + /* Remove close button for desktop - will be added for mobile only */ +} +[data-md-color-scheme="slate"] .md-search__input::placeholder { + color: #fff !important; + opacity: 1 !important; + font-size: 1.25em !important; + font-weight: 500 !important; + letter-spacing: 0.02em; +} + +[data-md-color-scheme="slate"] .md-search__icon { + color: #fff !important; + position: absolute !important; + right: 1.2em !important; + top: 50% !important; + transform: translateY(-50%) !important; + font-size: 1.5em !important; + pointer-events: none; +} + +/* --- FINAL: Sidebar Custom Design --- */ +.md-sidebar--primary { + background: rgb(245, 243, 254) !important; + border: 2px solid #7c3aed !important; + border-radius: 8px !important; + padding: 1em 0.5em !important; + /* margin-right: 2em !important; */ + box-shadow: none !important; + z-index: 10 !important; + /* allow the active indicator to sit inside the rounded border */ + overflow: visible !important; +} + +@media (min-width: 1024px) { + .md-sidebar--primary { + margin-left: 12px; + } +} +[data-md-color-scheme="slate"] .md-sidebar--primary { + background: rgb(23, 20, 29) !important; + border: 2px solid #7c3aed !important; + border-radius: 8px !important; + padding: 1em 0.5em !important; + margin-right: 2em !important; + box-shadow: none !important; + z-index: 10 !important; + overflow: hidden !important; +} + +.md-sidebar__title, +.md-sidebar__title:before, +.md-sidebar__title:after { + box-shadow: none !important; + background: transparent !important; +} + +/* Highlight selected nav item with purple bar on left */ +.md-sidebar--primary .md-nav__item--active > .md-nav__link { + position: relative !important; + background: transparent !important; + border-radius: 5px !important; + /* make the active link text bold (applies to the text, not the empty pseudo-element) */ + font-weight: 700 !important; + /* leave space on the RIGHT for the indicator that sits against the sidebar border */ + padding-right: 1.6em !important; + /* keep a little left padding for text alignment */ + padding-left: 1.1em !important; + overflow: visible !important; +} +.md-sidebar--primary .md-nav__item--active > .md-nav__link::before { + content: ""; + position: absolute; + /* place the indicator INSIDE the sidebar inner border (right side in this theme) + tweak the `right` value if you want it closer/further from the border */ + right: 8px; /* adjust this number to visually align with your border (2px) */ + left: 0; + top: 50%; + transform: translateY(-50%); + width: 4px; + height: 25px; + background: #4b237a; + /* slightly rounded marker to match sidebar corner curvature */ + border-radius: 3px !important; + z-index: 3 !important; + /* font-weight on an empty pseudo-element has no effect; kept empty for visual bar */ +} + +/* Thin sidebar scrollbar thumb, flush with border */ +.md-sidebar--primary .md-sidebar__scrollwrap { + scrollbar-width: thin !important; +} +.md-sidebar--primary .md-sidebar__scrollwrap::-webkit-scrollbar { + width: 6px !important; + background: transparent !important; +} +.md-sidebar--primary .md-sidebar__scrollwrap::-webkit-scrollbar-thumb { + background: #7c3aed !important; + border-radius: 6px !important; + margin: 0 !important; + border: none !important; +} + +/* --- Sidebar: Add right margin for full rounded border visibility --- */ +.md-sidebar--primary { + margin-right: 1em !important; +} +[data-md_color-scheme="slate"] .md-sidebar--primary { + margin-right: 1em !important; +} + +/* --- Remove white shadow from sidebar title --- */ +.md-sidebar__title { + box-shadow: none !important; + background: transparent !important; +} + +.md-sidebar__title, +.md-sidebar__title:before, +.md-sidebar__title:after { + box-shadow: none !important; + background: transparent !important; +} + +/* --- Ensure sidebar scrollbar thumb is flush with right border --- */ +.md-sidebar--primary { + padding-right: 0 !important; + border-right: 2px solid #7c3aed !important; + box-sizing: border-box !important; +} +.md-sidebar--primary .md-sidebar__scrollwrap { + padding-right: 0 !important; + margin-right: 0 !important; + border-right: none !important; + box-sizing: border-box !important; +} +.md-sidebar--primary .md-sidebar__scrollwrap::-webkit-scrollbar { + width: 6px !important; + background: transparent !important; +} +.md-sidebar--primary .md-sidebar__scrollwrap::-webkit-scrollbar-thumb { + background: #7c3aed !important; + border-radius: 6px !important; + border-right: none !important; + margin-right: 0 !important; +} + +/* --- Final fix: Remove all space between sidebar scrollbar and border --- */ +.md-sidebar--primary { + padding-right: 0 !important; + border-right: 2px solid #7c3aed !important; + box-sizing: border-box !important; + border-radius: 8px !important; + background-clip: padding-box !important; +} +.md-sidebar--primary .md-sidebar__scrollwrap { + width: 100% !important; + padding-right: 0 !important; + margin-right: 0 !important; + border-right: none !important; + box-sizing: border-box !important; + overflow-y: scroll !important; +} +.md-sidebar--primary .md-sidebar__scrollwrap::-webkit-scrollbar { + width: 6px !important; + background: transparent !important; +} +.md-sidebar--primary .md-sidebar__scrollwrap::-webkit-scrollbar-thumb { + background: #7c3aed !important; + border-radius: 6px !important; + border-right: none !important; + margin-right: 0 !important; +} + +/* Outer-sidebar active indicator: render a single highlight bar inside the + sidebar scroll container so the marker visually sits against the sidebar + inner border (outer div). */ +.md-sidebar--primary > .o-active-indicator { + /* indicator rendered as a direct child of the outer sidebar so it can + visually sit flush against the sidebar inner border */ + position: absolute; + right: 2px; /* aligns with the 2px sidebar inner border; tweak if needed */ + width: 6px; + background: #4b237a; + border-radius: 3px; + z-index: 220; /* above sidebar content but below header overlays */ + transition: top 180ms ease, height 180ms ease, opacity 160ms ease; + opacity: 0; + pointer-events: none; +} + +/* Hide native scrollbar inside the sidebar scrollwrap and provide a custom + visual track + thumb that we control via JS so the active marker can be + aligned exactly with the visible thumb. */ +.md-sidebar--primary .md-sidebar__scrollwrap { + scrollbar-width: none !important; /* Firefox */ +} +.md-sidebar--primary .md-sidebar__scrollwrap::-webkit-scrollbar { + display: none !important; /* Chrome/Safari */ +} + +/* custom track & thumb appended as children of the outer sidebar */ +.md-sidebar--primary > .o-scroll-track { + position: absolute; + right: 2px; + width: 12px; /* includes some padding so thumb doesn't touch the border */ + top: 0; + height: 100%; + pointer-events: none; /* visual only */ +} +.md-sidebar--primary > .o-scroll-track .o-scroll-thumb { + position: absolute; + right: 3px; /* place thumb inside track, a few px from border */ + width: 6px; + background: #4b237a; /* purple thumb */ + border-radius: 6px; + box-shadow: 0 0 0 2px rgba(75, 35, 122, 0.06) inset; + transition: top 120ms linear, height 120ms linear; + pointer-events: auto; +} + +/* Keep the active indicator visually matching the custom thumb (same color) + but slightly narrower so it reads as an indicator inside the sidebar. */ +.md-sidebar--primary > .o-active-indicator { + right: 8px; /* move it slightly left so it appears inside the content area */ + width: 4px; + background: #4b237a; +} + +/* --- Remove background and shadow from sidebar nav title --- */ +.md-sidebar--primary .md-nav__title, +.md-sidebar--primary .md-nav__title:before, +.md-sidebar--primary .md-nav__title:after { + background: transparent !important; + box-shadow: none !important; + border: none !important; +} + +.md-nav__title { + font-weight: 700 !important; + /* Ensure the nav title is not sticky — override any theme "sticky" rules */ + position: static !important; +} + +/* Default (light) theme: make nav title dark for contrast */ +.md-nav__title { + color: #111111 !important; +} + +/* Dark theme overrides: ensure title stays readable on dark backgrounds */ +[data-md-color-scheme="slate"] .md-nav__title, +[data-md-color-scheme="openobserve"] .md-nav__title { + color: #ffffff !important; +} + +/* Hide md-search__options element */ +.md-search__options { + display: none !important; +} + +/* Reset any conflicting styles */ + +/* Reset any conflicting styles */ + +/* --- Responsive Search Bar Visibility --- */ +@media (max-width: 1440px) { + .md-header .md-search__input { + min-width: 14em !important; + font-size: 1.5em !important; + } +} + +@media (max-width: 1024px) { + /* Hide search input only in the header navbar, not in search overlay */ + .md-header .md-search__input { + display: none !important; + } + .md-header .md-search__icon { + display: inline-flex !important; + margin-left: 10px; + pointer-events: auto !important; + cursor: pointer !important; + } + + /* Ensure search input is visible and functional in search overlay */ + .md-search .md-search__input { + display: block !important; + width: 100% !important; + min-width: auto !important; + margin: 0 !important; + padding: 0.75em 4.5em 0.75em 1em !important; /* Extra right padding for close button on mobile */ + font-size: 1.2em !important; + border-radius: 8px !important; + pointer-events: auto !important; + -webkit-appearance: none !important; + appearance: none !important; + /* Add close button background image for mobile only */ + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%237c3aed' stroke-width='2'%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3C/svg%3E") !important; + background-repeat: no-repeat !important; + background-position: calc(100% - 1em) center !important; + background-size: 1.2em !important; + } + + /* Dark theme close button for mobile */ + [data-md-color-scheme="slate"] .md-search .md-search__input { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3C/svg%3E") !important; + } + + /* Ensure search overlay icon doesn't interfere */ + .md-search .md-search__icon { + pointer-events: none !important; + display: none !important; + } + + /* Mobile search overlay styling */ + .md-search__output { + max-height: 75vh !important; + overflow-y: auto !important; + } + + /* Ensure search form is properly styled on mobile */ + .md-search .md-search__form { + position: relative !important; + display: block !important; + width: 100% !important; + } + + /* Mobile close button positioning */ + .md-search .md-search__close { + display: flex !important; + right: 1em !important; + color: #7c3aed !important; + } + + /* Mobile close button hover */ + .md-search .md-search__close:hover { + background-color: rgba(124, 58, 237, 0.1) !important; + } + + /* Dark theme mobile close button */ + [data-md-color-scheme="slate"] .md-search .md-search__close { + color: #fff !important; + } +} + +@media (min-width: 1025px) { + .md-search__input { + display: inline-block !important; + } +} + +@media (min-width: 1441px) { + .md-search__input { + min-width: 20em !important; + font-size: 1.5em !important; + display: inline-block !important; + } +} diff --git a/docs/stylesheets/landing-page.css b/docs/stylesheets/landing-page.css new file mode 100644 index 00000000..4b5810a6 --- /dev/null +++ b/docs/stylesheets/landing-page.css @@ -0,0 +1,18 @@ +/* OpenObserve Landing Page Custom Styles */ + +/* Only keep custom colors for icons */ +.landing-tutorial-icon--blue { + background-color: #3b82f6; +} +.landing-tutorial-icon--red { + background-color: #ef4444; +} +.landing-tutorial-icon--purple { + background-color: #8b5cf6; +} +.landing-tutorial-icon--green { + background-color: #10b981; +} +.landing-tutorial-icon--orange { + background-color: #f59e42; +} diff --git a/input.css b/input.css new file mode 100644 index 00000000..76f76b60 --- /dev/null +++ b/input.css @@ -0,0 +1,207 @@ +@import "tailwindcss"; + +@layer utilities { + .hover\:text-\[\#7782FF\]:hover { + color: #7782ff; + } +} + +.hero-gradient { + @apply bg-gradient-to-r from-[#6A76E3] to-[#45A4F3]; +} + +input { + color: #ffffff; +} + +.custom-gradient { + background: linear-gradient( + 180deg, + rgba(255, 255, 255, 0.75) 0%, + rgba(255, 255, 255, 0.5) 60%, + rgba(255, 255, 255, 0.3) 100% + ); +} + +.theme-purple { + --color-primary-purple: rgba(107, 118, 227); + color: var(--color-primary-purple); + --color-card: rgba(107, 118, 227, 0.2); + --color-hover-card: rgba(126, 34, 206); + --color-tabs-background: rgba(107, 118, 227); + --color-tabs-title-text: rgba(107, 118, 227); +} + +html { + margin: 0; + width: 100%; + font-family: "Inter", sans-serif; + scroll-behavior: smooth; + scroll-padding-top: 8rem; + /* height: 100%; removed to prevent extra space at the bottom */ +} + +main { + min-height: calc(100vh - 8rem); + padding-top: 3rem; +} + +.primary-button { + position: relative; + border: none; + color: white; + cursor: pointer; + border-radius: 6px; + background-origin: border-box; + background-clip: padding-box, border-box; + transition: all 0.3s ease; + background-color: rgba(107, 118, 227); + /* Creates a 2px border that matches the button color initially */ + border: 1px solid transparent; + font-size: 12px; +} + +.primary-button:hover { + background-color: hsl(233 53% 53%); +} + +.primary-button:disabled { + opacity: 0.6; + cursor: not-allowed; + background-image: linear-gradient(180deg, #8cc7ff 0%, #7ab7ff 100%), + linear-gradient(180deg, #8cc7ff 0%, #7ab7ff 100%); + box-shadow: none; +} + +.secondary-button { + position: relative; + border: none; + color: #5764d9; + cursor: pointer; + border-radius: 6px; + background-origin: border-box; + background-clip: padding-box, border-box; + transition: all 0.3s ease; + background-color: white; + border: 1px solid transparent; + font-size: 12px; +} + +.secondary-button:hover { + /* Transparent border to show gradient */ + background-color: #f3f4f6; +} + +.secondary-button:disabled { + opacity: 0.6; + cursor: not-allowed; + border-color: #cccccc; + /* Light gray border for disabled state */ + background: transparent; + box-shadow: none; +} + +.gradient-hover { + background: linear-gradient(to left, #6a76e3, #45a4f3); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.md-header { + position: fixed !important; + top: 70px !important; +} + +.md-main__inner { + margin-top: 70px !important; +} + +.md-sidebar { + top: 75px !important; + /* height: calc(100vh - 105px) !important; */ +} + +@media (min-width: 640px) and (max-width: 1023px) { + .md-sidebar { + top: 70px !important; + } +} +@media (min-width: 1024px) { + .md-sidebar { + top: 70px !important; + height: calc(100vh - 70px) !important; + } +} + +/* @media screen and (min-width: 60em) { + .md-sidebar--secondary:not([hidden]) { + display: none !important; + } +} */ + +/* @media (min-width: 768px) { + .md-sidebar__scrollwrap { + display: none !important; + } + +} */ +nav.md-grid { + max-width: 100%; + margin-left: auto; + margin-right: auto; + padding-left: 1rem; /* default (base) = px-4 */ + padding-right: 1rem; +} + +@media (min-width: 640px) { + nav.md-grid { + padding-left: 1.5rem; /* sm:px-6 */ + padding-right: 1.5rem; + } +} + +@media (min-width: 1024px) { + nav.md-grid { + padding-left: 2rem; /* lg:px-8 */ + padding-right: 2rem; + } +} + +@media (min-width: 1280px) { + nav.md-grid { + padding-left: 2.5rem; /* xl:px-10 */ + padding-right: 2.5rem; + } +} +.md-search__inner { + width: 20rem; +} +@media (max-width: 768px) { + .md-search__inner { + top: 80px !important; + } + + .md-search__input { + pointer-events: auto !important; + color: black !important; + } +} + + .md-header__title { + margin-left: 0.1rem; + width: 100px; + } + +@media (min-width: 1025px) { + .md-header__title { + flex-grow: 0; + flex-basis: auto; + max-width: 400px; + } + .md-header__inner { + display: flex; + align-items: center; + justify-content: space-between; + } +} diff --git a/mkdocs.yml b/mkdocs.yml index 4aacf0e0..e722b27a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,4 +1,4 @@ -site_name: OpenObserve Documentation +site_name: Documentation site_url: https://openobserve.ai/docs # https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin required for nav plugins: @@ -14,30 +14,36 @@ plugins: extra_css: - stylesheets/extra.css - stylesheets/feedback.css + - css/output.css + - css/landing-page.css extra_javascript: - https://unpkg.com/openapi-explorer@0/dist/browser/openapi-explorer.min.js - js/ms-clarity.js - js/zinc.js - js/vector_co.js + - js/search-close-minimal.js + - js/search-tracking.js + - https://buttons.github.io/buttons.js - js/reo.js extra: - social: - - icon: fontawesome/brands/linkedin - link: https://www.linkedin.com/company/zinclabsinc - - icon: fontawesome/brands/github - link: https://github.com/openobserve/openobserve - - icon: fontawesome/brands/docker - link: https://gallery.ecr.aws/zinclabs/openobserve - - icon: fontawesome/brands/slack - link: https://short.openobserve.ai/community + # social: + # - icon: fontawesome/brands/linkedin + # link: https://www.linkedin.com/company/zinclabsinc + # - icon: fontawesome/brands/github + # link: https://github.com/openobserve/openobserve + # - icon: fontawesome/brands/docker + # link: https://gallery.ecr.aws/zinclabs/openobserve + # - icon: fontawesome/brands/slack + # link: https://short.openobserve.ai/community alternate: # - name: English - # link: /en/ + # link: /en/ # lang: en # - name: Chinese # link: /cn/ # lang: zh generator: false + default_color_scheme: default version: provider: mike analytics: @@ -71,40 +77,37 @@ extra: # Thanks for your feedback! Help us improve this page by # using our feedback form. theme: - logo: images/logo_circle.png favicon: images/logo_circle.png name: material custom_dir: overrides features: # - navigation.expand # - navigation.tabs - - navigation.tabs.sticky + # - navigation.tabs.sticky - navigation.instant - navigation.tracking - content.code.copy - content.code.select palette: - - media: "(prefers-color-scheme: light)" - scheme: default + - scheme: default primary: white toggle: icon: material/weather-sunny name: Switch to dark mode - - media: "(prefers-color-scheme: dark)" - scheme: slate + - scheme: slate primary: black toggle: icon: material/weather-night name: Switch to light mode -repo_url: https://github.com/openobserve/openobserve -repo_name: openobserve/openobserve -edit_uri: https://github.com/openobserve/openobserve-docs/edit/main/docs/ +# repo_url: https://github.com/openobserve/openobserve +# repo_name: openobserve/openobserve +# edit_uri: https://github.com/openobserve/openobserve-docs/edit/main/docs/ markdown_extensions: - admonition - tables - attr_list - pymdownx.tabbed: - alternate_style: true + alternate_style: true - pymdownx.highlight: anchor_linenums: true - pymdownx.inlinehilite @@ -112,7 +115,3 @@ markdown_extensions: - pymdownx.superfences - pymdownx.details - meta - - - - diff --git a/overrides/css/landing-page.css b/overrides/css/landing-page.css new file mode 100644 index 00000000..968c8a04 --- /dev/null +++ b/overrides/css/landing-page.css @@ -0,0 +1,945 @@ +/* Consistent vertical spacing for headings and paragraphs in landing page */ +.landing-main-content h1, +.landing-main-content h3, +.landing-main-content h4, +.landing-main-content h5, +.landing-main-content h6, +.landing-main-content p { + margin-bottom: 1px; +} +/* Proper spacing for section headings */ +.landing-main-content h2 { + margin-top: 15px !important; + margin-bottom: 8px !important; +} +/* First section heading should not have top margin */ +.landing-main-content h2:first-of-type { + margin-top: 0 !important; +} + +/* OpenObserve Landing Page Custom Styles */ +body > .landing-page { + margin-top: 0 !important; + padding-top: 0 !important; +} +.landing-page:first-child { + margin-top: 0 !important; + padding-top: 0 !important; +} + +:root { + /* Color Variables */ + --primary-blue: #6366f1; + --border-color: #787878; + --text-primary: #ffffff; + --text-secondary: #474747; + + /* Button Colors */ + --color-primary-purple: #8b5cf6; + --color-hover-card: #7c3aed; + + /* Feature Colors */ + --feature-blue: #3b82f6; + --feature-red: #ef4444; + --feature-purple: #8b5cf6; + --feature-green: #10b981; + --feature-orange: #f97316; + --feature-pink: #ec4899; + --feature-navy: #1e40af; + --feature-forest: #059669; + + /* Spacing Variables */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 12px; + --spacing-lg: 16px; + --spacing-xl: 20px; + + /* Border Radius */ + --radius-sm: 6px; + --radius-lg: 12px; + --radius-xl: 16px; + --radius-full: 50%; + + /* Typography */ + --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + sans-serif; + --font-size-sm: 12px; + --font-size-base: 13px; + --font-size-md: 14px; + --font-size-lg: 15px; + + /* Transitions */ + --transition-base: all 0.2s ease; +} + +/* Base Styles */ +.landing-page { + font-family: var(--font-family); + line-height: 1.5; + padding-top: 0 !important; + margin-top: 0 !important; +} + +/* Heading styles */ +.landing-page h1 { + font-size: 20px !important; + font-weight: bold; + margin: 0; + line-height: 1.3; + color: var(--primary-blue) !important; +} + +.landing-page h2 { + font-size: 20px !important; + font-weight: 700; + font-family: "Inter", "Segoe UI", -apple-system, BlinkMacSystemFont, + sans-serif; + margin: 0; + line-height: 1.3; + color: var(--text-primary) !important; +} + +.landing-page h3 { + font-size: var(--font-size-md) !important; + font-weight: 600; + margin: 0 0 var(--spacing-sm) 0; + line-height: 1.3; + color: var(--text-primary) !important; +} + +/* Theme-specific heading colors */ +[data-md-color-scheme="slate"] .landing-page h1 { + color: var(--primary-blue) !important; +} + +[data-md-color-scheme="slate"] .landing-page h2, +[data-md-color-scheme="slate"] .landing-page h3 { + color: #ffffff !important; +} + +[data-md-color-scheme="default"] .landing-page h1 { + color: var(--primary-blue) !important; +} + +[data-md-color-scheme="default"] .landing-page h2, +[data-md-color-scheme="default"] .landing-page h3 { + color: #1f2937 !important; +} + +/* Hide TOC for landing page */ +.landing-page ~ .md-sidebar--secondary { + display: none !important; +} + +body:has(.landing-page) .md-sidebar--secondary { + display: none !important; +} + +.md-main .landing-page { + margin-right: 0 !important; +} + +.md-content__inner.landing-page { + margin-right: 0 !important; + max-width: none !important; +} + +.landing-container { + width: 100%; + min-height: 100vh; + padding-top: 0 !important; + margin-top: 0 !important; +} + +.landing-main-content { + width: 100%; + padding: 0 var(--spacing-xl) var(--spacing-xl) var(--spacing-xl); + margin-top: 0 !important; + padding-top: 0 !important; +} + +/* Hero Section */ +.landing-hero-card { + border: 2px solid transparent; + background-image: linear-gradient(rgb(247, 247, 247), rgb(247, 247, 247)), + linear-gradient( + 135deg, + rgba(99, 102, 241, 0.3) 0%, + rgba(139, 92, 246, 0.3) 50%, + rgba(6, 182, 212, 0.3) 100% + ); + background-origin: border-box; + background-clip: padding-box, border-box; + border-radius: var(--radius-xl); + padding: 6px 24px; + margin-bottom: 12px; + position: relative; + overflow: hidden; +} + +/* Dark theme hero card background */ +[data-md-color-scheme="slate"] .landing-hero-card { + background-image: linear-gradient(rgb(10, 8, 19), rgb(10, 8, 19)), + linear-gradient( + 135deg, + rgba(99, 102, 241, 0.3) 0%, + rgba(139, 92, 246, 0.3) 50%, + rgba(6, 182, 212, 0.3) 100% + ); +} + +/* Light theme hero card background */ +[data-md-color-scheme="default"] .landing-hero-card { + background-image: linear-gradient(rgb(247, 247, 247), rgb(247, 247, 247)), + linear-gradient( + 135deg, + rgba(99, 102, 241, 0.3) 0%, + rgba(139, 92, 246, 0.3) 50%, + rgba(6, 182, 212, 0.3) 100% + ); +} + +.landing-hero-card::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +.landing-hero-content { + position: relative; + z-index: 1; + padding: 2px 0; + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--spacing-lg); +} + +.landing-hero-description { + font-size: var(--font-size-lg); + margin-bottom: var(--spacing-md); + color: #333333 !important; + font-weight: 400; + line-height: 1.5; + opacity: 0.95; +} + +[data-md-color-scheme="slate"] .landing-hero-description { + color: #e5e7eb !important; +} + +[data-md-color-scheme="default"] .landing-hero-description { + color: #333333 !important; +} + +.landing-hero-buttons { + display: flex; + gap: var(--spacing-sm); +} + +/* Primary Button Styles */ +.primary-button { + position: relative; + border: none; + color: white !important; + cursor: pointer; + border-radius: 6px; + background-origin: border-box; + background-clip: padding-box, border-box; + transition: all 0.3s ease; + background-color: rgb(107, 118, 226); + border: 1px solid transparent; + padding: 5px 14px !important; + text-decoration: none; + font-weight: 500; + display: inline-flex; + align-items: center; + gap: var(--spacing-xs); + font-size: var(--font-size-md); + white-space: nowrap; +} + +.primary-button:hover { + background-color: var(--color-hover-card); + color: white !important; + text-decoration: none; +} + +.primary-button:visited, +.primary-button:focus { + color: white !important; + text-decoration: none; +} + +.primary-button *, +.primary-button:hover * { + color: white !important; +} + +.primary-button:disabled { + opacity: 0.6; + cursor: not-allowed; + background-image: linear-gradient(180deg, #8cc7ff 0%, #7ab7ff 100%), + linear-gradient(180deg, #8cc7ff 0%, #7ab7ff 100%); + box-shadow: none; + color: white !important; +} + +.landing-btn-content { + display: flex; + align-items: center; + gap: 0.5em; + white-space: nowrap; +} + +.landing-play-icon { + display: flex; + align-items: center; + font-size: 1.15em; + margin-right: 0.1em; + flex-shrink: 0; +} + +/* Section Styles */ +.landing-section { + margin-bottom: 15px; +} + +.landing-section-title { + font-size: 20px !important; + font-weight: 700; + font-family: "Inter", "Segoe UI", -apple-system, BlinkMacSystemFont, + sans-serif; + margin: 0 0 8px 0 !important; + color: var(--text-primary); + text-align: center; +} + +/* Tutorial Grid */ +.landing-tutorial-rows { + display: flex; + flex-direction: column; + gap: var(--spacing-md); + align-items: center; +} + +.landing-tutorial-row { + display: flex; + justify-content: center; + text-align: center; + gap: var(--spacing-md); +} + +.landing-tutorial-row .landing-tutorial-card { + flex: 1 1 0; + min-width: 220px; + max-width: 320px; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: stretch; + background: none; + box-shadow: none; + margin: 0; +} + +.landing-tutorial-card { + border-radius: var(--radius-lg); + padding: var(--spacing-md) var(--spacing-lg); + border: 1px solid var(--border-color); + transition: var(--transition-base); + position: relative; + cursor: pointer; + text-decoration: none; + color: inherit; + display: flex; + flex-direction: column; + flex: 1 1 0; + min-height: 80px; + box-sizing: border-box; +} + +.landing-tutorial-card:hover { + border-color: #6b7280; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25); + text-decoration: none; + color: inherit; +} + +/* Dark theme tutorial card hover effects */ +[data-md-color-scheme="slate"] .landing-tutorial-card:hover { + border-color: #9ca3af !important; + box-shadow: 0 4px 12px rgba(255, 255, 255, 0.1) !important; + background-color: rgba(255, 255, 255, 0.02) !important; +} + +/* Light theme tutorial card hover effects */ +[data-md-color-scheme="default"] .landing-tutorial-card:hover { + border-color: #9ca3af !important; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1) !important; + background-color: rgba(0, 0, 0, 0.02) !important; +} + +.landing-tutorial-title { + font-size: var(--font-size-md); + font-weight: 600; + color: var(--text-primary); + line-height: 1.3; +} + +.landing-tutorial-description { + color: var(--text-secondary); + font-size: var(--font-size-base); + margin-bottom: var(--spacing-xs); + line-height: 1.4; + margin-top: 0; +} + +/* Dark theme description text colors */ +[data-md-color-scheme="slate"] .landing-tutorial-description { + color: #d1d5db !important; +} + +[data-md-color-scheme="slate"] .landing-feature-text p { + color: #d1d5db !important; +} + +[data-md-color-scheme="slate"] .landing-community-support-text p { + color: #d1d5db !important; +} + +/* Light theme description text colors */ +[data-md-color-scheme="default"] .landing-tutorial-description { + color: #6b7280 !important; +} + +[data-md-color-scheme="default"] .landing-feature-text p { + color: #6b7280 !important; +} + +[data-md-color-scheme="default"] .landing-community-support-text p { + color: #6b7280 !important; +} + +/* Features List */ +.landing-features-list { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--spacing-md); + margin-bottom: 0; +} + +.landing-feature-item { + border-radius: var(--radius-lg); + padding: var(--spacing-xs) var(--spacing-md); + border: 1px solid var(--border-color); + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + text-align: center; + transition: var(--transition-base); + position: relative; + cursor: pointer; + text-decoration: none; + color: inherit; + min-height: 100px; +} + +.landing-feature-item:hover { + border-color: #6b7280; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25); + text-decoration: none; + color: inherit; +} + +/* Feature item hover effects with icon-specific colors */ +.landing-feature-item:has(.landing-tutorial-icon--blue):hover { + border-color: var(--feature-blue); +} + +.landing-feature-item:has(.landing-tutorial-icon--red):hover { + border-color: var(--feature-red); +} + +.landing-feature-item:has(.landing-tutorial-icon--purple):hover { + border-color: var(--feature-purple); +} + +.landing-feature-item:has(.landing-tutorial-icon--green):hover { + border-color: var(--feature-green); +} + +.landing-feature-item:has(.landing-tutorial-icon--orange):hover { + border-color: var(--feature-orange); +} + +.landing-feature-item:has(.landing-tutorial-icon--pink):hover { + border-color: var(--feature-pink); +} + +.landing-feature-item:has(.landing-tutorial-icon--navy):hover { + border-color: var(--feature-navy); +} + +.landing-feature-item:has(.landing-tutorial-icon--forest):hover { + border-color: var(--feature-forest); +} + +.landing-feature-left { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--spacing-sm); + width: 100%; +} + +.landing-feature-icon { + width: 40px; + height: 40px; + border-radius: var(--radius-full); + display: flex; + align-items: center; + justify-content: center; + font-size: 20px; + color: var(--text-primary); + position: relative; +} + +/* Icon background colors with opacity */ +.landing-feature-icon.landing-tutorial-icon--blue { + background-color: rgba(59, 130, 246, 0.15); +} + +.landing-feature-icon.landing-tutorial-icon--red { + background-color: rgba(239, 68, 68, 0.15); +} + +.landing-feature-icon.landing-tutorial-icon--purple { + background-color: rgba(139, 92, 246, 0.15); +} + +.landing-feature-icon.landing-tutorial-icon--green { + background-color: rgba(16, 185, 129, 0.15); +} + +.landing-feature-icon.landing-tutorial-icon--orange { + background-color: rgba(249, 115, 22, 0.15); +} + +.landing-feature-icon.landing-tutorial-icon--pink { + background-color: rgba(236, 72, 153, 0.15); +} + +.landing-feature-icon.landing-tutorial-icon--navy { + background-color: rgba(30, 64, 175, 0.15); +} + +.landing-feature-icon.landing-tutorial-icon--forest { + background-color: rgba(5, 150, 105, 0.15); +} + +.landing-feature-text h3 { + font-size: var(--font-size-lg) !important; + font-weight: 600; + margin: 0 0 var(--spacing-xs) 0; + text-align: center; +} + +.landing-feature-text p { + font-size: var(--font-size-sm) !important; + font-weight: 400; + margin: 0; + text-align: center; + line-height: 1.4; + color: var(--text-secondary); +} + +/* Integration Grid */ +.landing-integration-grid { + display: grid; + grid-template-columns: repeat(6, 1fr); + gap: var(--spacing-md); + margin-bottom: 0; +} + +.landing-integration-item { + border-radius: var(--radius-lg); + padding: var(--spacing-md); + border: 1px solid var(--border-color); + display: flex; + align-items: center; + justify-content: flex-start; + gap: var(--spacing-sm); + transition: var(--transition-base); + text-decoration: none; + color: inherit; + min-height: 50px; +} + +.landing-integration-item:hover { + border-color: #6b7280; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25); +} + +/* Integration item hover effects with icon-specific colors and background */ +.landing-integration-item:has(.landing-tutorial-icon--orange):hover { + border-color: var(--feature-orange); + background-color: rgba(249, 115, 22, 0.1); +} + +.landing-integration-item:has(.landing-tutorial-icon--blue):hover { + border-color: var(--feature-blue); + background-color: rgba(59, 130, 246, 0.1); +} + +.landing-integration-item:has(.landing-tutorial-icon--purple):hover { + border-color: var(--feature-purple); + background-color: rgba(139, 92, 246, 0.1); +} + +.landing-integration-item:has(.landing-tutorial-icon--green):hover { + border-color: var(--feature-green); + background-color: rgba(16, 185, 129, 0.1); +} + +.landing-integration-item:has(.landing-tutorial-icon--navy):hover { + border-color: var(--feature-navy); + background-color: rgba(30, 64, 175, 0.1); +} + +.landing-integration-item:has(.landing-tutorial-icon--red):hover { + border-color: var(--feature-red); + background-color: rgba(239, 68, 68, 0.1); +} + +.landing-integration-icon { + width: 25px; + height: 25px; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +/* Ensure images inside integration icons are centered and scaled */ +.landing-integration-icon img { + display: block; + width: 100%; + height: 100%; + object-fit: contain; +} + +.landing-integration-text h3 { + font-size: var(--font-size-md) !important; + font-weight: 600; + margin: 0; + text-align: center; +} + +/* Community Support Section */ +.landing-community-support-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--spacing-md); + margin-bottom: 0; +} + +.landing-community-support-item { + border-radius: var(--radius-lg); + padding: var(--spacing-md) var(--spacing-lg); + border: 1px solid var(--border-color); + display: flex; + align-items: center; + justify-content: flex-start; + gap: var(--spacing-md); + transition: var(--transition-base); + position: relative; + cursor: pointer; + text-decoration: none; + color: inherit; + min-height: 80px; +} + +.landing-community-support-item:hover { + border-color: #6b7280; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25); + text-decoration: none; + color: inherit; +} + +/* Community support arrow styling */ +.landing-community-support-arrow { + position: absolute; + top: 50%; + right: var(--spacing-lg); + transform: translateY(-50%); + font-size: 18px; + font-weight: bold; + opacity: 0; + transition: all 0.2s ease; + color: var(--text-primary); +} + +[data-md-color-scheme="default"] .landing-community-support-arrow { + color: #374151 !important; +} + +[data-md-color-scheme="slate"] .landing-community-support-arrow { + color: #ffffff !important; +} + +.landing-community-support-item:hover .landing-community-support-arrow { + opacity: 1; + transform: translateY(-50%) translateX(0); +} + +/* Community support item hover effects with icon-specific colors and background */ +.landing-community-support-item:has(.landing-tutorial-icon--pink):hover { + border-color: var(--feature-pink); + background-color: rgba(236, 72, 153, 0.1); +} + +.landing-community-support-item:has(.landing-tutorial-icon--purple):hover { + border-color: var(--feature-purple); + background-color: rgba(139, 92, 246, 0.1); +} + +.landing-community-support-item:has(.landing-tutorial-icon--blue):hover { + border-color: var(--feature-blue); + background-color: rgba(59, 130, 246, 0.1); +} + +.landing-community-support-icon { + width: 30px; + height: 30px; + border-radius: var(--radius-full); + display: flex; + align-items: center; + justify-content: center; + font-size: 20px; + color: var(--text-primary); + position: relative; +} + +.landing-community-support-text { + flex: 1; + display: flex; + flex-direction: column; + gap: 2px; +} + +.landing-community-support-text h3 { + font-size: var(--font-size-lg) !important; + font-weight: 600; + margin: 0; + text-align: left; +} + +.landing-community-support-text p { + font-size: var(--font-size-sm) !important; + font-weight: 400; + margin: 0; + text-align: left; + line-height: 1.4; + color: var(--text-secondary); +} + +/* Light theme feature item hover effects with icon-specific colors */ +[data-md-color-scheme="default"] + .landing-feature-item:has(.landing-tutorial-icon--blue):hover { + border-color: var(--feature-blue) !important; +} + +[data-md-color-scheme="default"] + .landing-feature-item:has(.landing-tutorial-icon--red):hover { + border-color: var(--feature-red) !important; +} + +[data-md-color-scheme="default"] + .landing-feature-item:has(.landing-tutorial-icon--purple):hover { + border-color: var(--feature-purple) !important; +} + +[data-md-color-scheme="default"] + .landing-feature-item:has(.landing-tutorial-icon--green):hover { + border-color: var(--feature-green) !important; +} + +[data-md-color-scheme="default"] + .landing-feature-item:has(.landing-tutorial-icon--orange):hover { + border-color: var(--feature-orange) !important; +} + +[data-md-color-scheme="default"] + .landing-feature-item:has(.landing-tutorial-icon--pink):hover { + border-color: var(--feature-pink) !important; +} + +[data-md-color-scheme="default"] + .landing-feature-item:has(.landing-tutorial-icon--navy):hover { + border-color: var(--feature-navy) !important; +} + +[data-md-color-scheme="default"] + .landing-feature-item:has(.landing-tutorial-icon--forest):hover { + border-color: var(--feature-forest) !important; +} + +/* Light theme integration item hover effects with icon-specific colors and background */ +[data-md-color-scheme="default"] + .landing-integration-item:has(.landing-tutorial-icon--orange):hover { + border-color: var(--feature-orange) !important; + background-color: rgba(249, 115, 22, 0.05) !important; +} + +[data-md-color-scheme="default"] + .landing-integration-item:has(.landing-tutorial-icon--blue):hover { + border-color: var(--feature-blue) !important; + background-color: rgba(59, 130, 246, 0.05) !important; +} + +[data-md-color-scheme="default"] + .landing-integration-item:has(.landing-tutorial-icon--purple):hover { + border-color: var(--feature-purple) !important; + background-color: rgba(139, 92, 246, 0.05) !important; +} + +[data-md-color-scheme="default"] + .landing-integration-item:has(.landing-tutorial-icon--green):hover { + border-color: var(--feature-green) !important; + background-color: rgba(16, 185, 129, 0.05) !important; +} + +[data-md-color-scheme="default"] + .landing-integration-item:has(.landing-tutorial-icon--navy):hover { + border-color: var(--feature-navy) !important; + background-color: rgba(30, 64, 175, 0.05) !important; +} + +[data-md-color-scheme="default"] + .landing-integration-item:has(.landing-tutorial-icon--red):hover { + border-color: var(--feature-red) !important; + background-color: rgba(239, 68, 68, 0.05) !important; +} + +/* Light theme community support item hover effects with icon-specific colors and background */ +[data-md-color-scheme="default"] + .landing-community-support-item:has(.landing-tutorial-icon--pink):hover { + border-color: var(--feature-pink) !important; + background-color: rgba(236, 72, 153, 0.05) !important; +} + +[data-md-color-scheme="default"] + .landing-community-support-item:has(.landing-tutorial-icon--purple):hover { + border-color: var(--feature-purple) !important; + background-color: rgba(139, 92, 246, 0.05) !important; +} + +[data-md-color-scheme="default"] + .landing-community-support-item:has(.landing-tutorial-icon--blue):hover { + border-color: var(--feature-blue) !important; + background-color: rgba(59, 130, 246, 0.05) !important; +} + +/* Light theme border colors for sections */ +[data-md-color-scheme="default"] .landing-feature-item, +[data-md-color-scheme="default"] .landing-integration-item, +[data-md-color-scheme="default"] .landing-tutorial-card, +[data-md-color-scheme="default"] .landing-community-support-item { + border-color: #bebebe !important; +} + +/* Light theme icon background colors */ +[data-md-color-scheme="default"] + .landing-feature-icon.landing-tutorial-icon--blue { + background-color: rgb(236, 246, 255); +} + +[data-md-color-scheme="default"] + .landing-feature-icon.landing-tutorial-icon--red { + background-color: rgb(254, 242, 242); +} + +[data-md-color-scheme="default"] + .landing-feature-icon.landing-tutorial-icon--purple { + background-color: rgb(245, 243, 255); +} + +[data-md-color-scheme="default"] + .landing-feature-icon.landing-tutorial-icon--green { + background-color: rgb(236, 253, 245); +} + +[data-md-color-scheme="default"] + .landing-feature-icon.landing-tutorial-icon--orange { + background-color: rgb(255, 247, 237); +} + +[data-md-color-scheme="default"] + .landing-feature-icon.landing-tutorial-icon--pink { + background-color: rgb(253, 242, 248); +} + +[data-md-color-scheme="default"] + .landing-feature-icon.landing-tutorial-icon--navy { + background-color: rgb(239, 246, 255); +} + +[data-md-color-scheme="default"] + .landing-feature-icon.landing-tutorial-icon--forest { + background-color: rgb(240, 253, 250); +} + +/* Theme-specific icon visibility */ +[data-md-color-scheme="default"] .light-theme-icon { + display: block; +} + +[data-md-color-scheme="default"] .dark-theme-icon { + display: none; +} + +[data-md-color-scheme="slate"] .light-theme-icon { + display: none; +} + +[data-md-color-scheme="slate"] .dark-theme-icon { + display: block; +} + +/* Responsive Design */ +@media (max-width: 768px) { + .landing-tutorial-row { + flex-direction: column; + gap: var(--spacing-sm); + } + + .landing-features-list { + grid-template-columns: repeat(2, 1fr); + } + + .landing-integration-grid { + grid-template-columns: repeat(2, 1fr); + } + + .landing-community-support-grid { + grid-template-columns: 1fr; + } + + .landing-hero-content { + flex-direction: column; + align-items: flex-start; + gap: var(--spacing-md); + } + + .landing-hero-buttons { + align-self: stretch; + justify-content: center; + } +} diff --git a/overrides/css/output.css b/overrides/css/output.css new file mode 100644 index 00000000..ee15b8c8 --- /dev/null +++ b/overrides/css/output.css @@ -0,0 +1,1608 @@ +/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */ +@layer properties; +@layer theme, base, components, utilities; +@layer theme { + :root, :host { + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; + --color-red-400: oklch(70.4% 0.191 22.216); + --color-yellow-300: oklch(90.5% 0.182 98.111); + --color-blue-50: oklch(97% 0.014 254.604); + --color-blue-600: oklch(54.6% 0.245 262.881); + --color-gray-100: oklch(96.7% 0.003 264.542); + --color-gray-200: oklch(92.8% 0.006 264.531); + --color-gray-300: oklch(87.2% 0.01 258.338); + --color-gray-500: oklch(55.1% 0.027 264.364); + --color-gray-700: oklch(37.3% 0.034 259.733); + --color-black: #000; + --color-white: #fff; + --spacing: 0.25rem; + --text-xs: 0.75rem; + --text-xs--line-height: calc(1 / 0.75); + --text-sm: 0.875rem; + --text-sm--line-height: calc(1.25 / 0.875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --radius-sm: 0.25rem; + --radius-md: 0.375rem; + --radius-lg: 0.5rem; + --radius-xl: 0.75rem; + --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --blur-md: 12px; + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + } +} +@layer base { + *, ::after, ::before, ::backdrop, ::file-selector-button { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid; + } + html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + tab-size: 4; + font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; + } + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + b, strong { + font-weight: bolder; + } + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em; + } + small { + font-size: 80%; + } + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + :-moz-focusring { + outline: auto; + } + progress { + vertical-align: baseline; + } + summary { + display: list-item; + } + ol, ul, menu { + list-style: none; + } + img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; + } + img, video { + max-width: 100%; + height: auto; + } + button, input, select, optgroup, textarea, ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + border-radius: 0; + background-color: transparent; + opacity: 1; + } + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + ::file-selector-button { + margin-inline-end: 4px; + } + ::placeholder { + opacity: 1; + } + @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { + ::placeholder { + color: currentcolor; + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, currentcolor 50%, transparent); + } + } + } + textarea { + resize: vertical; + } + ::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + :-moz-ui-invalid { + box-shadow: none; + } + button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { + appearance: button; + } + ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; + } + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } +} +@layer utilities { + .pointer-events-auto { + pointer-events: auto; + } + .visible { + visibility: visible; + } + .absolute { + position: absolute; + } + .fixed { + position: fixed; + } + .relative { + position: relative; + } + .static { + position: static; + } + .sticky { + position: sticky; + } + .inset-0 { + inset: calc(var(--spacing) * 0); + } + .top-0 { + top: calc(var(--spacing) * 0); + } + .top-\[120px\] { + top: 120px; + } + .top-full { + top: 100%; + } + .right-2 { + right: calc(var(--spacing) * 2); + } + .bottom-5 { + bottom: calc(var(--spacing) * 5); + } + .bottom-\[-5px\] { + bottom: -5px; + } + .left-0 { + left: calc(var(--spacing) * 0); + } + .left-1 { + left: calc(var(--spacing) * 1); + } + .left-1\/2 { + left: calc(1/2 * 100%); + } + .isolate { + isolation: isolate; + } + .z-50 { + z-index: 50; + } + .container { + width: 100%; + @media (width >= 40rem) { + max-width: 40rem; + } + @media (width >= 48rem) { + max-width: 48rem; + } + @media (width >= 64rem) { + max-width: 64rem; + } + @media (width >= 80rem) { + max-width: 80rem; + } + @media (width >= 96rem) { + max-width: 96rem; + } + } + .mx-auto { + margin-inline: auto; + } + .mt-1 { + margin-top: calc(var(--spacing) * 1); + } + .mt-2 { + margin-top: calc(var(--spacing) * 2); + } + .mt-10 { + margin-top: calc(var(--spacing) * 10); + } + .mb-2 { + margin-bottom: calc(var(--spacing) * 2); + } + .mb-3 { + margin-bottom: calc(var(--spacing) * 3); + } + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + .ml-1 { + margin-left: calc(var(--spacing) * 1); + } + .ml-2 { + margin-left: calc(var(--spacing) * 2); + } + .block { + display: block; + } + .contents { + display: contents; + } + .flex { + display: flex; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline { + display: inline; + } + .inline-block { + display: inline-block; + } + .inline-flex { + display: inline-flex; + } + .table { + display: table; + } + .h-0 { + height: calc(var(--spacing) * 0); + } + .h-0\.5 { + height: calc(var(--spacing) * 0.5); + } + .h-4 { + height: calc(var(--spacing) * 4); + } + .h-5 { + height: calc(var(--spacing) * 5); + } + .h-6 { + height: calc(var(--spacing) * 6); + } + .h-7 { + height: calc(var(--spacing) * 7); + } + .h-11 { + height: calc(var(--spacing) * 11); + } + .h-12 { + height: calc(var(--spacing) * 12); + } + .h-\[calc\(100vh-120px\)\] { + height: calc(100vh - 120px); + } + .h-full { + height: 100%; + } + .w-4 { + width: calc(var(--spacing) * 4); + } + .w-5 { + width: calc(var(--spacing) * 5); + } + .w-7 { + width: calc(var(--spacing) * 7); + } + .w-12 { + width: calc(var(--spacing) * 12); + } + .w-40 { + width: calc(var(--spacing) * 40); + } + .w-\[430px\] { + width: 430px; + } + .w-\[450px\] { + width: 450px; + } + .w-\[660px\] { + width: 660px; + } + .w-full { + width: 100%; + } + .flex-1 { + flex: 1; + } + .flex-shrink { + flex-shrink: 1; + } + .flex-shrink-0 { + flex-shrink: 0; + } + .shrink-0 { + flex-shrink: 0; + } + .flex-grow { + flex-grow: 1; + } + .border-collapse { + border-collapse: collapse; + } + .-translate-x-1 { + --tw-translate-x: calc(var(--spacing) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .-translate-x-1\/2 { + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .rotate-90 { + rotate: 90deg; + } + .transform { + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); + } + .cursor-pointer { + cursor: pointer; + } + .resize { + resize: both; + } + .grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + .flex-col { + flex-direction: column; + } + .flex-wrap { + flex-wrap: wrap; + } + .items-center { + align-items: center; + } + .justify-between { + justify-content: space-between; + } + .justify-center { + justify-content: center; + } + .gap-1 { + gap: calc(var(--spacing) * 1); + } + .gap-2 { + gap: calc(var(--spacing) * 2); + } + .gap-2\.5 { + gap: calc(var(--spacing) * 2.5); + } + .gap-4 { + gap: calc(var(--spacing) * 4); + } + .gap-6 { + gap: calc(var(--spacing) * 6); + } + .space-y-1 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-2 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-4 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-x-0 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 0) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-x-reverse))); + } + } + .space-x-0\.5 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-x-reverse))); + } + } + .space-x-1 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 1) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-x-reverse))); + } + } + .space-x-2 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); + } + } + .overflow-y-auto { + overflow-y: auto; + } + .rounded-full { + border-radius: calc(infinity * 1px); + } + .rounded-lg { + border-radius: var(--radius-lg); + } + .rounded-md { + border-radius: var(--radius-md); + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .border-2 { + border-style: var(--tw-border-style); + border-width: 2px; + } + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + .\!border-gray-200 { + border-color: var(--color-gray-200) !important; + } + .border-\[\#4a90e2\] { + border-color: #4a90e2; + } + .border-black { + border-color: var(--color-black); + } + .border-gray-300 { + border-color: var(--color-gray-300); + } + .border-gray-700 { + border-color: var(--color-gray-700); + } + .bg-\[\#7782FF\] { + background-color: #7782FF; + } + .bg-\[\#121212\] { + background-color: #121212; + } + .bg-transparent { + background-color: transparent; + } + .bg-white { + background-color: var(--color-white); + } + .object-contain { + object-fit: contain; + } + .p-2 { + padding: calc(var(--spacing) * 2); + } + .p-3 { + padding: calc(var(--spacing) * 3); + } + .p-4 { + padding: calc(var(--spacing) * 4); + } + .p-5 { + padding: calc(var(--spacing) * 5); + } + .p-6 { + padding: calc(var(--spacing) * 6); + } + .px-1 { + padding-inline: calc(var(--spacing) * 1); + } + .px-1\.5 { + padding-inline: calc(var(--spacing) * 1.5); + } + .px-3 { + padding-inline: calc(var(--spacing) * 3); + } + .px-4 { + padding-inline: calc(var(--spacing) * 4); + } + .px-6 { + padding-inline: calc(var(--spacing) * 6); + } + .px-10 { + padding-inline: calc(var(--spacing) * 10); + } + .py-1 { + padding-block: calc(var(--spacing) * 1); + } + .py-1\.5 { + padding-block: calc(var(--spacing) * 1.5); + } + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + .py-10 { + padding-block: calc(var(--spacing) * 10); + } + .pt-4 { + padding-top: calc(var(--spacing) * 4); + } + .pt-5 { + padding-top: calc(var(--spacing) * 5); + } + .text-center { + text-align: center; + } + .text-left { + text-align: left; + } + .text-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + .text-lg { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + .text-\[14px\] { + font-size: 14px; + } + .text-\[15px\] { + font-size: 15px; + } + .text-\[17px\] { + font-size: 17px; + } + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + .font-medium { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + .text-nowrap { + text-wrap: nowrap; + } + .text-wrap { + text-wrap: wrap; + } + .whitespace-nowrap { + white-space: nowrap; + } + .\!text-white { + color: var(--color-white) !important; + } + .text-\[rgba\(255\,255\,255\,0\.6\)\] { + color: rgba(255,255,255,0.6); + } + .text-black { + color: var(--color-black); + } + .text-blue-600 { + color: var(--color-blue-600); + } + .text-gray-300 { + color: var(--color-gray-300); + } + .text-gray-500 { + color: var(--color-gray-500); + } + .text-red-400 { + color: var(--color-red-400); + } + .text-white { + color: var(--color-white); + } + .text-white\/90 { + color: color-mix(in srgb, #fff 90%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, var(--color-white) 90%, transparent); + } + } + .text-yellow-300 { + color: var(--color-yellow-300); + } + .capitalize { + text-transform: capitalize; + } + .lowercase { + text-transform: lowercase; + } + .uppercase { + text-transform: uppercase; + } + .underline { + text-decoration-line: underline; + } + .placeholder-\[rgba\(255\,255\,255\,0\.6\)\] { + &::placeholder { + color: rgba(255,255,255,0.6); + } + } + .caret-white { + caret-color: var(--color-white); + } + .opacity-100 { + opacity: 100%; + } + .shadow-lg { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .ring { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .outline { + outline-style: var(--tw-outline-style); + outline-width: 1px; + } + .grayscale { + --tw-grayscale: grayscale(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(var(--blur-md)); + -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,); + } + .backdrop-filter { + -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,); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-opacity { + transition-property: opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-transform { + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .duration-200 { + --tw-duration: 200ms; + transition-duration: 200ms; + } + .duration-300 { + --tw-duration: 300ms; + transition-duration: 300ms; + } + .duration-500 { + --tw-duration: 500ms; + transition-duration: 500ms; + } + .ease-in-out { + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + } + .outline-none { + --tw-outline-style: none; + outline-style: none; + } + .group-hover\:flex { + &:is(:where(.group):hover *) { + @media (hover: hover) { + display: flex; + } + } + } + .group-hover\:translate-x-1 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + --tw-translate-x: calc(var(--spacing) * 1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + .group-hover\:flex-wrap { + &:is(:where(.group):hover *) { + @media (hover: hover) { + flex-wrap: wrap; + } + } + } + .group-hover\:gap-x-8 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + column-gap: calc(var(--spacing) * 8); + } + } + } + .group-hover\:gap-y-4 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + row-gap: calc(var(--spacing) * 4); + } + } + } + .hover\:bg-\[\#6672fa\] { + &:hover { + @media (hover: hover) { + background-color: #6672fa; + } + } + } + .hover\:bg-blue-50 { + &:hover { + @media (hover: hover) { + background-color: var(--color-blue-50); + } + } + } + .hover\:bg-gray-100 { + &:hover { + @media (hover: hover) { + background-color: var(--color-gray-100); + } + } + } + .hover\:bg-white { + &:hover { + @media (hover: hover) { + background-color: var(--color-white); + } + } + } + .hover\:text-\[\#6b76e3\] { + &:hover { + @media (hover: hover) { + color: #6b76e3; + } + } + } + .hover\:text-\[\#7782FF\] { + &:hover { + @media (hover: hover) { + color: #7782FF; + } + } + } + .hover\:text-black { + &:hover { + @media (hover: hover) { + color: var(--color-black); + } + } + } + .hover\:shadow-xl { + &:hover { + @media (hover: hover) { + --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + .focus-visible\:ring-2 { + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus-visible\:ring-offset-2 { + &:focus-visible { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + } + .focus-visible\:outline-none { + &:focus-visible { + --tw-outline-style: none; + outline-style: none; + } + } + .active\:scale-98 { + &:active { + --tw-scale-x: 98%; + --tw-scale-y: 98%; + --tw-scale-z: 98%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } + .disabled\:pointer-events-none { + &:disabled { + pointer-events: none; + } + } + .disabled\:opacity-50 { + &:disabled { + opacity: 50%; + } + } + .sm\:grid-cols-3 { + @media (width >= 40rem) { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + .sm\:px-6 { + @media (width >= 40rem) { + padding-inline: calc(var(--spacing) * 6); + } + } + .md\:mt-0 { + @media (width >= 48rem) { + margin-top: calc(var(--spacing) * 0); + } + } + .md\:h-4 { + @media (width >= 48rem) { + height: calc(var(--spacing) * 4); + } + } + .md\:h-7 { + @media (width >= 48rem) { + height: calc(var(--spacing) * 7); + } + } + .md\:w-4 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 4); + } + } + .md\:w-52 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 52); + } + } + .md\:max-w-fit { + @media (width >= 48rem) { + max-width: fit-content; + } + } + .md\:flex-row { + @media (width >= 48rem) { + flex-direction: row; + } + } + .md\:items-center { + @media (width >= 48rem) { + align-items: center; + } + } + .md\:items-start { + @media (width >= 48rem) { + align-items: flex-start; + } + } + .md\:justify-between { + @media (width >= 48rem) { + justify-content: space-between; + } + } + .md\:justify-start { + @media (width >= 48rem) { + justify-content: flex-start; + } + } + .md\:gap-1 { + @media (width >= 48rem) { + gap: calc(var(--spacing) * 1); + } + } + .md\:gap-2 { + @media (width >= 48rem) { + gap: calc(var(--spacing) * 2); + } + } + .md\:gap-3 { + @media (width >= 48rem) { + gap: calc(var(--spacing) * 3); + } + } + .md\:px-5 { + @media (width >= 48rem) { + padding-inline: calc(var(--spacing) * 5); + } + } + .md\:font-semibold { + @media (width >= 48rem) { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + } + .md\:text-white { + @media (width >= 48rem) { + color: var(--color-white); + } + } + .lg\:block { + @media (width >= 64rem) { + display: block; + } + } + .lg\:flex { + @media (width >= 64rem) { + display: flex; + } + } + .lg\:hidden { + @media (width >= 64rem) { + display: none; + } + } + .lg\:w-\[75\%\] { + @media (width >= 64rem) { + width: 75%; + } + } + .lg\:flex-grow { + @media (width >= 64rem) { + flex-grow: 1; + } + } + .lg\:grid-cols-4 { + @media (width >= 64rem) { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } + .lg\:flex-row { + @media (width >= 64rem) { + flex-direction: row; + } + } + .lg\:items-center { + @media (width >= 64rem) { + align-items: center; + } + } + .lg\:justify-between { + @media (width >= 64rem) { + justify-content: space-between; + } + } + .lg\:justify-end { + @media (width >= 64rem) { + justify-content: flex-end; + } + } + .lg\:gap-4 { + @media (width >= 64rem) { + gap: calc(var(--spacing) * 4); + } + } + .lg\:px-8 { + @media (width >= 64rem) { + padding-inline: calc(var(--spacing) * 8); + } + } + .lg\:text-left { + @media (width >= 64rem) { + text-align: left; + } + } + .xl\:px-10 { + @media (width >= 80rem) { + padding-inline: calc(var(--spacing) * 10); + } + } + .xl\:px-12 { + @media (width >= 80rem) { + padding-inline: calc(var(--spacing) * 12); + } + } + .\[\&_svg\]\:size-4 { + & svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + } + .\[\&_svg\]\:shrink-0 { + & svg { + flex-shrink: 0; + } + } +} +@layer utilities { + .hover\:text-\[\#7782FF\]:hover { + color: #7782ff; + } +} +.hero-gradient { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + --tw-gradient-from: #6A76E3; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + --tw-gradient-to: #45A4F3; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} +input { + color: #ffffff; +} +.custom-gradient { + background: linear-gradient( 180deg, rgba(255, 255, 255, 0.75) 0%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0.3) 100% ); +} +.theme-purple { + --color-primary-purple: rgba(107, 118, 227); + color: var(--color-primary-purple); + --color-card: rgba(107, 118, 227, 0.2); + --color-hover-card: rgba(126, 34, 206); + --color-tabs-background: rgba(107, 118, 227); + --color-tabs-title-text: rgba(107, 118, 227); +} +html, body { + margin: 0; + width: 100%; + height: 100%; + font-family: "Inter", sans-serif; + scroll-behavior: smooth; + scroll-padding-top: 8rem; +} +main { + min-height: calc(100vh - 8rem); + padding-top: 3rem; +} +.primary-button { + position: relative; + border: none; + color: white; + cursor: pointer; + border-radius: 6px; + background-origin: border-box; + background-clip: padding-box, border-box; + transition: all 0.3s ease; + background-color: rgba(107, 118, 227); + border: 1px solid transparent; + font-size: 12px; +} +.primary-button:hover { + background-color: hsl(233 53% 53%); +} +.primary-button:disabled { + opacity: 0.6; + cursor: not-allowed; + background-image: linear-gradient(180deg, #8cc7ff 0%, #7ab7ff 100%), linear-gradient(180deg, #8cc7ff 0%, #7ab7ff 100%); + box-shadow: none; +} +.secondary-button { + position: relative; + border: none; + color: #5764d9; + cursor: pointer; + border-radius: 6px; + background-origin: border-box; + background-clip: padding-box, border-box; + transition: all 0.3s ease; + background-color: white; + border: 1px solid transparent; + font-size: 12px; +} +.secondary-button:hover { + background-color: #f3f4f6; +} +.secondary-button:disabled { + opacity: 0.6; + cursor: not-allowed; + border-color: #cccccc; + background: transparent; + box-shadow: none; +} +.gradient-hover { + background: linear-gradient(to left, #6a76e3, #45a4f3); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} +.md-header { + position: fixed !important; + top: 70px !important; +} +.md-main__inner { + margin-top: 70px !important; +} +.md-sidebar { + top: 75px !important; +} +@media (min-width: 640px) and (max-width: 1023px) { + .md-sidebar { + top: 70px !important; + } +} +@media (min-width: 1024px) { + .md-sidebar { + top: 70px !important; + height: calc(100vh - 70px) !important; + } +} +nav.md-grid { + max-width: 100%; + margin-left: auto; + margin-right: auto; + padding-left: 1rem; + padding-right: 1rem; +} +@media (min-width: 640px) { + nav.md-grid { + padding-left: 1.5rem; + padding-right: 1.5rem; + } +} +@media (min-width: 1024px) { + nav.md-grid { + padding-left: 2rem; + padding-right: 2rem; + } +} +@media (min-width: 1280px) { + nav.md-grid { + padding-left: 2.5rem; + padding-right: 2.5rem; + } +} +.md-search__inner { + width: 20rem; +} +@media (max-width: 768px) { + .md-search__inner { + top: 80px !important; + } + .md-search__input { + pointer-events: auto !important; + color: black !important; + } +} +.md-header__title { + margin-left: 0.1rem; + width: 100px; +} +@media (min-width: 1025px) { + .md-header__title { + flex-grow: 0; + flex-basis: auto; + max-width: 400px; + } + .md-header__inner { + display: flex; + align-items: center; + justify-content: space-between; + } +} +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-rotate-x { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-y { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-z { + syntax: "*"; + inherits: false; +} +@property --tw-skew-x { + syntax: "*"; + inherits: false; +} +@property --tw-skew-y { + syntax: "*"; + inherits: false; +} +@property --tw-space-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-space-x-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false; +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false; +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0px; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-outline-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-blur { + syntax: "*"; + inherits: false; +} +@property --tw-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-invert { + syntax: "*"; + inherits: false; +} +@property --tw-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-duration { + syntax: "*"; + inherits: false; +} +@property --tw-ease { + syntax: "*"; + inherits: false; +} +@property --tw-scale-x { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-y { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-z { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-gradient-position { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-from { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-via { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-to { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-stops { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-via-stops { + syntax: "*"; + inherits: false; +} +@property --tw-gradient-from-position { + syntax: ""; + inherits: false; + initial-value: 0%; +} +@property --tw-gradient-via-position { + syntax: ""; + inherits: false; + initial-value: 50%; +} +@property --tw-gradient-to-position { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-translate-z: 0; + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-space-y-reverse: 0; + --tw-space-x-reverse: 0; + --tw-border-style: solid; + --tw-font-weight: initial; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-outline-style: solid; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; + --tw-duration: initial; + --tw-ease: initial; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-scale-z: 1; + --tw-gradient-position: initial; + --tw-gradient-from: #0000; + --tw-gradient-via: #0000; + --tw-gradient-to: #0000; + --tw-gradient-stops: initial; + --tw-gradient-via-stops: initial; + --tw-gradient-from-position: 0%; + --tw-gradient-via-position: 50%; + --tw-gradient-to-position: 100%; + } + } +} diff --git a/overrides/main.html b/overrides/main.html index 5de0874d..dd86cd45 100644 --- a/overrides/main.html +++ b/overrides/main.html @@ -2,4 +2,20 @@ {% block extrahead %} {{ super() }} +{% block htmltitle %} + OpenObserve Documentation +{% endblock %} +{% if page and page.meta and page.meta.description %} + +{% endif %} + + + {% endblock %} \ No newline at end of file diff --git a/overrides/partials/footer.html b/overrides/partials/footer.html new file mode 100644 index 00000000..7a9db5f6 --- /dev/null +++ b/overrides/partials/footer.html @@ -0,0 +1,561 @@ + + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+

+ Stay Updated + +

+

+ Get the latest OpenObserve insights +

+ +
+
+ +
+ +
+ +
+
+ +

+ By subscribing, you agree to receive product and marketing related updates from OpenObserve. +

+
+ +
+ + +
+ + + + +
+
+
+ Official AICPA SOC badge +
+ +
+

SOC2 Type II

+

Certified

+
+ +
+
+ + +
+
+

OpenObserve Inc. ©

+

3000 Sand Hill Rd Building 1, Suite 260, Menlo Park, CA 94025

+
+ + +
+
+ + +
diff --git a/overrides/partials/header.html b/overrides/partials/header.html index 8d09d5a3..bc943c83 100644 --- a/overrides/partials/header.html +++ b/overrides/partials/header.html @@ -1,165 +1,545 @@ - - - -{% set class = "md-header" %} -{% if "navigation.tabs.sticky" in features %} - {% set class = class ~ " md-header--shadow md-header--lifted" %} -{% elif "navigation.tabs" not in features %} - {% set class = class ~ " md-header--shadow" %} -{% endif %} - - -
- + - +
- {% endif %} - - - {% if "material/search" in config.plugins %} - - - - {% include "partials/search.html" %} - {% endif %} - - - {% if config.repo_url %} -
- {% include "partials/source.html" %} + + +
+
+
+ +
+ + OpenObserve + +
+ + Get Demo + + Star + + +
+ Open Menu + +
+
+
+ + + +
+
- {% endif %} - - - - {% if "navigation.tabs.sticky" in features %} - {% if "navigation.tabs" in features %} - {% include "partials/tabs.html" %} - {% endif %} - {% endif %} - \ No newline at end of file +
+ {% include "partials/navbar.html" %} + + + + diff --git a/overrides/partials/index.html b/overrides/partials/index.html new file mode 100644 index 00000000..d961682d --- /dev/null +++ b/overrides/partials/index.html @@ -0,0 +1,408 @@ +{% extends "base.html" %} + + +{% block content_nav %}{% endblock %} {% block content %} +
+
+ +
+ +
+
+
+ +

+ OpenObserve (O2) is a cloud-native observability platform that + unifies logs, metrics, and traces into one solution. +

+
+ +
+
+ + +
+

Quick Guides

+ +
+ + +
+

User Guides

+ +
+ + +
+

Popular Integrations

+ +
+ + +
+

Community & Support

+ +
+
+
+
+{% endblock %} diff --git a/overrides/partials/logo.html b/overrides/partials/logo.html new file mode 100644 index 00000000..3cb8dc0b --- /dev/null +++ b/overrides/partials/logo.html @@ -0,0 +1,3 @@ +{% block logo %} +{# Do nothing – completely removes the logo link element and its space #} +{% endblock %} \ No newline at end of file diff --git a/overrides/partials/navbar.html b/overrides/partials/navbar.html new file mode 100644 index 00000000..14170fbe --- /dev/null +++ b/overrides/partials/navbar.html @@ -0,0 +1,272 @@ + + + +{% set class = "md-header" %} {% if "navigation.tabs.sticky" in features %} {% +set class = class ~ " md-header--shadow md-header--lifted" %} {% elif +"navigation.tabs" not in features %} {% set class = class ~ " md-header--shadow" +%} {% endif %} + + +
+ +
diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..4abc3f35 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1136 @@ +{ + "name": "openobserve-docs", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@tailwindcss/cli": "^4.1.11", + "tailwindcss": "^4.1.11" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/cli": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.1.11.tgz", + "integrity": "sha512-7RAFOrVaXCFz5ooEG36Kbh+sMJiI2j4+Ozp71smgjnLfBRu7DTfoq8DsTvzse2/6nDeo2M3vS/FGaxfDgr3rtQ==", + "license": "MIT", + "dependencies": { + "@parcel/watcher": "^2.5.1", + "@tailwindcss/node": "4.1.11", + "@tailwindcss/oxide": "4.1.11", + "enhanced-resolve": "^5.18.1", + "mri": "^1.2.0", + "picocolors": "^1.1.1", + "tailwindcss": "4.1.11" + }, + "bin": { + "tailwindcss": "dist/index.mjs" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", + "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", + "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-x64": "4.1.11", + "@tailwindcss/oxide-freebsd-x64": "4.1.11", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-x64-musl": "4.1.11", + "@tailwindcss/oxide-wasm32-wasi": "4.1.11", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", + "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz", + "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz", + "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz", + "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz", + "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz", + "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz", + "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz", + "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz", + "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz", + "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.11", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz", + "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz", + "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide/node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", + "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..59aeb296 --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "@tailwindcss/cli": "^4.1.11", + "tailwindcss": "^4.1.11" + } +}