diff --git a/.gitignore b/.gitignore
index 2ccbe46..6b93b86 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,28 @@
-/node_modules/
+# deps
+node_modules/
+
+# keep_local - локальные файлы, не для git
+/_keep_local/
+
+# build output
+dist/
+.next/
+out/
+
+# vite
+# (frontend)
+
+# misc
+.DS_Store
+*.pem
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+# env files - начало
+.env*
+# env files - конец
+
+# typescript - начало
+*.tsbuildinfo
+next-env.d.ts
+# typescript - конец
diff --git a/3d_models/duck.glb b/3d_models/duck.glb
deleted file mode 100644
index 68b4375..0000000
Binary files a/3d_models/duck.glb and /dev/null differ
diff --git a/3d_models/duck_lowpoly.glb b/3d_models/duck_lowpoly.glb
deleted file mode 100644
index 50d07df..0000000
Binary files a/3d_models/duck_lowpoly.glb and /dev/null differ
diff --git a/cool_hacker.png b/apps/frontend/cool_hacker.png
similarity index 100%
rename from cool_hacker.png
rename to apps/frontend/cool_hacker.png
diff --git a/index.html b/apps/frontend/index.html
similarity index 100%
rename from index.html
rename to apps/frontend/index.html
diff --git a/main.js b/apps/frontend/main.js
similarity index 100%
rename from main.js
rename to apps/frontend/main.js
diff --git a/apps/frontend/package.json b/apps/frontend/package.json
new file mode 100644
index 0000000..56431c1
--- /dev/null
+++ b/apps/frontend/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "rubber-duck",
+ "version": "0.0.1",
+ "description": "Best debug tool - rubber duck",
+ "keywords": [
+ "rubber",
+ "duck",
+ "debug",
+ "tool",
+ "fun"
+ ],
+ "homepage": "https://github.com/Ku6epXBOCTuK/rubber-duck#readme",
+ "bugs": {
+ "url": "https://github.com/Ku6epXBOCTuK/rubber-duck/issues"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Ku6epXBOCTuK/rubber-duck.git"
+ },
+ "license": "MIT",
+ "author": "Ku6epXBOCTuK",
+ "type": "module",
+ "main": "index.js",
+ "scripts": {
+ "dev": "vite",
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "devDependencies": {
+ "vite": "^8.0.11"
+ }
+}
diff --git a/style.css b/apps/frontend/style.css
similarity index 100%
rename from style.css
rename to apps/frontend/style.css
diff --git a/vite.config.js b/apps/frontend/vite.config.js
similarity index 100%
rename from vite.config.js
rename to apps/frontend/vite.config.js
diff --git a/apps/mcp/.gitignore b/apps/mcp/.gitignore
new file mode 100644
index 0000000..5ef6a52
--- /dev/null
+++ b/apps/mcp/.gitignore
@@ -0,0 +1,41 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/versions
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# env files (can opt-in for committing if needed)
+.env*
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/apps/mcp/AGENTS.md b/apps/mcp/AGENTS.md
new file mode 100644
index 0000000..643577d
--- /dev/null
+++ b/apps/mcp/AGENTS.md
@@ -0,0 +1,9 @@
+
+
+# This is NOT the Next.js you know
+
+This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices.
+
+This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.
+
+
diff --git a/apps/mcp/CLAUDE.md b/apps/mcp/CLAUDE.md
new file mode 100644
index 0000000..43c994c
--- /dev/null
+++ b/apps/mcp/CLAUDE.md
@@ -0,0 +1 @@
+@AGENTS.md
diff --git a/apps/mcp/README.md b/apps/mcp/README.md
new file mode 100644
index 0000000..285b6d4
--- /dev/null
+++ b/apps/mcp/README.md
@@ -0,0 +1,45 @@
+# Rubber Duck MCP
+
+MCP-сервер для техники «резиновая уточка»: когда ИИ застревает в логическом цикле или склонен к
+галлюцинациям, он вызывает инструмент `quack()`, чтобы сформулировать мысль и продолжить.
+
+Сервер работает в режиме **Streamable HTTP** (stateless), развёртывается на Vercel, использует
+`mcp-handler` v2 + `@modelcontextprotocol/server` v2.
+
+## Эндпоинт
+
+```
+POST /api/mcp
+```
+
+Подключите этот URL как MCP-сервер (тип Streamable HTTP) в Cursor, Claude Desktop и других клиентах.
+
+## Инструменты
+
+- `quack` — возвращает кряк. Опциональный параметр `mood`: `happy | confused | excited | sleepy`.
+
+## Запуск
+
+```bash
+pnpm install
+pnpm dev # http://localhost:3000
+pnpm build
+pnpm start
+```
+
+## Проверка
+
+```bash
+curl -X POST http://localhost:3000/api/mcp \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json, text/event-stream" \
+ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"quack","arguments":{"mood":"happy"}}}'
+```
+
+## Деплой на Vercel
+
+```bash
+vercel --prod
+```
+
+(`rootDirectory` проекта — `apps/mcp`.)
diff --git a/apps/mcp/app/api/mcp/route.ts b/apps/mcp/app/api/mcp/route.ts
new file mode 100644
index 0000000..3c5645e
--- /dev/null
+++ b/apps/mcp/app/api/mcp/route.ts
@@ -0,0 +1,21 @@
+import { createMcpHandler } from "mcp-handler";
+import { registerDuckTools } from "@/lib/mcp";
+
+export const runtime = "nodejs";
+
+const post = createMcpHandler(
+ async (server) => {
+ registerDuckTools(server);
+ },
+ {
+ serverInfo: { name: "rubber-duck-mcp", version: "1.0.0" },
+ },
+);
+
+export async function GET(req: Request) {
+ return post(req);
+}
+
+export async function POST(req: Request) {
+ return post(req);
+}
diff --git a/apps/mcp/app/favicon.ico b/apps/mcp/app/favicon.ico
new file mode 100644
index 0000000..718d6fe
Binary files /dev/null and b/apps/mcp/app/favicon.ico differ
diff --git a/apps/mcp/app/globals.css b/apps/mcp/app/globals.css
new file mode 100644
index 0000000..4c18fb3
--- /dev/null
+++ b/apps/mcp/app/globals.css
@@ -0,0 +1,49 @@
+:root {
+ --background: #ffffff;
+ --foreground: #171717;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --background: #0a0a0a;
+ --foreground: #ededed;
+ }
+}
+
+html {
+ height: 100%;
+}
+
+html,
+body {
+ max-width: 100vw;
+ overflow-x: hidden;
+}
+
+body {
+ min-height: 100%;
+ display: flex;
+ flex-direction: column;
+ color: var(--foreground);
+ background: var(--background);
+ font-family: Arial, Helvetica, sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+* {
+ box-sizing: border-box;
+ padding: 0;
+ margin: 0;
+}
+
+a {
+ color: inherit;
+ text-decoration: none;
+}
+
+@media (prefers-color-scheme: dark) {
+ html {
+ color-scheme: dark;
+ }
+}
diff --git a/apps/mcp/app/layout.tsx b/apps/mcp/app/layout.tsx
new file mode 100644
index 0000000..0044570
--- /dev/null
+++ b/apps/mcp/app/layout.tsx
@@ -0,0 +1,15 @@
+import type { Metadata } from "next";
+import "./globals.css";
+
+export const metadata: Metadata = {
+ title: "Rubber Duck MCP",
+ description: "MCP server for rubber duck debugging — quack() to articulate your thinking.",
+};
+
+export default function RootLayout({ children }: { children: React.ReactNode }) {
+ return (
+
+
{children}
+
+ );
+}
diff --git a/apps/mcp/app/page.tsx b/apps/mcp/app/page.tsx
new file mode 100644
index 0000000..d06ef68
--- /dev/null
+++ b/apps/mcp/app/page.tsx
@@ -0,0 +1,23 @@
+export default function Home() {
+ return (
+
+ Rubber Duck MCP
+
+ MCP-сервер для техники «резиновая уточка»: когда ИИ застревает, он вызывает инструмент{" "}
+ quack(), чтобы сформулировать мысль и продолжить. Сервер работает в режиме
+ Streamable HTTP и предназначен для подключения в Cursor, Claude Desktop и других MCP-клиентах.
+
+ Эндпоинт
+
+ /api/mcp — подключите этот URL как MCP-сервер (тип Streamable HTTP).
+
+ Инструменты
+
+
+ quack — возвращает кряк. Опциональный параметр mood:{" "}
+ happy | confused | excited | sleepy.
+
+
+
+ );
+}
diff --git a/apps/mcp/lib/mcp.ts b/apps/mcp/lib/mcp.ts
new file mode 100644
index 0000000..295edd6
--- /dev/null
+++ b/apps/mcp/lib/mcp.ts
@@ -0,0 +1,38 @@
+import type { McpServer } from "@modelcontextprotocol/server";
+import { z } from "zod";
+
+const QUACKS = {
+ happy: ["QUACK! 🎉", "Quack quack! 😄", "QUAAACK! 🦆✨"],
+ confused: ["Qu...ack?", "Quack? 🤔", "Quaaack...?"],
+ excited: ["QUACK QUACK QUACK!", "QUAAACK!! 🔥", "Quack! Quack! Quack!"],
+ sleepy: ["quack... 😴", "quaack... 💤", "quack. *yawn*"],
+ default: ["Quack!", "Quack quack!", "QUACK!", "Quaaack!", "Quack. 🦆"],
+} as const;
+
+const MOODS = ["happy", "confused", "excited", "sleepy"] as const;
+
+function randomFrom(arr: readonly T[]): T {
+ return arr[Math.floor(Math.random() * arr.length)];
+}
+
+export function registerDuckTools(server: McpServer): void {
+ server.registerTool(
+ "quack",
+ {
+ title: "Quack",
+ description:
+ "Rubber duck quacks. Use when you're stuck, looping, or hallucinating. " +
+ "The act of calling forces you to articulate your current thinking out loud.",
+ inputSchema: z.object({
+ mood: z
+ .enum(MOODS)
+ .optional()
+ .describe("Mood of the duck. Omit for a random quack."),
+ }),
+ },
+ async ({ mood }) => {
+ const text = mood ? randomFrom(QUACKS[mood]) : randomFrom(QUACKS.default);
+ return { content: [{ type: "text", text }] };
+ },
+ );
+}
diff --git a/apps/mcp/next.config.ts b/apps/mcp/next.config.ts
new file mode 100644
index 0000000..e9ffa30
--- /dev/null
+++ b/apps/mcp/next.config.ts
@@ -0,0 +1,7 @@
+import type { NextConfig } from "next";
+
+const nextConfig: NextConfig = {
+ /* config options here */
+};
+
+export default nextConfig;
diff --git a/apps/mcp/package.json b/apps/mcp/package.json
new file mode 100644
index 0000000..3a49399
--- /dev/null
+++ b/apps/mcp/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "mcp",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start"
+ },
+ "dependencies": {
+ "@modelcontextprotocol/server": "^2.0.0",
+ "mcp-handler": "^2.1.1",
+ "next": "16.3.3",
+ "react": "19.2.8",
+ "react-dom": "19.2.8",
+ "zod": "^4.5.4"
+ },
+ "devDependencies": {
+ "@types/node": "^20",
+ "@types/react": "^19",
+ "@types/react-dom": "^19",
+ "typescript": "^5"
+ },
+ "packageManager": "pnpm@11.20.0"
+}
diff --git a/apps/mcp/tsconfig.json b/apps/mcp/tsconfig.json
new file mode 100644
index 0000000..3a13f90
--- /dev/null
+++ b/apps/mcp/tsconfig.json
@@ -0,0 +1,34 @@
+{
+ "compilerOptions": {
+ "target": "ES2017",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "react-jsx",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./*"]
+ }
+ },
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ ".next/dev/types/**/*.ts",
+ "**/*.mts"
+ ],
+ "exclude": ["node_modules"]
+}
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index e89a859..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,860 +0,0 @@
-{
- "name": "rubber-duck",
- "version": "0.0.1",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "rubber-duck",
- "version": "0.0.1",
- "license": "MIT",
- "devDependencies": {
- "vite": "^8.0.11"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
- "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
- "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@tybys/wasm-util": "^0.10.1"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- },
- "peerDependencies": {
- "@emnapi/core": "^1.7.1",
- "@emnapi/runtime": "^1.7.1"
- }
- },
- "node_modules/@oxc-project/types": {
- "version": "0.128.0",
- "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.128.0.tgz",
- "integrity": "sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/Boshen"
- }
- },
- "node_modules/@rolldown/binding-android-arm64": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.18.tgz",
- "integrity": "sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-darwin-arm64": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.18.tgz",
- "integrity": "sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-darwin-x64": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.18.tgz",
- "integrity": "sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-freebsd-x64": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.18.tgz",
- "integrity": "sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.18.tgz",
- "integrity": "sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-linux-arm64-gnu": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.18.tgz",
- "integrity": "sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-linux-arm64-musl": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.18.tgz",
- "integrity": "sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-linux-ppc64-gnu": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.18.tgz",
- "integrity": "sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-linux-s390x-gnu": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.18.tgz",
- "integrity": "sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-linux-x64-gnu": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.18.tgz",
- "integrity": "sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-linux-x64-musl": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.18.tgz",
- "integrity": "sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-openharmony-arm64": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.18.tgz",
- "integrity": "sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-wasm32-wasi": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.18.tgz",
- "integrity": "sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==",
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "1.10.0",
- "@emnapi/runtime": "1.10.0",
- "@napi-rs/wasm-runtime": "^1.1.4"
- },
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-win32-arm64-msvc": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.18.tgz",
- "integrity": "sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-win32-x64-msvc": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.18.tgz",
- "integrity": "sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.18.tgz",
- "integrity": "sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.10.2",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
- "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
- "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/lightningcss": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
- "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
- "dev": true,
- "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-android-arm64": "1.32.0",
- "lightningcss-darwin-arm64": "1.32.0",
- "lightningcss-darwin-x64": "1.32.0",
- "lightningcss-freebsd-x64": "1.32.0",
- "lightningcss-linux-arm-gnueabihf": "1.32.0",
- "lightningcss-linux-arm64-gnu": "1.32.0",
- "lightningcss-linux-arm64-musl": "1.32.0",
- "lightningcss-linux-x64-gnu": "1.32.0",
- "lightningcss-linux-x64-musl": "1.32.0",
- "lightningcss-win32-arm64-msvc": "1.32.0",
- "lightningcss-win32-x64-msvc": "1.32.0"
- }
- },
- "node_modules/lightningcss-android-arm64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
- "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
- "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
- "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
- "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
- "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
- "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
- "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
- "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
- "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
- "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "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.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
- "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.12",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
- "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.14",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz",
- "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/rolldown": {
- "version": "1.0.0-rc.18",
- "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.18.tgz",
- "integrity": "sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@oxc-project/types": "=0.128.0",
- "@rolldown/pluginutils": "1.0.0-rc.18"
- },
- "bin": {
- "rolldown": "bin/cli.mjs"
- },
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- },
- "optionalDependencies": {
- "@rolldown/binding-android-arm64": "1.0.0-rc.18",
- "@rolldown/binding-darwin-arm64": "1.0.0-rc.18",
- "@rolldown/binding-darwin-x64": "1.0.0-rc.18",
- "@rolldown/binding-freebsd-x64": "1.0.0-rc.18",
- "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.18",
- "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.18",
- "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.18",
- "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.18",
- "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.18",
- "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.18",
- "@rolldown/binding-linux-x64-musl": "1.0.0-rc.18",
- "@rolldown/binding-openharmony-arm64": "1.0.0-rc.18",
- "@rolldown/binding-wasm32-wasi": "1.0.0-rc.18",
- "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.18",
- "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.18"
- }
- },
- "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==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.16",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
- "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.4"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "license": "0BSD",
- "optional": true
- },
- "node_modules/undici-types": {
- "version": "7.19.2",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz",
- "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/vite": {
- "version": "8.0.11",
- "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.11.tgz",
- "integrity": "sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "lightningcss": "^1.32.0",
- "picomatch": "^4.0.4",
- "postcss": "^8.5.14",
- "rolldown": "1.0.0-rc.18",
- "tinyglobby": "^0.2.16"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^20.19.0 || >=22.12.0",
- "@vitejs/devtools": "^0.1.18",
- "esbuild": "^0.27.0 || ^0.28.0",
- "jiti": ">=1.21.0",
- "less": "^4.0.0",
- "sass": "^1.70.0",
- "sass-embedded": "^1.70.0",
- "stylus": ">=0.54.8",
- "sugarss": "^5.0.0",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "@vitejs/devtools": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/package.json b/package.json
index 9b62e56..d7cd953 100644
--- a/package.json
+++ b/package.json
@@ -1,32 +1,22 @@
{
- "name": "rubber-duck",
- "version": "0.0.1",
- "description": "Best debug tool - rubber duck",
- "keywords": [
- "rubber",
- "duck",
- "debug",
- "tool",
- "fun"
- ],
- "homepage": "https://github.com/Ku6epXBOCTuK/rubber-duck#readme",
- "bugs": {
- "url": "https://github.com/Ku6epXBOCTuK/rubber-duck/issues"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/Ku6epXBOCTuK/rubber-duck.git"
- },
- "license": "MIT",
- "author": "Ku6epXBOCTuK",
- "type": "module",
- "main": "index.js",
+ "name": "rubber-duck-monorepo",
+ "version": "1.0.0",
+ "description": "Rubber duck debugging - frontend + MCP server monorepo",
"scripts": {
- "dev": "vite",
- "refs": "npx serve refs",
- "test": "echo \"Error: no test specified\" && exit 1"
+ "dev": "pnpm --dir apps/frontend dev",
+ "build-frontend": "pnpm --dir apps/frontend build",
+ "build-mcp": "pnpm --dir apps/mcp build",
+ "dev-mcp": "pnpm --dir apps/mcp dev",
+ "typecheck-mcp": "pnpm --dir apps/mcp exec tsc --noEmit"
},
- "devDependencies": {
- "vite": "^8.0.11"
- }
+ "license": "ISC",
+ "devEngines": {
+ "packageManager": {
+ "name": "pnpm",
+ "version": "^11.20.0",
+ "onFail": "download"
+ }
+ },
+ "type": "module",
+ "private": "true"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..c1a651d
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,1302 @@
+---
+lockfileVersion: '9.0'
+
+importers:
+
+ .:
+ configDependencies: {}
+ packageManagerDependencies:
+ '@pnpm/exe':
+ specifier: ^11.20.0
+ version: 11.25.0
+ pnpm:
+ specifier: ^11.20.0
+ version: 11.25.0
+
+packages:
+
+ '@pnpm/exe@11.25.0':
+ resolution: {integrity: sha512-X19R2uC+VAJ4UJQE9c/PCdOXbDaWnZtad7WUrTHBFQuMVaK9MAHbyO/WgahQCuRtTmJkLbxcWKKCk+JeTYFm/g==}
+ hasBin: true
+
+ '@pnpm/linux-arm64@11.25.0':
+ resolution: {integrity: sha512-ra8akqhzsbcOhKSJ9fFV8H+Oc9uGQAcp/XmIBEdT+8hPPoZCit3+RNCHmg8bLoNvpSLtRvZE0WFCMj7WyzxeBA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@pnpm/linux-x64@11.25.0':
+ resolution: {integrity: sha512-pQl/L10diKQCbF73viRrtVU8qVWMTudUCSG1uZ+EWBNKtU9Sbxe6Q378diXDb1uTwSgUVMQoypxlC1MTzh7qvQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@pnpm/linuxstatic-arm64@11.25.0':
+ resolution: {integrity: sha512-cYcrbB/xN1N6/5VUlFuHblb1gNyJgZv1CF5Pk1T0sHJxQMY4DFJV3OqHVAgahxyUfSTaQcVLvH1H2JFvd/+sgw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@pnpm/linuxstatic-x64@11.25.0':
+ resolution: {integrity: sha512-HXDtaeQod16DDMUUcVLIMxvEc1jKn7IYsNPwbwAPs/Je/d3umRPJi3Ejjdn6e9qpXN6Oon+yvSsJr7B9oDt6KA==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@pnpm/macos-arm64@11.25.0':
+ resolution: {integrity: sha512-m/eAgEqKhiSexGxWPHNXNnSRI0hudymg6K7LbrU2EoDs9IgJ28OKEz9mGxMzhkYBweEquR4k5teMNes/aToy9w==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@pnpm/win-arm64@11.25.0':
+ resolution: {integrity: sha512-oAeECbtZ+eJziaBmPUkwJM8Dx7KVQ5FO367AXTjD2HGfB5ob1Bcu5hoUF5RBTgDBiP9fRQ1u13uAEpqar/6NLA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@pnpm/win-x64@11.25.0':
+ resolution: {integrity: sha512-8/n+wCc0a8TRYTMFqti93Vh0cscdJ25xfMyYSDdXrLUh2ccxSFuS+SE7cNPjd/nOXoFAJvdW0kwfbyRPLa16/w==}
+ cpu: [x64]
+ os: [win32]
+
+ '@reflink/reflink-darwin-arm64@0.1.19':
+ resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@reflink/reflink-darwin-x64@0.1.19':
+ resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@reflink/reflink-linux-arm64-gnu@0.1.19':
+ resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@reflink/reflink-linux-arm64-musl@0.1.19':
+ resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@reflink/reflink-linux-x64-gnu@0.1.19':
+ resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@reflink/reflink-linux-x64-musl@0.1.19':
+ resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@reflink/reflink-win32-arm64-msvc@0.1.19':
+ resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@reflink/reflink-win32-x64-msvc@0.1.19':
+ resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@reflink/reflink@0.1.19':
+ resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==}
+ engines: {node: '>= 10'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ pnpm@11.25.0:
+ resolution: {integrity: sha512-XN6SW08HX3Jetx+64YpC/+eEUkeJ8ZthxzHLhyHsKKruFg4BqNWvT+2ypCzb8wDv4j2zVrDUoXtNY+EfirfJVg==}
+ engines: {node: '>=22.13'}
+ hasBin: true
+
+snapshots:
+
+ '@pnpm/exe@11.25.0':
+ dependencies:
+ '@reflink/reflink': 0.1.19
+ detect-libc: 2.1.2
+ optionalDependencies:
+ '@pnpm/linux-arm64': 11.25.0
+ '@pnpm/linux-x64': 11.25.0
+ '@pnpm/linuxstatic-arm64': 11.25.0
+ '@pnpm/linuxstatic-x64': 11.25.0
+ '@pnpm/macos-arm64': 11.25.0
+ '@pnpm/win-arm64': 11.25.0
+ '@pnpm/win-x64': 11.25.0
+
+ '@pnpm/linux-arm64@11.25.0':
+ optional: true
+
+ '@pnpm/linux-x64@11.25.0':
+ optional: true
+
+ '@pnpm/linuxstatic-arm64@11.25.0':
+ optional: true
+
+ '@pnpm/linuxstatic-x64@11.25.0':
+ optional: true
+
+ '@pnpm/macos-arm64@11.25.0':
+ optional: true
+
+ '@pnpm/win-arm64@11.25.0':
+ optional: true
+
+ '@pnpm/win-x64@11.25.0':
+ optional: true
+
+ '@reflink/reflink-darwin-arm64@0.1.19':
+ optional: true
+
+ '@reflink/reflink-darwin-x64@0.1.19':
+ optional: true
+
+ '@reflink/reflink-linux-arm64-gnu@0.1.19':
+ optional: true
+
+ '@reflink/reflink-linux-arm64-musl@0.1.19':
+ optional: true
+
+ '@reflink/reflink-linux-x64-gnu@0.1.19':
+ optional: true
+
+ '@reflink/reflink-linux-x64-musl@0.1.19':
+ optional: true
+
+ '@reflink/reflink-win32-arm64-msvc@0.1.19':
+ optional: true
+
+ '@reflink/reflink-win32-x64-msvc@0.1.19':
+ optional: true
+
+ '@reflink/reflink@0.1.19':
+ optionalDependencies:
+ '@reflink/reflink-darwin-arm64': 0.1.19
+ '@reflink/reflink-darwin-x64': 0.1.19
+ '@reflink/reflink-linux-arm64-gnu': 0.1.19
+ '@reflink/reflink-linux-arm64-musl': 0.1.19
+ '@reflink/reflink-linux-x64-gnu': 0.1.19
+ '@reflink/reflink-linux-x64-musl': 0.1.19
+ '@reflink/reflink-win32-arm64-msvc': 0.1.19
+ '@reflink/reflink-win32-x64-msvc': 0.1.19
+
+ detect-libc@2.1.2: {}
+
+ pnpm@11.25.0: {}
+
+---
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .: {}
+
+ apps/frontend:
+ devDependencies:
+ vite:
+ specifier: ^8.0.11
+ version: 8.2.2(@types/node@20.19.43)
+
+ apps/mcp:
+ dependencies:
+ '@modelcontextprotocol/server':
+ specifier: ^2.0.0
+ version: 2.0.0
+ mcp-handler:
+ specifier: ^2.1.1
+ version: 2.1.1(@modelcontextprotocol/server@2.0.0)(next@16.3.3(@types/node@20.19.43)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))
+ next:
+ specifier: 16.3.3
+ version: 16.3.3(@types/node@20.19.43)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
+ react:
+ specifier: 19.2.8
+ version: 19.2.8
+ react-dom:
+ specifier: 19.2.8
+ version: 19.2.8(react@19.2.8)
+ zod:
+ specifier: ^4.5.4
+ version: 4.5.4
+ devDependencies:
+ '@types/node':
+ specifier: ^20
+ version: 20.19.43
+ '@types/react':
+ specifier: ^19
+ version: 19.2.18
+ '@types/react-dom':
+ specifier: ^19
+ version: 19.2.5(@types/react@19.2.18)
+ typescript:
+ specifier: ^5
+ version: 5.9.3
+
+packages:
+
+ '@emnapi/runtime@1.11.3':
+ resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==}
+
+ '@img/colour@1.1.0':
+ resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
+ engines: {node: '>=18'}
+
+ '@img/sharp-darwin-arm64@0.35.4':
+ resolution: {integrity: sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-darwin-x64@0.35.4':
+ resolution: {integrity: sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==}
+ engines: {node: '>=20.9.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-freebsd-wasm32@0.35.4':
+ resolution: {integrity: sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==}
+ engines: {node: '>=20.9.0'}
+ os: [freebsd]
+
+ '@img/sharp-libvips-darwin-arm64@1.3.3':
+ resolution: {integrity: sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.3.3':
+ resolution: {integrity: sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-linux-arm64@1.3.3':
+ resolution: {integrity: sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-arm@1.3.3':
+ resolution: {integrity: sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-ppc64@1.3.3':
+ resolution: {integrity: sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-riscv64@1.3.3':
+ resolution: {integrity: sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-s390x@1.3.3':
+ resolution: {integrity: sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-x64@1.3.3':
+ resolution: {integrity: sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.3.3':
+ resolution: {integrity: sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.3.3':
+ resolution: {integrity: sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-linux-arm64@0.35.4':
+ resolution: {integrity: sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-arm@0.35.4':
+ resolution: {integrity: sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-ppc64@0.35.4':
+ resolution: {integrity: sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==}
+ engines: {node: '>=20.9.0'}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-riscv64@0.35.4':
+ resolution: {integrity: sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-s390x@0.35.4':
+ resolution: {integrity: sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==}
+ engines: {node: '>=20.9.0'}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-x64@0.35.4':
+ resolution: {integrity: sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linuxmusl-arm64@0.35.4':
+ resolution: {integrity: sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-linuxmusl-x64@0.35.4':
+ resolution: {integrity: sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==}
+ engines: {node: '>=20.9.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-wasm32@0.35.4':
+ resolution: {integrity: sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==}
+ engines: {node: '>=20.9.0'}
+
+ '@img/sharp-webcontainers-wasm32@0.35.4':
+ resolution: {integrity: sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-arm64@0.35.4':
+ resolution: {integrity: sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@img/sharp-win32-ia32@0.35.4':
+ resolution: {integrity: sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==}
+ engines: {node: ^20.9.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@img/sharp-win32-x64@0.35.4':
+ resolution: {integrity: sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==}
+ engines: {node: '>=20.9.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@modelcontextprotocol/core@2.0.0':
+ resolution: {integrity: sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA==}
+ engines: {node: '>=20'}
+
+ '@modelcontextprotocol/server@2.0.0':
+ resolution: {integrity: sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw==}
+ engines: {node: '>=20'}
+
+ '@next/env@16.3.3':
+ resolution: {integrity: sha512-U2eYQRwXj+dsqxV79zFqExDdatnNY/ZWc2nsJU1p/OgT7fd3dXwlF6OjYaFQCfMoeTA19PWq+wVmYgimVA+V+g==}
+
+ '@next/swc-darwin-arm64@16.3.3':
+ resolution: {integrity: sha512-8Hiv32QJPwdV6KYJ8meR9SBA061tQqnIKTJDocvOXlEQqib0xMFpzArosuffFUUc0sslbh7QQ8a3Yey1QV8EIw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@next/swc-darwin-x64@16.3.3':
+ resolution: {integrity: sha512-A1lgKgwVchRYmSe467zdwhxT9040dd8lH+o65sL5Jet8fjB4kegw/rDyPIpYVRb6jAqwXFOJpjIXJLxQKLiE3A==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@next/swc-linux-arm64-gnu@16.3.3':
+ resolution: {integrity: sha512-bf0FIssMFueU2dm7vQEWWxk0c8UjKTdW0yzuh0sQsD8pf1+KCLDdaqhYZNMYGmXwEOiHAUzgBKudovIlcvvBjg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@next/swc-linux-arm64-musl@16.3.3':
+ resolution: {integrity: sha512-W7viwCk9JY/cAkdz/A273rd5bb3RgT/IHwR7Upv90tunjBWNtAAhGhoecHh+teRNRSinuAFmE+l7fwZ4YKkrXg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@next/swc-linux-x64-gnu@16.3.3':
+ resolution: {integrity: sha512-0W46zw1N3ODpI6n0GeivHvvob1pooozgZVqy65k0mh4/7vr+FbY9+WpHzNVXjHipJf/A3FDheBG19H1s5A25rA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@next/swc-linux-x64-musl@16.3.3':
+ resolution: {integrity: sha512-H4mBso8ZTMBPtdT0PN0pBx2ayTvQuTuvS6qT13d77yVFJXAPCxkyIhLTmdMaGTJs0krQYI/qpzdHijCeihXhbg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@next/swc-win32-arm64-msvc@16.3.3':
+ resolution: {integrity: sha512-cTMUJpcEGmeywofCUfhR+rSsoE33+rVPnPEYNTNdLNlsOeEg/vktOsKUSTb28vUGqD2jkm4Zaskcwn7OCI6FQg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@next/swc-win32-x64-msvc@16.3.3':
+ resolution: {integrity: sha512-2VR4cTBzHXaBjnGsuH6GyJjENzQOmHeAh11uY1iUhjm3j5dEUrVJuUj+VL78jaGi/Dik8xS76zEj18BsFhlVZQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-project/types@0.147.0':
+ resolution: {integrity: sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==}
+
+ '@rolldown/binding-android-arm-eabi@1.2.6':
+ resolution: {integrity: sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@rolldown/binding-android-arm64@1.2.6':
+ resolution: {integrity: sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.2.6':
+ resolution: {integrity: sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.2.6':
+ resolution: {integrity: sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.2.6':
+ resolution: {integrity: sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.2.6':
+ resolution: {integrity: sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.2.6':
+ resolution: {integrity: sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.2.6':
+ resolution: {integrity: sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.2.6':
+ resolution: {integrity: sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.2.6':
+ resolution: {integrity: sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.2.6':
+ resolution: {integrity: sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.2.6':
+ resolution: {integrity: sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.2.6':
+ resolution: {integrity: sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-win32-arm64-msvc@1.2.6':
+ resolution: {integrity: sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.2.6':
+ resolution: {integrity: sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.1':
+ resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
+
+ '@swc/helpers@0.5.23':
+ resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==}
+
+ '@types/node@20.19.43':
+ resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==}
+
+ '@types/react-dom@19.2.5':
+ resolution: {integrity: sha512-fMPwH9v7r/pp43yUd2/Mbiex5KouJwwR3dzHkhLREUC6764VyDsqxhAxv6OFEYR1RhjOyD1naqba8ECDBe7ZQg==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.18':
+ resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==}
+
+ baseline-browser-mapping@2.11.20:
+ resolution: {integrity: sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ caniuse-lite@1.0.30001810:
+ resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==}
+
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ lightningcss-android-arm64@1.33.0:
+ resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.33.0:
+ resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.33.0:
+ resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.33.0:
+ resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.33.0:
+ resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.33.0:
+ resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.33.0:
+ resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.33.0:
+ resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.33.0:
+ resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.33.0:
+ resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.33.0:
+ resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.33.0:
+ resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==}
+ engines: {node: '>= 12.0.0'}
+
+ mcp-handler@2.1.1:
+ resolution: {integrity: sha512-D/PAwxF9TexmixJY+FZMgYq9SSbGm3vtcUjwUHZ8tYYuOtGT3/KgAKBjO3UJZoXgW8nHDtv8ySOICMEZPD0b/Q==}
+ engines: {node: '>=20'}
+ hasBin: true
+ peerDependencies:
+ '@modelcontextprotocol/server': ^2.0.0
+ next: '>=13.0.0'
+ peerDependenciesMeta:
+ next:
+ optional: true
+
+ nanoid@3.3.18:
+ resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ next@16.3.3:
+ resolution: {integrity: sha512-tuRTx1nQ/yVw83cwJBo9F+njGUgMn3UHQycreWHB8XsStvvAh1AthbI8/4IpKnFaF58F+iSiHejYOlMQ/eq83g==}
+ engines: {node: '>=20.9.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.51.1
+ babel-plugin-react-compiler: '*'
+ react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ babel-plugin-react-compiler:
+ optional: true
+ sass:
+ optional: true
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.7:
+ resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==}
+ engines: {node: '>=12'}
+
+ postcss@8.5.23:
+ resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ postcss@8.5.26:
+ resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ react-dom@19.2.8:
+ resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==}
+ peerDependencies:
+ react: ^19.2.8
+
+ react@19.2.8:
+ resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==}
+ engines: {node: '>=0.10.0'}
+
+ rolldown@1.2.6:
+ resolution: {integrity: sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+
+ semver@7.8.5:
+ resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ sharp@0.35.4:
+ resolution: {integrity: sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==}
+ engines: {node: '>=20.9.0'}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ styled-jsx@5.1.6:
+ resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
+ engines: {node: '>= 12.0.0'}
+ peerDependencies:
+ '@babel/core': '*'
+ babel-plugin-macros: '*'
+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ babel-plugin-macros:
+ optional: true
+
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
+ engines: {node: '>=12.0.0'}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ vite@8.2.2:
+ resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.4.0 || ^0.5.0
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ zod@4.5.4:
+ resolution: {integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==}
+
+snapshots:
+
+ '@emnapi/runtime@1.11.3':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@img/colour@1.1.0':
+ optional: true
+
+ '@img/sharp-darwin-arm64@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.3.3
+ optional: true
+
+ '@img/sharp-darwin-x64@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.3.3
+ optional: true
+
+ '@img/sharp-freebsd-wasm32@0.35.4':
+ dependencies:
+ '@img/sharp-wasm32': 0.35.4
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-darwin-x64@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm64@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-linux-ppc64@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-linux-riscv64@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.3.3':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.3.3':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.3.3
+ optional: true
+
+ '@img/sharp-linux-arm@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.3.3
+ optional: true
+
+ '@img/sharp-linux-ppc64@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.3.3
+ optional: true
+
+ '@img/sharp-linux-riscv64@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-riscv64': 1.3.3
+ optional: true
+
+ '@img/sharp-linux-s390x@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.3.3
+ optional: true
+
+ '@img/sharp-linux-x64@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.3.3
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.3.3
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.35.4':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.3.3
+ optional: true
+
+ '@img/sharp-wasm32@0.35.4':
+ dependencies:
+ '@emnapi/runtime': 1.11.3
+ optional: true
+
+ '@img/sharp-webcontainers-wasm32@0.35.4':
+ dependencies:
+ '@img/sharp-wasm32': 0.35.4
+ optional: true
+
+ '@img/sharp-win32-arm64@0.35.4':
+ optional: true
+
+ '@img/sharp-win32-ia32@0.35.4':
+ optional: true
+
+ '@img/sharp-win32-x64@0.35.4':
+ optional: true
+
+ '@modelcontextprotocol/core@2.0.0':
+ dependencies:
+ zod: 4.5.4
+
+ '@modelcontextprotocol/server@2.0.0':
+ dependencies:
+ '@modelcontextprotocol/core': 2.0.0
+ zod: 4.5.4
+
+ '@next/env@16.3.3': {}
+
+ '@next/swc-darwin-arm64@16.3.3':
+ optional: true
+
+ '@next/swc-darwin-x64@16.3.3':
+ optional: true
+
+ '@next/swc-linux-arm64-gnu@16.3.3':
+ optional: true
+
+ '@next/swc-linux-arm64-musl@16.3.3':
+ optional: true
+
+ '@next/swc-linux-x64-gnu@16.3.3':
+ optional: true
+
+ '@next/swc-linux-x64-musl@16.3.3':
+ optional: true
+
+ '@next/swc-win32-arm64-msvc@16.3.3':
+ optional: true
+
+ '@next/swc-win32-x64-msvc@16.3.3':
+ optional: true
+
+ '@oxc-project/types@0.147.0': {}
+
+ '@rolldown/binding-android-arm-eabi@1.2.6':
+ optional: true
+
+ '@rolldown/binding-android-arm64@1.2.6':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.2.6':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.2.6':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.2.6':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.2.6':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.2.6':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.2.6':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.2.6':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.2.6':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.2.6':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.2.6':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.2.6':
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.2.6':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.2.6':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.1': {}
+
+ '@swc/helpers@0.5.23':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/node@20.19.43':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/react-dom@19.2.5(@types/react@19.2.18)':
+ dependencies:
+ '@types/react': 19.2.18
+
+ '@types/react@19.2.18':
+ dependencies:
+ csstype: 3.2.3
+
+ baseline-browser-mapping@2.11.20: {}
+
+ caniuse-lite@1.0.30001810: {}
+
+ chalk@5.6.2: {}
+
+ client-only@0.0.1: {}
+
+ commander@11.1.0: {}
+
+ csstype@3.2.3: {}
+
+ detect-libc@2.1.2: {}
+
+ fdir@6.5.0(picomatch@4.0.7):
+ optionalDependencies:
+ picomatch: 4.0.7
+
+ fsevents@2.3.3:
+ optional: true
+
+ lightningcss-android-arm64@1.33.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.33.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.33.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.33.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.33.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.33.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.33.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.33.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.33.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.33.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.33.0:
+ optional: true
+
+ lightningcss@1.33.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.33.0
+ lightningcss-darwin-arm64: 1.33.0
+ lightningcss-darwin-x64: 1.33.0
+ lightningcss-freebsd-x64: 1.33.0
+ lightningcss-linux-arm-gnueabihf: 1.33.0
+ lightningcss-linux-arm64-gnu: 1.33.0
+ lightningcss-linux-arm64-musl: 1.33.0
+ lightningcss-linux-x64-gnu: 1.33.0
+ lightningcss-linux-x64-musl: 1.33.0
+ lightningcss-win32-arm64-msvc: 1.33.0
+ lightningcss-win32-x64-msvc: 1.33.0
+
+ mcp-handler@2.1.1(@modelcontextprotocol/server@2.0.0)(next@16.3.3(@types/node@20.19.43)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)):
+ dependencies:
+ '@modelcontextprotocol/server': 2.0.0
+ chalk: 5.6.2
+ commander: 11.1.0
+ optionalDependencies:
+ next: 16.3.3(@types/node@20.19.43)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
+
+ nanoid@3.3.18: {}
+
+ next@16.3.3(@types/node@20.19.43)(react-dom@19.2.8(react@19.2.8))(react@19.2.8):
+ dependencies:
+ '@next/env': 16.3.3
+ '@swc/helpers': 0.5.23
+ baseline-browser-mapping: 2.11.20
+ caniuse-lite: 1.0.30001810
+ postcss: 8.5.23
+ react: 19.2.8
+ react-dom: 19.2.8(react@19.2.8)
+ styled-jsx: 5.1.6(react@19.2.8)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.3.3
+ '@next/swc-darwin-x64': 16.3.3
+ '@next/swc-linux-arm64-gnu': 16.3.3
+ '@next/swc-linux-arm64-musl': 16.3.3
+ '@next/swc-linux-x64-gnu': 16.3.3
+ '@next/swc-linux-x64-musl': 16.3.3
+ '@next/swc-win32-arm64-msvc': 16.3.3
+ '@next/swc-win32-x64-msvc': 16.3.3
+ sharp: 0.35.4(@types/node@20.19.43)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@types/node'
+ - babel-plugin-macros
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.7: {}
+
+ postcss@8.5.23:
+ dependencies:
+ nanoid: 3.3.18
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ postcss@8.5.26:
+ dependencies:
+ nanoid: 3.3.18
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ react-dom@19.2.8(react@19.2.8):
+ dependencies:
+ react: 19.2.8
+ scheduler: 0.27.0
+
+ react@19.2.8: {}
+
+ rolldown@1.2.6:
+ dependencies:
+ '@oxc-project/types': 0.147.0
+ '@rolldown/pluginutils': 1.0.1
+ optionalDependencies:
+ '@rolldown/binding-android-arm-eabi': 1.2.6
+ '@rolldown/binding-android-arm64': 1.2.6
+ '@rolldown/binding-darwin-arm64': 1.2.6
+ '@rolldown/binding-darwin-x64': 1.2.6
+ '@rolldown/binding-freebsd-x64': 1.2.6
+ '@rolldown/binding-linux-arm-gnueabihf': 1.2.6
+ '@rolldown/binding-linux-arm64-gnu': 1.2.6
+ '@rolldown/binding-linux-arm64-musl': 1.2.6
+ '@rolldown/binding-linux-ppc64-gnu': 1.2.6
+ '@rolldown/binding-linux-s390x-gnu': 1.2.6
+ '@rolldown/binding-linux-x64-gnu': 1.2.6
+ '@rolldown/binding-linux-x64-musl': 1.2.6
+ '@rolldown/binding-openharmony-arm64': 1.2.6
+ '@rolldown/binding-win32-arm64-msvc': 1.2.6
+ '@rolldown/binding-win32-x64-msvc': 1.2.6
+
+ scheduler@0.27.0: {}
+
+ semver@7.8.5:
+ optional: true
+
+ sharp@0.35.4(@types/node@20.19.43):
+ dependencies:
+ '@img/colour': 1.1.0
+ detect-libc: 2.1.2
+ semver: 7.8.5
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.35.4
+ '@img/sharp-darwin-x64': 0.35.4
+ '@img/sharp-freebsd-wasm32': 0.35.4
+ '@img/sharp-libvips-darwin-arm64': 1.3.3
+ '@img/sharp-libvips-darwin-x64': 1.3.3
+ '@img/sharp-libvips-linux-arm': 1.3.3
+ '@img/sharp-libvips-linux-arm64': 1.3.3
+ '@img/sharp-libvips-linux-ppc64': 1.3.3
+ '@img/sharp-libvips-linux-riscv64': 1.3.3
+ '@img/sharp-libvips-linux-s390x': 1.3.3
+ '@img/sharp-libvips-linux-x64': 1.3.3
+ '@img/sharp-libvips-linuxmusl-arm64': 1.3.3
+ '@img/sharp-libvips-linuxmusl-x64': 1.3.3
+ '@img/sharp-linux-arm': 0.35.4
+ '@img/sharp-linux-arm64': 0.35.4
+ '@img/sharp-linux-ppc64': 0.35.4
+ '@img/sharp-linux-riscv64': 0.35.4
+ '@img/sharp-linux-s390x': 0.35.4
+ '@img/sharp-linux-x64': 0.35.4
+ '@img/sharp-linuxmusl-arm64': 0.35.4
+ '@img/sharp-linuxmusl-x64': 0.35.4
+ '@img/sharp-webcontainers-wasm32': 0.35.4
+ '@img/sharp-win32-arm64': 0.35.4
+ '@img/sharp-win32-ia32': 0.35.4
+ '@img/sharp-win32-x64': 0.35.4
+ '@types/node': 20.19.43
+ optional: true
+
+ source-map-js@1.2.1: {}
+
+ styled-jsx@5.1.6(react@19.2.8):
+ dependencies:
+ client-only: 0.0.1
+ react: 19.2.8
+
+ tinyglobby@0.2.17:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.7)
+ picomatch: 4.0.7
+
+ tslib@2.8.1: {}
+
+ typescript@5.9.3: {}
+
+ undici-types@6.21.0: {}
+
+ vite@8.2.2(@types/node@20.19.43):
+ dependencies:
+ lightningcss: 1.33.0
+ picomatch: 4.0.7
+ postcss: 8.5.26
+ rolldown: 1.2.6
+ tinyglobby: 0.2.17
+ optionalDependencies:
+ '@types/node': 20.19.43
+ fsevents: 2.3.3
+
+ zod@4.5.4: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 0000000..852bf6b
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,2 @@
+packages:
+ - apps/*
diff --git a/refs/index.html b/refs/index.html
deleted file mode 100644
index 271a093..0000000
--- a/refs/index.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
- Refs
-
-
-
-
- ref1
- ref2
- ref3
- ref4
-
-
-
-
-
\ No newline at end of file
diff --git a/refs/ref1/index.html b/refs/ref1/index.html
deleted file mode 100644
index 2db5c95..0000000
--- a/refs/ref1/index.html
+++ /dev/null
@@ -1,399 +0,0 @@
-
-
-
-
-
- DUCKDEBUG.gg — Rubber Duck Debugging as a Service
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 🦆
-
-
- DUCKDEBUG
- .gg
-
-
-
-
-
-
-
-
-
-
-
-
-
- RUBBER DUCK DEBUGGING AS A SERVICE
-
-
-
- ТВОЙ УТЁНОК
- ВСЕГДА НА СВЯЗИ
-
-
-
- Объясни проблему утёнку.
- Получи решение. Или хотя бы quack.
-
-
-
-
-
-
-
-
- Бесплатный tier
-
-
-
- 24/7 онлайн
-
-
-
- Voice + Text
-
-
-
-
-
- 🦆
-
-
-
-
-
-
WHY DUCKDEBUG?
-
-
-
-
🦆
-
Классический Rubber Duck
-
Просто расскажи проблему. Утёнок слушает внимательно.
-
-
-
🤖
-
AI + Duck Hybrid
-
Иногда утёнок даёт реальные подсказки (на базе AI).
-
-
-
📡
-
Multiplayer Debug
-
Делитесь сессией с командой. Все смотрят на одного утёнка.
-
-
-
-
-
-
-
-
-
-
ROADMAP v0.1 → v1.0
-
-
-
-
- 01
-
-
-
MVP (Сейчас)
-
Базовый веб-утёнок + чат + voice-to-text
-
-
LIVE
-
-
-
-
- 02
-
-
-
MCP Сервер
-
- Подключай свой Minecraft сервер — утёнок будет дебажить моды и плагины в реальном времени
-
-
-
Q3 2026
-
-
-
-
- 03
-
-
-
Скины и Кастомизация
-
Cyberduck, Steampunk Duck, Matrix Duck, Gentoo Duck и др.
-
-
Q4 2026
-
-
-
-
- 04
-
-
-
Battle Pass
-
Еженедельные челленджи: "Debug 50 bugs", "Объясни legacy код без мата"
-
-
Q1 2027
-
-
-
-
- 05
-
-
-
Лутбоксы
-
- Rare скины, voice packs ("Quack but Russian", "Quack but Rust"), эксклюзивные ошибки
-
-
-
Q2 2027
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/refs/ref2/index.html b/refs/ref2/index.html
deleted file mode 100644
index a5da23f..0000000
--- a/refs/ref2/index.html
+++ /dev/null
@@ -1,1371 +0,0 @@
-
-
-
-
-
- DuckDebug.as – Rubber Duck Debugging as a Service
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- v0.1.0 – MVP Live
-
-
- 🦆 Rubber Duck
- Debugging as a Service
-
-
- // Explain your code line by line to our virtual duck.
- // 90% of bugs disappear when you do.
-
-
- 🦆 Start Debugging Now →
-
-
-
-
-
-
- $ duckdebug init --project my-app
-
-
🦆 Duck initialized! Ready to listen.
-
- $ duckdebug explain ./src/buggy.ts
-
-
- "Hmm, check line 42. That null looks suspicious..."
-
-
- ✨ Bug fixed! Confidence: 99.7% █
-
-
-
-
-
-
-
-
-
-
-
-
🦆
-
Virtual Duck Listener
-
- Explain your code line-by-line to our AI-powered rubber duck. It never judges, only listens and helps you
- find the bug.
-
-
-
-
🔍
-
Smart Bug Detection
-
Our duck analyzes your explanation in real-time and spots logical errors before you finish typing.
-
-
-
💬
-
Interactive Sessions
-
Ask follow-up questions, paste snippets, and get rubber-duck-style guidance in real-time conversations.
-
-
-
📊
-
Debug Analytics
-
Track your debugging sessions, common bug patterns, and your "aha!" moments over time.
-
-
-
🔌
-
IDE Integration
-
Connect directly from VS Code, JetBrains, or Neovim. No context switching needed during deep debugging.
-
-
-
🎮
-
Gamified Debugging
-
Earn XP, unlock duck skins, and climb the leaderboard as you squash more bugs every day.
-
-
-
-
-
-
-
-
-
-
-
-
-
Q1 2026 – Completed
-
🦆 MVP Launch
-
- Core rubber duck debugging session with AI-powered listener, basic analytics dashboard, and web interface.
- The duck is alive!
-
-
- Web App
- AI Duck Listener
- Basic Analytics
-
-
-
-
-
-
-
Q2 2026 – In Development
-
🔌 MCP Server
-
- Model Context Protocol support — connect DuckDebug to any MCP-compatible AI tool. Seamless integration with
- your existing dev toolchain, Claude, Cursor, and other AI agents.
-
-
- MCP Protocol
- Agent Integration
- API v2
-
-
-
-
-
-
-
Q3 2026 – Planned
-
🎨 Duck Skins & Customization
-
- Customize your duck with skins: Hacker Duck, Ninja Duck, Astronaut Duck, Cyberpunk Duck, and more. Express
- your debugging personality with custom quack sounds.
-
-
- Cosmetic Skins
- Custom Quacks
- Duck Avatar Builder
-
-
-
-
-
-
-
Q3 2026 – Planned
-
⚔️ Battle Pass
-
- Seasonal battle pass with debugging challenges, weekly missions, and exclusive rewards. Debug more, earn
- more. Limited-time legendary duck skins and titles await top debuggers!
-
-
- Season 1
- Daily Challenges
- Exclusive Rewards
-
-
-
-
-
-
-
Q4 2026 – Planned
-
📦 Loot Boxes
-
- Randomized loot boxes containing rare duck skins, debugging power-ups, XP boosters, and legendary items.
- Open with debug tokens earned from your debugging sessions.
-
-
- Loot Boxes
- Rare Items
- Trading System
-
-
-
-
-
-
-
-
-
-
-
Free Quack
-
$0/mo
-
- 5 debug sessions/day
- Basic duck listener
- Standard skins
- Community support
-
-
Get Started
-
-
-
Pro Debug
-
$9/mo
-
- Unlimited sessions
- Advanced AI duck
- All duck skins
- IDE integration
- Priority support
-
-
Start Now →
-
-
-
Team Flock
-
$29/mo
-
- Everything in Pro
- Up to 10 seats
- Shared duck sessions
- Team analytics
- SSO & API access
-
-
Contact Sales
-
-
-
-
-
-
-
-
Ready to Debug with a Duck? 🦆
-
Join thousands of developers who fixed their bugs by explaining them to a rubber duck.
-
- 🦆 Start Now — It's Free →
-
-
-
-
-
-
- © 2026 DuckDebug.as — Rubber Duck Debugging as a Service
- Built with 🦆 and questionable debugging practices.
-
-
-
-
-
diff --git a/refs/ref3/debug.html b/refs/ref3/debug.html
deleted file mode 100644
index 2fb8a04..0000000
--- a/refs/ref3/debug.html
+++ /dev/null
@@ -1,367 +0,0 @@
-
-
-
- Rubber Duck Debugging as a service
-
-
-
-
-
-
-
-
-
- const duck = new RubberDuck(); duck.listen(problem); trace.stack().filter(signal); if (confused) explain(out_loud); return plan.nextStep(); debugger; console.log('aha moment...'); assert.equal(got, expected); catch (e) { log(e.stack); } process.env.DEBUG = '*' heap.snapshot().analyze(); git diff HEAD~1 --stat npm run debug:verbose grep -r 'undefined' ./src curl -v http://localhost:3000 SELECT * FROM logs LIMIT 50; docker logs --tail 200 app strace -e trace=network -p $PID tcpdump -i any port 8080 breakpoint.set(line, 42);
-
-
-
-
-
-
-
-
-
- booting session...
-
-
-
-
-
- > RubberDuck.debug()
-
-
Explain the bug. Follow the path. Ship the fix.
-
-
-
-
-
-
-
-
-
-
- duck-session — bash
-
-
-
-
duck@debug:~$ ./start-session.sh
-
$ describe issue --env production
-
> analysing stack trace...
-
$ git log --oneline -10
-
> narrowing root cause...
-
$ strace -p $PID
-
> check▌
-
-
-
-
- rubber duck debugging as a service · v0.1.0-mvp
-
-
-
-
-
-
-
-
-
diff --git a/refs/ref3/duck.css b/refs/ref3/duck.css
deleted file mode 100644
index 1919012..0000000
--- a/refs/ref3/duck.css
+++ /dev/null
@@ -1,2258 +0,0 @@
-@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&family=Source+Serif+4:wght@400;600&display=swap");
-
-*,
-::before,
-::after {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: rgb(59 130 246 / 0.5);
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
- --tw-contain-size: ;
- --tw-contain-layout: ;
- --tw-contain-paint: ;
- --tw-contain-style: ;
-}
-
-::backdrop {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: rgb(59 130 246 / 0.5);
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
- --tw-contain-size: ;
- --tw-contain-layout: ;
- --tw-contain-paint: ;
- --tw-contain-style: ;
-}
-
-/*
-! tailwindcss v3.4.16 | MIT License | https://tailwindcss.com
-*/
-
-/*
-1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
-2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
-*/
-
-*,
-::before,
-::after {
- box-sizing: border-box; /* 1 */
- border-width: 0; /* 2 */
- border-style: solid; /* 2 */
- border-color: #e5e7eb; /* 2 */
-}
-
-::before,
-::after {
- --tw-content: "";
-}
-
-/*
-1. Use a consistent sensible line-height in all browsers.
-2. Prevent adjustments of font size after orientation changes in iOS.
-3. Use a more readable tab size.
-4. Use the user's configured `sans` font-family by default.
-5. Use the user's configured `sans` font-feature-settings by default.
-6. Use the user's configured `sans` font-variation-settings by default.
-7. Disable tap highlights on iOS
-*/
-
-html,
-:host {
- line-height: 1.5; /* 1 */
- -webkit-text-size-adjust: 100%; /* 2 */
- -moz-tab-size: 4; /* 3 */
- tab-size: 4; /* 3 */
- font-family: "IBM Plex Sans", sans-serif; /* 4 */
- font-feature-settings: normal; /* 5 */
- font-variation-settings: normal; /* 6 */
- -webkit-tap-highlight-color: transparent; /* 7 */
-}
-
-/*
-1. Remove the margin in all browsers.
-2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
-*/
-
-body {
- margin: 0; /* 1 */
- line-height: inherit; /* 2 */
-}
-
-/*
-1. Add the correct height in Firefox.
-2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
-3. Ensure horizontal rules are visible by default.
-*/
-
-hr {
- height: 0; /* 1 */
- color: inherit; /* 2 */
- border-top-width: 1px; /* 3 */
-}
-
-/*
-Add the correct text decoration in Chrome, Edge, and Safari.
-*/
-
-abbr:where([title]) {
- text-decoration: underline dotted;
-}
-
-/*
-Remove the default font size and weight for headings.
-*/
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-size: inherit;
- font-weight: inherit;
-}
-
-/*
-Reset links to optimize for opt-in styling instead of opt-out.
-*/
-
-a {
- color: inherit;
- text-decoration: inherit;
-}
-
-/*
-Add the correct font weight in Edge and Safari.
-*/
-
-b,
-strong {
- font-weight: bolder;
-}
-
-/*
-1. Use the user's configured `mono` font-family by default.
-2. Use the user's configured `mono` font-feature-settings by default.
-3. Use the user's configured `mono` font-variation-settings by default.
-4. Correct the odd `em` font sizing in all browsers.
-*/
-
-code,
-kbd,
-samp,
-pre {
- font-family: "JetBrains Mono", monospace; /* 1 */
- font-feature-settings: normal; /* 2 */
- font-variation-settings: normal; /* 3 */
- font-size: 1em; /* 4 */
-}
-
-/*
-Add the correct font size in all browsers.
-*/
-
-small {
- font-size: 80%;
-}
-
-/*
-Prevent `sub` and `sup` elements from affecting the line height in all browsers.
-*/
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-sup {
- top: -0.5em;
-}
-
-/*
-1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
-2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
-3. Remove gaps between table borders by default.
-*/
-
-table {
- text-indent: 0; /* 1 */
- border-color: inherit; /* 2 */
- border-collapse: collapse; /* 3 */
-}
-
-/*
-1. Change the font styles in all browsers.
-2. Remove the margin in Firefox and Safari.
-3. Remove default padding in all browsers.
-*/
-
-button,
-input,
-optgroup,
-select,
-textarea {
- font-family: inherit; /* 1 */
- font-feature-settings: inherit; /* 1 */
- font-variation-settings: inherit; /* 1 */
- font-size: 100%; /* 1 */
- font-weight: inherit; /* 1 */
- line-height: inherit; /* 1 */
- letter-spacing: inherit; /* 1 */
- color: inherit; /* 1 */
- margin: 0; /* 2 */
- padding: 0; /* 3 */
-}
-
-/*
-Remove the inheritance of text transform in Edge and Firefox.
-*/
-
-button,
-select {
- text-transform: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Remove default button styles.
-*/
-
-button,
-input:where([type="button"]),
-input:where([type="reset"]),
-input:where([type="submit"]) {
- -webkit-appearance: button; /* 1 */
- background-color: transparent; /* 2 */
- background-image: none; /* 2 */
-}
-
-/*
-Use the modern Firefox focus style for all focusable elements.
-*/
-
-:-moz-focusring {
- outline: auto;
-}
-
-/*
-Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
-*/
-
-:-moz-ui-invalid {
- box-shadow: none;
-}
-
-/*
-Add the correct vertical alignment in Chrome and Firefox.
-*/
-
-progress {
- vertical-align: baseline;
-}
-
-/*
-Correct the cursor style of increment and decrement buttons in Safari.
-*/
-
-::-webkit-inner-spin-button,
-::-webkit-outer-spin-button {
- height: auto;
-}
-
-/*
-1. Correct the odd appearance in Chrome and Safari.
-2. Correct the outline style in Safari.
-*/
-
-[type="search"] {
- -webkit-appearance: textfield; /* 1 */
- outline-offset: -2px; /* 2 */
-}
-
-/*
-Remove the inner padding in Chrome and Safari on macOS.
-*/
-
-::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Change font properties to `inherit` in Safari.
-*/
-
-::-webkit-file-upload-button {
- -webkit-appearance: button; /* 1 */
- font: inherit; /* 2 */
-}
-
-/*
-Add the correct display in Chrome and Safari.
-*/
-
-summary {
- display: list-item;
-}
-
-/*
-Removes the default spacing and border for appropriate elements.
-*/
-
-blockquote,
-dl,
-dd,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-hr,
-figure,
-p,
-pre {
- margin: 0;
-}
-
-fieldset {
- margin: 0;
- padding: 0;
-}
-
-legend {
- padding: 0;
-}
-
-ol,
-ul,
-menu {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-/*
-Reset default styling for dialogs.
-*/
-
-dialog {
- padding: 0;
-}
-
-/*
-Prevent resizing textareas horizontally by default.
-*/
-
-textarea {
- resize: vertical;
-}
-
-/*
-1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
-2. Set the default placeholder color to the user's configured gray 400 color.
-*/
-
-input::placeholder,
-textarea::placeholder {
- opacity: 1; /* 1 */
- color: #9ca3af; /* 2 */
-}
-
-/*
-Set the default cursor for buttons.
-*/
-
-button,
-[role="button"] {
- cursor: pointer;
-}
-
-/*
-Make sure disabled buttons don't get the pointer cursor.
-*/
-
-:disabled {
- cursor: default;
-}
-
-/*
-1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
-2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
- This can trigger a poorly considered lint error in some tools but is included by design.
-*/
-
-img,
-svg,
-video,
-canvas,
-audio,
-iframe,
-embed,
-object {
- display: block; /* 1 */
- vertical-align: middle; /* 2 */
-}
-
-/*
-Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
-*/
-
-img,
-video {
- max-width: 100%;
- height: auto;
-}
-
-/* Make elements with the HTML hidden attribute stay hidden by default */
-
-[hidden]:where(:not([hidden="until-found"])) {
- display: none;
-}
-
-html {
- color: var(--color-foreground);
- background-color: var(--color-background);
- scroll-behavior: smooth;
-}
-
-body {
- color: var(--color-foreground);
- background-color: var(--color-background);
- font-family: var(--font-sans);
- font-weight: 300;
-}
-
-* {
- border-color: var(--color-border);
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-p,
-span,
-a,
-li,
-label,
-input,
-textarea,
-button,
-div {
- color: inherit;
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border-width: 0;
-}
-
-.pointer-events-none {
- pointer-events: none;
-}
-
-.pointer-events-auto {
- pointer-events: auto;
-}
-
-.visible {
- visibility: visible;
-}
-
-.fixed {
- position: fixed;
-}
-
-.absolute {
- position: absolute;
-}
-
-.relative {
- position: relative;
-}
-
-.sticky {
- position: sticky;
-}
-
-.inset-0 {
- inset: 0px;
-}
-
-.inset-x-0 {
- left: 0px;
- right: 0px;
-}
-
-.inset-y-0 {
- top: 0px;
- bottom: 0px;
-}
-
-.bottom-0 {
- bottom: 0px;
-}
-
-.left-0 {
- left: 0px;
-}
-
-.right-0 {
- right: 0px;
-}
-
-.right-1 {
- right: 0.25rem;
-}
-
-.right-4 {
- right: 1rem;
-}
-
-.top-0 {
- top: 0px;
-}
-
-.top-1 {
- top: 0.25rem;
-}
-
-.top-4 {
- top: 1rem;
-}
-
-.top-\[1px\] {
- top: 1px;
-}
-
-.top-\[60\%\] {
- top: 60%;
-}
-
-.top-full {
- top: 100%;
-}
-
-.isolate {
- isolation: isolate;
-}
-
-.-z-10 {
- z-index: -10;
-}
-
-.z-0 {
- z-index: 0;
-}
-
-.z-10 {
- z-index: 10;
-}
-
-.z-20 {
- z-index: 20;
-}
-
-.z-30 {
- z-index: 30;
-}
-
-.z-50 {
- z-index: 50;
-}
-
-.z-\[100\] {
- z-index: 100;
-}
-
-.z-\[1\] {
- z-index: 1;
-}
-
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
-}
-
-.mb-10 {
- margin-bottom: 2.5rem;
-}
-
-.ml-1 {
- margin-left: 0.25rem;
-}
-
-.ml-2 {
- margin-left: 0.5rem;
-}
-
-.mr-2 {
- margin-right: 0.5rem;
-}
-
-.mt-1 {
- margin-top: 0.25rem;
-}
-
-.mt-1\.5 {
- margin-top: 0.375rem;
-}
-
-.mt-2 {
- margin-top: 0.5rem;
-}
-
-.mt-3 {
- margin-top: 0.75rem;
-}
-
-.mt-4 {
- margin-top: 1rem;
-}
-
-.mt-8 {
- margin-top: 2rem;
-}
-
-.block {
- display: block;
-}
-
-.flex {
- display: flex;
-}
-
-.inline-flex {
- display: inline-flex;
-}
-
-.grid {
- display: grid;
-}
-
-.hidden {
- display: none;
-}
-
-.h-1\.5 {
- height: 0.375rem;
-}
-
-.h-10 {
- height: 2.5rem;
-}
-
-.h-12 {
- height: 3rem;
-}
-
-.h-2 {
- height: 0.5rem;
-}
-
-.h-2\.5 {
- height: 0.625rem;
-}
-
-.h-3 {
- height: 0.75rem;
-}
-
-.h-4 {
- height: 1rem;
-}
-
-.h-44 {
- height: 11rem;
-}
-
-.h-64 {
- height: 16rem;
-}
-
-.h-8 {
- height: 2rem;
-}
-
-.h-9 {
- height: 2.25rem;
-}
-
-.h-\[1px\] {
- height: 1px;
-}
-
-.h-\[var\(--radix-navigation-menu-viewport-height\)\] {
- height: var(--radix-navigation-menu-viewport-height);
-}
-
-.h-auto {
- height: auto;
-}
-
-.h-full {
- height: 100%;
-}
-
-.max-h-screen {
- max-height: 100vh;
-}
-
-.min-h-10 {
- min-height: 2.5rem;
-}
-
-.min-h-11 {
- min-height: 2.75rem;
-}
-
-.min-h-12 {
- min-height: 3rem;
-}
-
-.min-h-14 {
- min-height: 3.5rem;
-}
-
-.min-h-16 {
- min-height: 4rem;
-}
-
-.min-h-\[calc\(100vh-64px\)\] {
- min-height: calc(100vh - 64px);
-}
-
-.min-h-screen {
- min-height: 100vh;
-}
-
-.w-12 {
- width: 3rem;
-}
-
-.w-2 {
- width: 0.5rem;
-}
-
-.w-2\.5 {
- width: 0.625rem;
-}
-
-.w-3 {
- width: 0.75rem;
-}
-
-.w-3\/4 {
- width: 75%;
-}
-
-.w-4 {
- width: 1rem;
-}
-
-.w-64 {
- width: 16rem;
-}
-
-.w-9 {
- width: 2.25rem;
-}
-
-.w-\[1px\] {
- width: 1px;
-}
-
-.w-\[88vw\] {
- width: 88vw;
-}
-
-.w-full {
- width: 100%;
-}
-
-.w-max {
- width: max-content;
-}
-
-.min-w-11 {
- min-width: 2.75rem;
-}
-
-.max-w-2xl {
- max-width: 42rem;
-}
-
-.max-w-4xl {
- max-width: 56rem;
-}
-
-.max-w-5xl {
- max-width: 64rem;
-}
-
-.max-w-7xl {
- max-width: 80rem;
-}
-
-.max-w-\[14ch\] {
- max-width: 14ch;
-}
-
-.max-w-\[34ch\] {
- max-width: 34ch;
-}
-
-.max-w-full {
- max-width: 100%;
-}
-
-.max-w-max {
- max-width: max-content;
-}
-
-.max-w-sm {
- max-width: 24rem;
-}
-
-.flex-1 {
- flex: 1 1 0%;
-}
-
-.shrink-0 {
- flex-shrink: 0;
-}
-
-.rotate-45 {
- --tw-rotate: 45deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-.scale-125 {
- --tw-scale-x: 1.25;
- --tw-scale-y: 1.25;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-@keyframes ping {
- 75%,
- 100% {
- transform: scale(2);
- opacity: 0;
- }
-}
-
-.animate-ping {
- animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
-}
-
-@keyframes pulse {
- 50% {
- opacity: 0.5;
- }
-}
-
-.animate-pulse {
- animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
-}
-
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
-
-.animate-spin {
- animation: spin 1s linear infinite;
-}
-
-.list-none {
- list-style-type: none;
-}
-
-.flex-col {
- flex-direction: column;
-}
-
-.flex-col-reverse {
- flex-direction: column-reverse;
-}
-
-.flex-wrap {
- flex-wrap: wrap;
-}
-
-.items-start {
- align-items: flex-start;
-}
-
-.items-end {
- align-items: flex-end;
-}
-
-.items-center {
- align-items: center;
-}
-
-.items-stretch {
- align-items: stretch;
-}
-
-.justify-center {
- justify-content: center;
-}
-
-.justify-between {
- justify-content: space-between;
-}
-
-.gap-1 {
- gap: 0.25rem;
-}
-
-.gap-1\.5 {
- gap: 0.375rem;
-}
-
-.gap-10 {
- gap: 2.5rem;
-}
-
-.gap-2 {
- gap: 0.5rem;
-}
-
-.gap-3 {
- gap: 0.75rem;
-}
-
-.gap-4 {
- gap: 1rem;
-}
-
-.gap-5 {
- gap: 1.25rem;
-}
-
-.gap-6 {
- gap: 1.5rem;
-}
-
-.gap-8 {
- gap: 2rem;
-}
-
-.space-x-1 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(0.25rem * var(--tw-space-x-reverse));
- margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
-}
-
-.space-x-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
-}
-
-.space-y-1 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
-}
-
-.space-y-1\.5 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
-}
-
-.space-y-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
-}
-
-.space-y-3 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
-}
-
-.space-y-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(1rem * var(--tw-space-y-reverse));
-}
-
-.space-y-5 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));
-}
-
-.space-y-6 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
-}
-
-.space-y-8 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(2rem * var(--tw-space-y-reverse));
-}
-
-.overflow-hidden {
- overflow: hidden;
-}
-
-.overflow-y-auto {
- overflow-y: auto;
-}
-
-.overflow-x-hidden {
- overflow-x: hidden;
-}
-
-.whitespace-nowrap {
- white-space: nowrap;
-}
-
-.text-balance {
- text-wrap: balance;
-}
-
-.rounded-2xl {
- border-radius: 16px;
-}
-
-.rounded-3xl {
- border-radius: 20px;
-}
-
-.rounded-full {
- border-radius: 9999px;
-}
-
-.rounded-md {
- border-radius: 0.375rem;
-}
-
-.rounded-sm {
- border-radius: 0.125rem;
-}
-
-.rounded-xl {
- border-radius: 12px;
-}
-
-.rounded-tl-sm {
- border-top-left-radius: 0.125rem;
-}
-
-.border {
- border-width: 1px;
-}
-
-.border-0 {
- border-width: 0px;
-}
-
-.border-b {
- border-bottom-width: 1px;
-}
-
-.border-l {
- border-left-width: 1px;
-}
-
-.border-r {
- border-right-width: 1px;
-}
-
-.border-t {
- border-top-width: 1px;
-}
-
-.border-border {
- border-color: var(--color-border);
-}
-
-.border-destructive {
- border-color: var(--color-destructive);
-}
-
-.border-input {
- border-color: var(--color-input);
-}
-
-.border-transparent {
- border-color: transparent;
-}
-
-.bg-background {
- background-color: var(--color-background);
-}
-
-.bg-black\/80 {
- background-color: rgb(0 0 0 / 0.8);
-}
-
-.bg-border {
- background-color: var(--color-border);
-}
-
-.bg-card {
- background-color: var(--color-card);
-}
-
-.bg-cta-panel {
- background-color: var(--color-cta-panel);
-}
-
-.bg-destructive {
- background-color: var(--color-destructive);
-}
-
-.bg-footer {
- background-color: var(--color-footer);
-}
-
-.bg-input {
- background-color: var(--color-input);
-}
-
-.bg-muted {
- background-color: var(--color-muted);
-}
-
-.bg-panel {
- background-color: var(--color-panel);
-}
-
-.bg-popover {
- background-color: var(--color-popover);
-}
-
-.bg-primary {
- background-color: var(--color-primary);
-}
-
-.bg-roadmap-card {
- background-color: var(--color-roadmap-card);
-}
-
-.bg-secondary {
- background-color: var(--color-secondary);
-}
-
-.bg-section-subtle {
- background-color: var(--color-section-subtle);
-}
-
-.bg-status-backlog {
- background-color: var(--color-status-backlog);
-}
-
-.bg-status-completed {
- background-color: var(--color-status-completed);
-}
-
-.bg-status-planned {
- background-color: var(--color-status-planned);
-}
-
-.bg-status-progress {
- background-color: var(--color-status-progress);
-}
-
-.bg-transparent {
- background-color: transparent;
-}
-
-.bg-terminal-panel {
- background-image: var(--color-terminal-panel);
-}
-
-.object-cover {
- object-fit: cover;
-}
-
-.p-1 {
- padding: 0.25rem;
-}
-
-.p-4 {
- padding: 1rem;
-}
-
-.p-6 {
- padding: 1.5rem;
-}
-
-.px-2\.5 {
- padding-left: 0.625rem;
- padding-right: 0.625rem;
-}
-
-.px-3 {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-
-.px-4 {
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.px-5 {
- padding-left: 1.25rem;
- padding-right: 1.25rem;
-}
-
-.px-6 {
- padding-left: 1.5rem;
- padding-right: 1.5rem;
-}
-
-.px-8 {
- padding-left: 2rem;
- padding-right: 2rem;
-}
-
-.py-0\.5 {
- padding-top: 0.125rem;
- padding-bottom: 0.125rem;
-}
-
-.py-10 {
- padding-top: 2.5rem;
- padding-bottom: 2.5rem;
-}
-
-.py-14 {
- padding-top: 3.5rem;
- padding-bottom: 3.5rem;
-}
-
-.py-16 {
- padding-top: 4rem;
- padding-bottom: 4rem;
-}
-
-.py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-
-.py-3 {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
-}
-
-.py-4 {
- padding-top: 1rem;
- padding-bottom: 1rem;
-}
-
-.py-5 {
- padding-top: 1.25rem;
- padding-bottom: 1.25rem;
-}
-
-.py-8 {
- padding-top: 2rem;
- padding-bottom: 2rem;
-}
-
-.pb-4 {
- padding-bottom: 1rem;
-}
-
-.pb-5 {
- padding-bottom: 1.25rem;
-}
-
-.pl-2 {
- padding-left: 0.5rem;
-}
-
-.pr-4 {
- padding-right: 1rem;
-}
-
-.pr-6 {
- padding-right: 1.5rem;
-}
-
-.pt-0 {
- padding-top: 0px;
-}
-
-.text-left {
- text-align: left;
-}
-
-.text-center {
- text-align: center;
-}
-
-.font-mono {
- font-family: "JetBrains Mono", monospace;
-}
-
-.text-2xl {
- font-size: 1.5rem;
- line-height: 2rem;
-}
-
-.text-\[clamp\(2\.75rem\2c 8vw\2c 5rem\)\] {
- font-size: clamp(2.75rem, 8vw, 5rem);
-}
-
-.text-\[clamp\(2rem\2c 5vw\2c 3rem\)\] {
- font-size: clamp(2rem, 5vw, 3rem);
-}
-
-.text-base {
- font-size: 1rem;
- line-height: 1.5rem;
-}
-
-.text-lg {
- font-size: 1.125rem;
- line-height: 1.75rem;
-}
-
-.text-sm {
- font-size: 0.875rem;
- line-height: 1.25rem;
-}
-
-.text-xs {
- font-size: 0.75rem;
- line-height: 1rem;
-}
-
-.font-light {
- font-weight: 300;
-}
-
-.font-medium {
- font-weight: 500;
-}
-
-.font-normal {
- font-weight: 400;
-}
-
-.font-semibold {
- font-weight: 600;
-}
-
-.leading-6 {
- line-height: 1.5rem;
-}
-
-.leading-7 {
- line-height: 1.75rem;
-}
-
-.leading-\[1\.15\] {
- line-height: 1.15;
-}
-
-.leading-none {
- line-height: 1;
-}
-
-.tracking-\[-0\.025em\] {
- letter-spacing: -0.025em;
-}
-
-.tracking-tight {
- letter-spacing: -0.025em;
-}
-
-.text-card-foreground {
- color: var(--color-card-foreground);
-}
-
-.text-code-float {
- color: var(--color-code-float);
-}
-
-.text-destructive {
- color: var(--color-destructive);
-}
-
-.text-foreground {
- color: var(--color-foreground);
-}
-
-.text-muted-foreground {
- color: var(--color-muted-foreground);
-}
-
-.text-popover-foreground {
- color: var(--color-popover-foreground);
-}
-
-.text-primary {
- color: var(--color-primary);
-}
-
-.text-primary-foreground {
- color: var(--color-primary-foreground);
-}
-
-.text-secondary-foreground {
- color: var(--color-secondary-foreground);
-}
-
-.text-status-backlog-foreground {
- color: var(--color-status-backlog-foreground);
-}
-
-.text-status-completed-foreground {
- color: var(--color-status-completed-foreground);
-}
-
-.text-status-planned-foreground {
- color: var(--color-status-planned-foreground);
-}
-
-.text-status-progress-foreground {
- color: var(--color-status-progress-foreground);
-}
-
-.text-success {
- color: var(--color-success);
-}
-
-.text-tertiary {
- color: var(--color-tertiary);
-}
-
-.text-tertiary-foreground {
- color: var(--color-tertiary-foreground);
-}
-
-.text-warning {
- color: var(--color-warning);
-}
-
-.underline-offset-4 {
- text-underline-offset: 4px;
-}
-
-.opacity-0 {
- opacity: 0;
-}
-
-.opacity-40 {
- opacity: 0.4;
-}
-
-.opacity-70 {
- opacity: 0.7;
-}
-
-.opacity-75 {
- opacity: 0.75;
-}
-
-.opacity-90 {
- opacity: 0.9;
-}
-
-.shadow {
- --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.shadow-2xl {
- --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
- --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.shadow-\[0_0_18px_-4px_var\(--color-primary\)\] {
- --tw-shadow: 0 0 18px -4px var(--color-primary);
- --tw-shadow-colored: 0 0 18px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.shadow-\[0_0_28px_-4px_var\(--color-primary\)\] {
- --tw-shadow: 0 0 28px -4px var(--color-primary);
- --tw-shadow-colored: 0 0 28px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.shadow-lg {
- --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.shadow-md {
- --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.shadow-sm {
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.outline-none {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-
-.outline {
- outline-style: solid;
-}
-
-.ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-
-.ring-offset-background {
- --tw-ring-offset-color: var(--color-background);
-}
-
-.blur-3xl {
- --tw-blur: blur(64px);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate)
- var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-
-.filter {
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate)
- var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-
-.backdrop-blur-md {
- --tw-backdrop-blur: blur(12px);
- -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-blur-sm {
- --tw-backdrop-blur: blur(4px);
- -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, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter,
- backdrop-filter;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.transition-all {
- transition-property: all;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.transition-colors {
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.transition-opacity {
- transition-property: opacity;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.transition-shadow {
- transition-property: box-shadow;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.transition-transform {
- transition-property: transform;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.duration-200 {
- transition-duration: 200ms;
-}
-
-.duration-300 {
- transition-duration: 300ms;
-}
-
-.ease-in {
- transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
-}
-
-.ease-in-out {
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.code-line {
- white-space: nowrap;
- opacity: 1;
- animation-name: float-code;
- animation-timing-function: linear;
- animation-iteration-count: infinite;
-}
-
-@keyframes float-code {
- 0% {
- transform: translateX(0);
- opacity: 0;
- }
- 5% {
- opacity: 1;
- }
- 95% {
- opacity: 1;
- }
- 100% {
- transform: translateX(105vw);
- opacity: 0;
- }
-}
-
-@media (prefers-reduced-motion: reduce) {
- .code-line {
- animation: none;
- }
-
- html {
- scroll-behavior: auto;
- }
-}
-
-:root {
- --font-sans: "IBM Plex Sans", sans-serif;
- --font-mono: "JetBrains Mono", monospace;
- --font-serif: "Source Serif 4", serif;
-
- --color-background: hsl(210 20% 98%);
- --color-foreground: hsl(222 28% 14%);
- --color-header: hsl(210 20% 98% / 0.86);
- --color-footer: hsl(210 18% 95%);
- --color-card: hsl(0 0% 100%);
- --color-card-foreground: hsl(222 28% 14%);
- --color-popover: hsl(0 0% 100%);
- --color-popover-foreground: hsl(222 28% 14%);
- --color-panel: hsl(210 18% 97%);
- --color-terminal-panel: linear-gradient(135deg, hsl(210 40% 99%) 0%, hsl(190 60% 96%) 52%, hsl(145 55% 94%) 100%);
- --color-roadmap-card: hsl(0 0% 100%);
- --color-cta-panel: hsl(190 60% 96%);
- --color-section-subtle: hsl(210 18% 95%);
- --color-muted: hsl(210 18% 95%);
- --color-muted-hover: hsl(214 16% 88%);
- --color-muted-foreground: hsl(217 12% 46%);
- --color-border: hsl(214 16% 88%);
- --color-input: hsl(0 0% 100%);
- --color-ring: hsl(190 90% 46%);
- --color-primary: hsl(145 84% 52%);
- --color-primary-hover: hsl(145 72% 44%);
- --color-primary-foreground: hsl(222 35% 10%);
- --color-secondary: hsl(145 72% 34%);
- --color-secondary-hover: hsl(145 68% 28%);
- --color-secondary-foreground: hsl(0 0% 98%);
- --color-tertiary: hsl(190 90% 46%);
- --color-tertiary-foreground: hsl(222 35% 10%);
- --color-link-hover: hsl(190 86% 38%);
- --color-success: hsl(145 70% 40%);
- --color-warning: hsl(38 92% 52%);
- --color-destructive: hsl(0 72% 42%);
- --color-code-float: hsl(222 28% 18% / 0.1);
- --color-status-progress: hsl(190 90% 46%);
- --color-status-progress-foreground: hsl(222 35% 10%);
- --color-status-completed: hsl(145 70% 40%);
- --color-status-completed-foreground: hsl(210 20% 98%);
- --color-status-planned: hsl(145 84% 52%);
- --color-status-planned-foreground: hsl(222 35% 10%);
- --color-status-backlog: hsl(38 92% 52%);
- --color-status-backlog-foreground: hsl(222 35% 10%);
-}
-
-.dark {
- --color-background: hsl(224 30% 9%);
- --color-foreground: hsl(210 25% 94%);
- --color-header: hsl(224 30% 9% / 0.82);
- --color-footer: hsl(222 24% 14%);
- --color-card: hsl(220 18% 24%);
- --color-card-foreground: hsl(210 20% 92%);
- --color-popover: hsl(222 24% 14%);
- --color-popover-foreground: hsl(210 20% 92%);
- --color-panel: hsl(222 30% 12%);
- --color-terminal-panel: linear-gradient(135deg, hsl(224 30% 9%) 0%, hsl(218 32% 12%) 45%, hsl(145 35% 16%) 100%);
- --color-roadmap-card: hsl(220 18% 24%);
- --color-cta-panel: hsl(218 32% 12%);
- --color-section-subtle: hsl(222 24% 14%);
- --color-muted: hsl(222 30% 12%);
- --color-muted-hover: hsl(220 18% 24%);
- --color-muted-foreground: hsl(216 12% 72%);
- --color-border: hsl(218 14% 34%);
- --color-input: hsl(222 30% 12%);
- --color-ring: hsl(190 90% 46%);
- --color-primary: hsl(145 78% 46%);
- --color-primary-hover: hsl(145 72% 52%);
- --color-primary-foreground: hsl(220 30% 8%);
- --color-secondary: hsl(145 68% 30%);
- --color-secondary-hover: hsl(145 64% 36%);
- --color-secondary-foreground: hsl(210 25% 96%);
- --color-tertiary: hsl(190 86% 40%);
- --color-tertiary-foreground: hsl(210 25% 98%);
- --color-link-hover: hsl(190 90% 52%);
- --color-success: hsl(145 70% 44%);
- --color-warning: hsl(38 92% 52%);
- --color-destructive: hsl(0 75% 64%);
- --color-code-float: hsl(145 84% 52% / 0.22);
- --color-status-progress: hsl(190 86% 40%);
- --color-status-progress-foreground: hsl(210 25% 98%);
- --color-status-completed: hsl(145 70% 40%);
- --color-status-completed-foreground: hsl(210 25% 98%);
- --color-status-planned: hsl(145 78% 46%);
- --color-status-planned-foreground: hsl(220 30% 8%);
- --color-status-backlog: hsl(38 92% 52%);
- --color-status-backlog-foreground: hsl(222 35% 10%);
-}
-
-.placeholder\:text-muted-foreground::placeholder {
- color: var(--color-muted-foreground);
-}
-
-.focus-within\:border-primary:focus-within {
- border-color: var(--color-primary);
-}
-
-.focus-within\:ring-1:focus-within {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-
-.focus-within\:ring-primary:focus-within {
- --tw-ring-color: var(--color-primary);
-}
-
-.hover\:bg-muted:hover {
- background-color: var(--color-muted);
-}
-
-.hover\:bg-muted-hover:hover {
- background-color: var(--color-muted-hover);
-}
-
-.hover\:bg-primary-hover:hover {
- background-color: var(--color-primary-hover);
-}
-
-.hover\:bg-secondary:hover {
- background-color: var(--color-secondary);
-}
-
-.hover\:bg-secondary-hover:hover {
- background-color: var(--color-secondary-hover);
-}
-
-.hover\:text-foreground:hover {
- color: var(--color-foreground);
-}
-
-.hover\:text-link-hover:hover {
- color: var(--color-link-hover);
-}
-
-.hover\:underline:hover {
- text-decoration-line: underline;
-}
-
-.hover\:no-underline:hover {
- text-decoration-line: none;
-}
-
-.hover\:opacity-100:hover {
- opacity: 1;
-}
-
-.hover\:shadow-\[0_0_28px_-2px_var\(--color-primary\)\]:hover {
- --tw-shadow: 0 0 28px -2px var(--color-primary);
- --tw-shadow-colored: 0 0 28px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.hover\:shadow-\[0_0_38px_-2px_var\(--color-primary\)\]:hover {
- --tw-shadow: 0 0 38px -2px var(--color-primary);
- --tw-shadow-colored: 0 0 38px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-
-.focus\:opacity-100:focus {
- opacity: 1;
-}
-
-.focus\:outline-none:focus {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-
-.focus\:ring-1:focus {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-
-.focus\:ring-2:focus {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-
-.focus\:ring-ring:focus {
- --tw-ring-color: var(--color-ring);
-}
-
-.focus\:ring-offset-2:focus {
- --tw-ring-offset-width: 2px;
-}
-
-.focus-visible\:outline-none:focus-visible {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-
-.focus-visible\:outline:focus-visible {
- outline-style: solid;
-}
-
-.focus-visible\:outline-2:focus-visible {
- outline-width: 2px;
-}
-
-.focus-visible\:outline-offset-2:focus-visible {
- outline-offset: 2px;
-}
-
-.focus-visible\:outline-ring:focus-visible {
- outline-color: var(--color-ring);
-}
-
-.focus-visible\:ring-1:focus-visible {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-
-.focus-visible\:ring-ring:focus-visible {
- --tw-ring-color: var(--color-ring);
-}
-
-.disabled\:pointer-events-none:disabled {
- pointer-events: none;
-}
-
-.disabled\:opacity-40:disabled {
- opacity: 0.4;
-}
-
-.disabled\:opacity-50:disabled {
- opacity: 0.5;
-}
-
-.group:hover .group-hover\:opacity-100 {
- opacity: 1;
-}
-
-.group.destructive .group-\[\.destructive\]\:text-red-300 {
- --tw-text-opacity: 1;
- color: rgb(252 165 165 / var(--tw-text-opacity, 1));
-}
-
-.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover {
- background-color: var(--color-destructive);
-}
-
-.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover {
- --tw-text-opacity: 1;
- color: rgb(254 242 242 / var(--tw-text-opacity, 1));
-}
-
-.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus {
- --tw-ring-color: var(--color-destructive);
-}
-
-.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus {
- --tw-ring-opacity: 1;
- --tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1));
-}
-
-.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus {
- --tw-ring-offset-color: #dc2626;
-}
-
-.data-\[swipe\=cancel\]\:translate-x-0[data-swipe="cancel"] {
- --tw-translate-x: 0px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe="end"] {
- --tw-translate-x: var(--radix-toast-swipe-end-x);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe="move"] {
- --tw-translate-x: var(--radix-toast-swipe-move-x);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-.data-\[state\=open\]\:bg-secondary[data-state="open"] {
- background-color: var(--color-secondary);
-}
-
-.data-\[swipe\=move\]\:transition-none[data-swipe="move"] {
- transition-property: none;
-}
-
-.data-\[state\=closed\]\:duration-300[data-state="closed"] {
- transition-duration: 300ms;
-}
-
-.data-\[state\=open\]\:duration-500[data-state="open"] {
- transition-duration: 500ms;
-}
-
-.group[data-state="open"] .group-data-\[state\=open\]\:rotate-180 {
- --tw-rotate: 180deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-@media (prefers-reduced-motion: no-preference) {
- @keyframes pulse {
- 50% {
- opacity: 0.5;
- }
- }
-
- .motion-safe\:animate-\[pulse_4s_ease-in-out_infinite\] {
- animation: pulse 4s ease-in-out infinite;
- }
-}
-
-@media (min-width: 640px) {
- .sm\:bottom-0 {
- bottom: 0px;
- }
-
- .sm\:right-0 {
- right: 0px;
- }
-
- .sm\:top-auto {
- top: auto;
- }
-
- .sm\:max-w-sm {
- max-width: 24rem;
- }
-
- .sm\:flex-row {
- flex-direction: row;
- }
-
- .sm\:flex-col {
- flex-direction: column;
- }
-
- .sm\:justify-end {
- justify-content: flex-end;
- }
-
- .sm\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
- }
-
- .sm\:text-left {
- text-align: left;
- }
-}
-
-@media (min-width: 768px) {
- .md\:absolute {
- position: absolute;
- }
-
- .md\:h-80 {
- height: 20rem;
- }
-
- .md\:w-80 {
- width: 20rem;
- }
-
- .md\:w-\[var\(--radix-navigation-menu-viewport-width\)\] {
- width: var(--radix-navigation-menu-viewport-width);
- }
-
- .md\:w-auto {
- width: auto;
- }
-
- .md\:max-w-\[420px\] {
- max-width: 420px;
- }
-
- .md\:grid-cols-2 {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-
- .md\:grid-cols-3 {
- grid-template-columns: repeat(3, minmax(0, 1fr));
- }
-
- .md\:flex-row {
- flex-direction: row;
- }
-
- .md\:items-center {
- align-items: center;
- }
-
- .md\:justify-between {
- justify-content: space-between;
- }
-
- .md\:px-12 {
- padding-left: 3rem;
- padding-right: 3rem;
- }
-
- .md\:py-12 {
- padding-top: 3rem;
- padding-bottom: 3rem;
- }
-
- .md\:py-20 {
- padding-top: 5rem;
- padding-bottom: 5rem;
- }
-
- .md\:text-lg {
- font-size: 1.125rem;
- line-height: 1.75rem;
- }
-}
-
-@media (min-width: 1024px) {
- .lg\:flex {
- display: flex;
- }
-
- .lg\:hidden {
- display: none;
- }
-
- .lg\:w-\[40\%\] {
- width: 40%;
- }
-
- .lg\:w-\[55\%\] {
- width: 55%;
- }
-
- .lg\:grid-cols-3 {
- grid-template-columns: repeat(3, minmax(0, 1fr));
- }
-
- .lg\:grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr));
- }
-
- .lg\:grid-cols-\[0\.9fr_1\.1fr\] {
- grid-template-columns: 0.9fr 1.1fr;
- }
-
- .lg\:grid-cols-\[1\.15fr_0\.85fr\] {
- grid-template-columns: 1.15fr 0.85fr;
- }
-
- .lg\:flex-row {
- flex-direction: row;
- }
-
- .lg\:items-center {
- align-items: center;
- }
-
- .lg\:justify-between {
- justify-content: space-between;
- }
-
- .lg\:gap-12 {
- gap: 3rem;
- }
-
- .lg\:px-12 {
- padding-left: 3rem;
- padding-right: 3rem;
- }
-
- .lg\:py-24 {
- padding-top: 6rem;
- padding-bottom: 6rem;
- }
-}
-
-.\[\&\+div\]\:text-xs + div {
- font-size: 0.75rem;
- line-height: 1rem;
-}
-
-.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state="open"] > svg {
- --tw-rotate: 180deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-.\[\&_svg\]\:pointer-events-none svg {
- pointer-events: none;
-}
-
-.\[\&_svg\]\:size-4 svg {
- width: 1rem;
- height: 1rem;
-}
-
-.\[\&_svg\]\:shrink-0 svg {
- flex-shrink: 0;
-}
diff --git a/refs/ref3/img/ai_1.png b/refs/ref3/img/ai_1.png
deleted file mode 100644
index 5609168..0000000
Binary files a/refs/ref3/img/ai_1.png and /dev/null differ
diff --git a/refs/ref3/img/ai_2.png b/refs/ref3/img/ai_2.png
deleted file mode 100644
index d8a9efd..0000000
Binary files a/refs/ref3/img/ai_2.png and /dev/null differ
diff --git a/refs/ref3/img/ai_3.png b/refs/ref3/img/ai_3.png
deleted file mode 100644
index 36e42cb..0000000
Binary files a/refs/ref3/img/ai_3.png and /dev/null differ
diff --git a/refs/ref3/img/ai_4.png b/refs/ref3/img/ai_4.png
deleted file mode 100644
index 846b3e8..0000000
Binary files a/refs/ref3/img/ai_4.png and /dev/null differ
diff --git a/refs/ref3/img/ai_5.png b/refs/ref3/img/ai_5.png
deleted file mode 100644
index 6645318..0000000
Binary files a/refs/ref3/img/ai_5.png and /dev/null differ
diff --git a/refs/ref3/index.html b/refs/ref3/index.html
deleted file mode 100644
index c18d918..0000000
--- a/refs/ref3/index.html
+++ /dev/null
@@ -1,1333 +0,0 @@
-
-
-
- Rubber Duck Debugging as a service
-
-
-
-
-
-
-
-
-
-
- const bug = describe(issue); duck.listen(problem); trace.stack().filter(signal); if (state === 'weird') inspect(inputs); console.log('finding root cause...'); return plan.nextStep(); git diff --focus HEAD~1 npm run debug:path assistant.ask('what changed?') path.push('reproduce'); debugger; console.trace('stack here'); throw new Error('unexpected state'); catch (e) { log(e.stack); } process.env.DEBUG = '*' breakpoint.set(line, 42); heap.snapshot().analyze(); assert.equal(got, expected); stderr.pipe(logfile); strace -p $PID tcpdump -i any port 8080 SELECT * FROM logs WHERE level='ERROR'; grep -r 'undefined' ./src curl -v http://localhost:3000 docker logs --tail 200 app
-
-
-
-
-
-
-
- rubber duck debugging service
-
-
-
- Debug faster with an AI duck that thinks in steps
-
-
- Explain the bug out loud, get a structured debugging path, and stop losing time in loops of vague
- guesses.
-
-
-
-
-
-
-
-
-
- terminal://session
-
-
-
-
-
- $ describe issue --env production --symptom intermittent
-
-
- > assistant: what changed before the failures started?
-
-
-
$ plan.next()
-
- 1. Reproduce with clean input 2. Compare environment flags 3. Trace state mutation before render
-
-
-
-
-
-
-
-
-
-
-
-
-
workflow
-
- How it works
-
-
- A short path from confusion to the next useful debugging action.
-
-
-
-
-
-
-
-
-
Describe problem
-
- Write what is broken, when it happens, and what you already checked.
-
-
-
-
-
-
-
-
-
-
Talk to duck assistant
-
- The assistant asks clarifying questions and keeps the debugging thread focused.
-
-
-
-
-
-
-
-
-
-
Get structured debugging path
-
- Receive clear next steps, likely branches, and a practical order of investigation.
-
-
-
-
-
-
-
-
-
-
-
features
-
- Built for real debugging work
-
-
- Practical outputs for developers who need clarity, not motivational noise.
-
-
-
-
-
-
-
-
Structured debugging paths
-
- Turn vague bug reports into reproducible, ordered next steps you can follow without losing
- context.
-
-
-
debug://feature
-
-
-
-
-
-
-
Conversation-first diagnosis
-
- Talk through the issue with a debugging assistant that keeps your assumptions, signals, and dead
- ends organized.
-
-
-
debug://feature
-
-
-
-
-
-
-
Fast root-cause isolation
-
- Narrow scope quickly by separating symptoms, environment changes, and likely failure points.
-
-
-
debug://feature
-
-
-
-
-
-
-
Terminal-native atmosphere
-
- Built for developers who think in traces, commands, logs, and compact actionable output.
-
-
-
debug://feature
-
-
-
-
-
-
-
Useful team handoff
-
- Share a clear debugging path instead of a scattered thread of guesses and screenshots.
-
-
-
debug://feature
-
-
-
-
-
-
-
Zero setup start
-
- No install, no local configuration, and no onboarding maze before your first debugging session.
-
-
-
debug://feature
-
-
-
-
-
-
-
-
-
roadmap
-
- Public roadmap
-
-
- Clear product direction with explicit milestones and status tags.
-
-
-
-
-
-
-
-
MCP server
-
- Connect the assistant to richer developer workflows and external tooling.
-
-
-
- ETA Q3
-
-
-
-
-
-
-
-
Skins
-
- Theme packs and visual personalization for your debugging workspace.
-
-
-
- ETA Q3
-
-
-
-
-
-
-
-
Battlepass
-
- Progression mechanics for debugging sessions, streaks, and milestones.
-
-
-
- ETA Q4
-
-
-
-
-
-
-
-
Lootboxes
-
- Experimental unlockables for playful engagement without blocking core utility.
-
-
-
- ETA Later
-
-
-
-
-
-
-
-
-
-
-
-
-
faq
-
- Questions developers ask before they try it
-
-
- Short answers for common objections, setup worries, and workflow questions.
-
-
-
-
-
-
- What is rubber duck debugging?
-
-
-
-
-
-
-
-
-
- How is this different from a normal chatbot?
-
-
-
-
-
-
-
-
-
- Do I need to install anything?
-
-
-
-
-
-
-
-
-
- Can teams use it together?
-
-
-
-
-
-
-
-
-
- Will it replace logs and manual investigation?
-
-
-
-
-
-
-
-
-
- What kinds of bugs work best?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ready
-
- Explain the bug. Follow the path. Ship the fix.
-
-
- Built for developers who want a calm debugging assistant instead of more noise.
-
-
-
- Start now
-
-
-
-
-
-
-
-
-
-
-
diff --git a/refs/ref4/assets/avatar-1.jpg b/refs/ref4/assets/avatar-1.jpg
deleted file mode 100644
index ba13f6e..0000000
Binary files a/refs/ref4/assets/avatar-1.jpg and /dev/null differ
diff --git a/refs/ref4/assets/avatar-2.jpg b/refs/ref4/assets/avatar-2.jpg
deleted file mode 100644
index 4eed26e..0000000
Binary files a/refs/ref4/assets/avatar-2.jpg and /dev/null differ
diff --git a/refs/ref4/assets/avatar-3.jpg b/refs/ref4/assets/avatar-3.jpg
deleted file mode 100644
index 01f0d0c..0000000
Binary files a/refs/ref4/assets/avatar-3.jpg and /dev/null differ
diff --git a/refs/ref4/assets/avatar-4.jpg b/refs/ref4/assets/avatar-4.jpg
deleted file mode 100644
index b886380..0000000
Binary files a/refs/ref4/assets/avatar-4.jpg and /dev/null differ
diff --git a/refs/ref4/assets/avatar-5.jpg b/refs/ref4/assets/avatar-5.jpg
deleted file mode 100644
index 003cdec..0000000
Binary files a/refs/ref4/assets/avatar-5.jpg and /dev/null differ
diff --git a/refs/ref4/assets/avatar-6.jpg b/refs/ref4/assets/avatar-6.jpg
deleted file mode 100644
index f15c5b4..0000000
Binary files a/refs/ref4/assets/avatar-6.jpg and /dev/null differ
diff --git a/refs/ref4/assets/avatar-7.jpg b/refs/ref4/assets/avatar-7.jpg
deleted file mode 100644
index 342dab8..0000000
Binary files a/refs/ref4/assets/avatar-7.jpg and /dev/null differ
diff --git a/refs/ref4/assets/avatar-8.jpg b/refs/ref4/assets/avatar-8.jpg
deleted file mode 100644
index d6acbab..0000000
Binary files a/refs/ref4/assets/avatar-8.jpg and /dev/null differ
diff --git a/refs/ref4/duck.css b/refs/ref4/duck.css
deleted file mode 100644
index a60b38d..0000000
--- a/refs/ref4/duck.css
+++ /dev/null
@@ -1,3514 +0,0 @@
-*,
-::before,
-::after {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: rgb(59 130 246 / 0.5);
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
- --tw-contain-size: ;
- --tw-contain-layout: ;
- --tw-contain-paint: ;
- --tw-contain-style: ;
-}
-
-::backdrop {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: rgb(59 130 246 / 0.5);
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
- --tw-contain-size: ;
- --tw-contain-layout: ;
- --tw-contain-paint: ;
- --tw-contain-style: ;
-} /*
-! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
-*/ /*
-1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
-2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
-*/
-
-*,
-::before,
-::after {
- box-sizing: border-box; /* 1 */
- border-width: 0; /* 2 */
- border-style: solid; /* 2 */
- border-color: #e5e7eb; /* 2 */
-}
-
-::before,
-::after {
- --tw-content: "";
-}
-
-/*
-1. Use a consistent sensible line-height in all browsers.
-2. Prevent adjustments of font size after orientation changes in iOS.
-3. Use a more readable tab size.
-4. Use the user's configured `sans` font-family by default.
-5. Use the user's configured `sans` font-feature-settings by default.
-6. Use the user's configured `sans` font-variation-settings by default.
-7. Disable tap highlights on iOS
-*/
-
-html,
-:host {
- line-height: 1.5; /* 1 */
- -webkit-text-size-adjust: 100%; /* 2 */
- -moz-tab-size: 4; /* 3 */
- -o-tab-size: 4;
- tab-size: 4; /* 3 */
- font-family:
- ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */
- font-feature-settings: normal; /* 5 */
- font-variation-settings: normal; /* 6 */
- -webkit-tap-highlight-color: transparent; /* 7 */
-}
-
-/*
-1. Remove the margin in all browsers.
-2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
-*/
-
-body {
- margin: 0; /* 1 */
- line-height: inherit; /* 2 */
-}
-
-/*
-1. Add the correct height in Firefox.
-2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
-3. Ensure horizontal rules are visible by default.
-*/
-
-hr {
- height: 0; /* 1 */
- color: inherit; /* 2 */
- border-top-width: 1px; /* 3 */
-}
-
-/*
-Add the correct text decoration in Chrome, Edge, and Safari.
-*/
-
-abbr:where([title]) {
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
-}
-
-/*
-Remove the default font size and weight for headings.
-*/
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-size: inherit;
- font-weight: inherit;
-}
-
-/*
-Reset links to optimize for opt-in styling instead of opt-out.
-*/
-
-a {
- color: inherit;
- text-decoration: inherit;
-}
-
-/*
-Add the correct font weight in Edge and Safari.
-*/
-
-b,
-strong {
- font-weight: bolder;
-}
-
-/*
-1. Use the user's configured `mono` font-family by default.
-2. Use the user's configured `mono` font-feature-settings by default.
-3. Use the user's configured `mono` font-variation-settings by default.
-4. Correct the odd `em` font sizing in all browsers.
-*/
-
-code,
-kbd,
-samp,
-pre {
- font-family: "IBM Plex Mono", monospace; /* 1 */
- font-feature-settings: normal; /* 2 */
- font-variation-settings: normal; /* 3 */
- font-size: 1em; /* 4 */
-}
-
-/*
-Add the correct font size in all browsers.
-*/
-
-small {
- font-size: 80%;
-}
-
-/*
-Prevent `sub` and `sup` elements from affecting the line height in all browsers.
-*/
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-sup {
- top: -0.5em;
-}
-
-/*
-1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
-2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
-3. Remove gaps between table borders by default.
-*/
-
-table {
- text-indent: 0; /* 1 */
- border-color: inherit; /* 2 */
- border-collapse: collapse; /* 3 */
-}
-
-/*
-1. Change the font styles in all browsers.
-2. Remove the margin in Firefox and Safari.
-3. Remove default padding in all browsers.
-*/
-
-button,
-input,
-optgroup,
-select,
-textarea {
- font-family: inherit; /* 1 */
- font-feature-settings: inherit; /* 1 */
- font-variation-settings: inherit; /* 1 */
- font-size: 100%; /* 1 */
- font-weight: inherit; /* 1 */
- line-height: inherit; /* 1 */
- letter-spacing: inherit; /* 1 */
- color: inherit; /* 1 */
- margin: 0; /* 2 */
- padding: 0; /* 3 */
-}
-
-/*
-Remove the inheritance of text transform in Edge and Firefox.
-*/
-
-button,
-select {
- text-transform: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Remove default button styles.
-*/
-
-button,
-input:where([type="button"]),
-input:where([type="reset"]),
-input:where([type="submit"]) {
- -webkit-appearance: button; /* 1 */
- background-color: transparent; /* 2 */
- background-image: none; /* 2 */
-}
-
-/*
-Use the modern Firefox focus style for all focusable elements.
-*/
-
-:-moz-focusring {
- outline: auto;
-}
-
-/*
-Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
-*/
-
-:-moz-ui-invalid {
- box-shadow: none;
-}
-
-/*
-Add the correct vertical alignment in Chrome and Firefox.
-*/
-
-progress {
- vertical-align: baseline;
-}
-
-/*
-Correct the cursor style of increment and decrement buttons in Safari.
-*/
-
-::-webkit-inner-spin-button,
-::-webkit-outer-spin-button {
- height: auto;
-}
-
-/*
-1. Correct the odd appearance in Chrome and Safari.
-2. Correct the outline style in Safari.
-*/
-
-[type="search"] {
- -webkit-appearance: textfield; /* 1 */
- outline-offset: -2px; /* 2 */
-}
-
-/*
-Remove the inner padding in Chrome and Safari on macOS.
-*/
-
-::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Change font properties to `inherit` in Safari.
-*/
-
-::-webkit-file-upload-button {
- -webkit-appearance: button; /* 1 */
- font: inherit; /* 2 */
-}
-
-/*
-Add the correct display in Chrome and Safari.
-*/
-
-summary {
- display: list-item;
-}
-
-/*
-Removes the default spacing and border for appropriate elements.
-*/
-
-blockquote,
-dl,
-dd,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-hr,
-figure,
-p,
-pre {
- margin: 0;
-}
-
-fieldset {
- margin: 0;
- padding: 0;
-}
-
-legend {
- padding: 0;
-}
-
-ol,
-ul,
-menu {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-/*
-Reset default styling for dialogs.
-*/
-dialog {
- padding: 0;
-}
-
-/*
-Prevent resizing textareas horizontally by default.
-*/
-
-textarea {
- resize: vertical;
-}
-
-/*
-1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
-2. Set the default placeholder color to the user's configured gray 400 color.
-*/
-
-input::-moz-placeholder,
-textarea::-moz-placeholder {
- opacity: 1; /* 1 */
- color: #9ca3af; /* 2 */
-}
-
-input::placeholder,
-textarea::placeholder {
- opacity: 1; /* 1 */
- color: #9ca3af; /* 2 */
-}
-
-/*
-Set the default cursor for buttons.
-*/
-
-button,
-[role="button"] {
- cursor: pointer;
-}
-
-/*
-Make sure disabled buttons don't get the pointer cursor.
-*/
-:disabled {
- cursor: default;
-}
-
-/*
-1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
-2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
- This can trigger a poorly considered lint error in some tools but is included by design.
-*/
-
-img,
-svg,
-video,
-canvas,
-audio,
-iframe,
-embed,
-object {
- display: block; /* 1 */
- vertical-align: middle; /* 2 */
-}
-
-/*
-Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
-*/
-
-img,
-video {
- max-width: 100%;
- height: auto;
-}
-
-/* Make elements with the HTML hidden attribute stay hidden by default */
-[hidden]:where(:not([hidden="until-found"])) {
- display: none;
-}
-:root {
- --background: #f4f4f5;
- --surface: #ffffff;
- --surface-alt: #e4e4e7;
- --foreground: #0f1115;
- --muted: #52525b;
- --muted-alt: #a1a1aa;
- --primary: #4f6ef7;
- --primary-hover: #3b5be0;
- --secondary: #22c55e;
- --secondary-hover: #4ade80;
- --terminal: #0f1115;
- --terminal-text: #22c55e;
- --border-color: #e4e4e7;
- --border-subtle: #f4f4f5;
- --card-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
- --button-glow: 0 0 20px rgba(79, 110, 247, 0.3);
- --radius: 0.625rem;
-}
-
-[data-theme="dark"] {
- --background: #121212;
- --surface: #1e1e1e;
- --surface-alt: #2a2a2a;
- --foreground: #f4f4f5;
- --muted: #a1a1aa;
- --muted-alt: #52525b;
- --primary: #6b83f9;
- --primary-hover: #8b9fff;
- --secondary: #4ade80;
- --secondary-hover: #22c55e;
- --terminal: #0a0a0a;
- --terminal-text: #4ade80;
- --border-color: #27272a;
- --border-subtle: #1e1e1e;
- --card-shadow: 0 2px 12px rgba(0, 0, 0, 0.25);
- --button-glow: 0 0 20px rgba(107, 131, 249, 0.25);
-}
-
-body {
- font-family: "IBM Plex Mono", monospace;
- background-color: var(--background);
- color: var(--foreground);
- transition:
- background-color 500ms ease,
- color 500ms ease;
- overflow-x: hidden;
-}
-
-* {
- border-color: var(--border-color);
-}
-@keyframes blink {
- 0%,
- 100% {
- opacity: 1;
- }
- 50% {
- opacity: 0;
- }
-}
-
-@keyframes bounce-scroll {
- 0%,
- 100% {
- transform: translateY(0);
- }
- 50% {
- transform: translateY(8px);
- }
-}
-
-.animate-blink {
- animation: blink 1s step-end infinite;
-}
-
-.animate-bounce-scroll {
- animation: bounce-scroll 2s ease-in-out infinite;
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border-width: 0;
-}
-.pointer-events-none {
- pointer-events: none;
-}
-.visible {
- visibility: visible;
-}
-.invisible {
- visibility: hidden;
-}
-.fixed {
- position: fixed;
-}
-.absolute {
- position: absolute;
-}
-.relative {
- position: relative;
-}
-.inset-0 {
- inset: 0px;
-}
-.inset-x-0 {
- left: 0px;
- right: 0px;
-}
-.inset-y-0 {
- top: 0px;
- bottom: 0px;
-}
-.-bottom-12 {
- bottom: -3rem;
-}
-.-left-12 {
- left: -3rem;
-}
-.-right-12 {
- right: -3rem;
-}
-.-top-12 {
- top: -3rem;
-}
-.bottom-0 {
- bottom: 0px;
-}
-.left-0 {
- left: 0px;
-}
-.left-1\/2 {
- left: 50%;
-}
-.left-2 {
- left: 0.5rem;
-}
-.left-\[50\%\] {
- left: 50%;
-}
-.right-0 {
- right: 0px;
-}
-.right-1 {
- right: 0.25rem;
-}
-.right-2 {
- right: 0.5rem;
-}
-.right-3 {
- right: 0.75rem;
-}
-.right-4 {
- right: 1rem;
-}
-.top-0 {
- top: 0px;
-}
-.top-1\.5 {
- top: 0.375rem;
-}
-.top-1\/2 {
- top: 50%;
-}
-.top-14 {
- top: 3.5rem;
-}
-.top-3\.5 {
- top: 0.875rem;
-}
-.top-4 {
- top: 1rem;
-}
-.top-\[1px\] {
- top: 1px;
-}
-.top-\[50\%\] {
- top: 50%;
-}
-.top-\[60\%\] {
- top: 60%;
-}
-.top-full {
- top: 100%;
-}
-.isolate {
- isolation: isolate;
-}
-.z-10 {
- z-index: 10;
-}
-.z-20 {
- z-index: 20;
-}
-.z-40 {
- z-index: 40;
-}
-.z-50 {
- z-index: 50;
-}
-.z-\[1\] {
- z-index: 1;
-}
-.order-first {
- order: -9999;
-}
-.order-last {
- order: 9999;
-}
-.col-start-2 {
- grid-column-start: 2;
-}
-.row-span-2 {
- grid-row: span 2 / span 2;
-}
-.row-start-1 {
- grid-row-start: 1;
-}
-.\!m-0 {
- margin: 0px !important;
-}
-.-mx-1 {
- margin-left: -0.25rem;
- margin-right: -0.25rem;
-}
-.-my-2 {
- margin-top: -0.5rem;
- margin-bottom: -0.5rem;
-}
-.mx-2 {
- margin-left: 0.5rem;
- margin-right: 0.5rem;
-}
-.mx-3 {
- margin-left: 0.75rem;
- margin-right: 0.75rem;
-}
-.mx-3\.5 {
- margin-left: 0.875rem;
- margin-right: 0.875rem;
-}
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
-}
-.my-0 {
- margin-top: 0px;
- margin-bottom: 0px;
-}
-.my-0\.5 {
- margin-top: 0.125rem;
- margin-bottom: 0.125rem;
-}
-.my-1 {
- margin-top: 0.25rem;
- margin-bottom: 0.25rem;
-}
-.-ml-4 {
- margin-left: -1rem;
-}
-.-mt-4 {
- margin-top: -1rem;
-}
-.mb-10 {
- margin-bottom: 2.5rem;
-}
-.mb-12 {
- margin-bottom: 3rem;
-}
-.mb-16 {
- margin-bottom: 4rem;
-}
-.mb-2 {
- margin-bottom: 0.5rem;
-}
-.mb-3 {
- margin-bottom: 0.75rem;
-}
-.mb-4 {
- margin-bottom: 1rem;
-}
-.mb-5 {
- margin-bottom: 1.25rem;
-}
-.mb-6 {
- margin-bottom: 1.5rem;
-}
-.ml-1 {
- margin-left: 0.25rem;
-}
-.ml-2 {
- margin-left: 0.5rem;
-}
-.ml-4 {
- margin-left: 1rem;
-}
-.ml-auto {
- margin-left: auto;
-}
-.mt-1 {
- margin-top: 0.25rem;
-}
-.mt-1\.5 {
- margin-top: 0.375rem;
-}
-.mt-10 {
- margin-top: 2.5rem;
-}
-.mt-16 {
- margin-top: 4rem;
-}
-.mt-2 {
- margin-top: 0.5rem;
-}
-.mt-4 {
- margin-top: 1rem;
-}
-.mt-5 {
- margin-top: 1.25rem;
-}
-.mt-6 {
- margin-top: 1.5rem;
-}
-.mt-auto {
- margin-top: auto;
-}
-.line-clamp-1 {
- overflow: hidden;
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: 1;
-}
-.line-clamp-2 {
- overflow: hidden;
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: 2;
-}
-.block {
- display: block;
-}
-.inline-block {
- display: inline-block;
-}
-.flex {
- display: flex;
-}
-.inline-flex {
- display: inline-flex;
-}
-.table {
- display: table;
-}
-.table-caption {
- display: table-caption;
-}
-.table-cell {
- display: table-cell;
-}
-.table-row {
- display: table-row;
-}
-.grid {
- display: grid;
-}
-.hidden {
- display: none;
-}
-.aspect-square {
- aspect-ratio: 1 / 1;
-}
-.aspect-video {
- aspect-ratio: 16 / 9;
-}
-.size-10 {
- width: 2.5rem;
- height: 2.5rem;
-}
-.size-2 {
- width: 0.5rem;
- height: 0.5rem;
-}
-.size-2\.5 {
- width: 0.625rem;
- height: 0.625rem;
-}
-.size-3 {
- width: 0.75rem;
- height: 0.75rem;
-}
-.size-3\.5 {
- width: 0.875rem;
- height: 0.875rem;
-}
-.size-4 {
- width: 1rem;
- height: 1rem;
-}
-.size-6 {
- width: 1.5rem;
- height: 1.5rem;
-}
-.size-7 {
- width: 1.75rem;
- height: 1.75rem;
-}
-.size-8 {
- width: 2rem;
- height: 2rem;
-}
-.size-9 {
- width: 2.25rem;
- height: 2.25rem;
-}
-.size-auto {
- width: auto;
- height: auto;
-}
-.size-full {
- width: 100%;
- height: 100%;
-}
-.h-1\.5 {
- height: 0.375rem;
-}
-.h-10 {
- height: 2.5rem;
-}
-.h-12 {
- height: 3rem;
-}
-.h-14 {
- height: 3.5rem;
-}
-.h-16 {
- height: 4rem;
-}
-.h-2 {
- height: 0.5rem;
-}
-.h-2\.5 {
- height: 0.625rem;
-}
-.h-4 {
- height: 1rem;
-}
-.h-5 {
- height: 1.25rem;
-}
-.h-6 {
- height: 1.5rem;
-}
-.h-7 {
- height: 1.75rem;
-}
-.h-8 {
- height: 2rem;
-}
-.h-9 {
- height: 2.25rem;
-}
-.h-\[1\.15rem\] {
- height: 1.15rem;
-}
-.h-\[1\.5px\] {
- height: 1.5px;
-}
-.h-\[calc\(100\%-1px\)\] {
- height: calc(100% - 1px);
-}
-.h-\[var\(--radix-navigation-menu-viewport-height\)\] {
- height: var(--radix-navigation-menu-viewport-height);
-}
-.h-\[var\(--radix-select-trigger-height\)\] {
- height: var(--radix-select-trigger-height);
-}
-.h-auto {
- height: auto;
-}
-.h-full {
- height: 100%;
-}
-.h-px {
- height: 1px;
-}
-.h-svh {
- height: 100svh;
-}
-.max-h-\[300px\] {
- max-height: 300px;
-}
-.min-h-0 {
- min-height: 0px;
-}
-.min-h-16 {
- min-height: 4rem;
-}
-.min-h-4 {
- min-height: 1rem;
-}
-.min-h-screen {
- min-height: 100vh;
-}
-.min-h-svh {
- min-height: 100svh;
-}
-.w-0 {
- width: 0px;
-}
-.w-1 {
- width: 0.25rem;
-}
-.w-1\.5 {
- width: 0.375rem;
-}
-.w-2 {
- width: 0.5rem;
-}
-.w-2\.5 {
- width: 0.625rem;
-}
-.w-3 {
- width: 0.75rem;
-}
-.w-3\/4 {
- width: 75%;
-}
-.w-4 {
- width: 1rem;
-}
-.w-5 {
- width: 1.25rem;
-}
-.w-64 {
- width: 16rem;
-}
-.w-72 {
- width: 18rem;
-}
-.w-8 {
- width: 2rem;
-}
-.w-9 {
- width: 2.25rem;
-}
-.w-\[100px\] {
- width: 100px;
-}
-.w-auto {
- width: auto;
-}
-.w-fit {
- width: -moz-fit-content;
- width: fit-content;
-}
-.w-full {
- width: 100%;
-}
-.w-max {
- width: -moz-max-content;
- width: max-content;
-}
-.w-px {
- width: 1px;
-}
-.min-w-0 {
- min-width: 0px;
-}
-.min-w-10 {
- min-width: 2.5rem;
-}
-.min-w-5 {
- min-width: 1.25rem;
-}
-.min-w-8 {
- min-width: 2rem;
-}
-.min-w-9 {
- min-width: 2.25rem;
-}
-.min-w-\[12rem\] {
- min-width: 12rem;
-}
-.min-w-\[6px\] {
- min-width: 6px;
-}
-.min-w-\[8rem\] {
- min-width: 8rem;
-}
-.min-w-\[var\(--radix-select-trigger-width\)\] {
- min-width: var(--radix-select-trigger-width);
-}
-.max-w-\[1200px\] {
- max-width: 1200px;
-}
-.max-w-\[520px\] {
- max-width: 520px;
-}
-.max-w-\[560px\] {
- max-width: 560px;
-}
-.max-w-\[600px\] {
- max-width: 600px;
-}
-.max-w-\[900px\] {
- max-width: 900px;
-}
-.max-w-\[calc\(100\%-2rem\)\] {
- max-width: calc(100% - 2rem);
-}
-.max-w-max {
- max-width: -moz-max-content;
- max-width: max-content;
-}
-.max-w-sm {
- max-width: 24rem;
-}
-.flex-1 {
- flex: 1 1 0%;
-}
-.shrink-0 {
- flex-shrink: 0;
-}
-.grow {
- flex-grow: 1;
-}
-.grow-0 {
- flex-grow: 0;
-}
-.basis-full {
- flex-basis: 100%;
-}
-.caption-bottom {
- caption-side: bottom;
-}
-.border-collapse {
- border-collapse: collapse;
-}
-.origin-left {
- transform-origin: left;
-}
-.-translate-x-1\/2 {
- --tw-translate-x: -50%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.-translate-x-px {
- --tw-translate-x: -1px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.-translate-y-1\/2 {
- --tw-translate-y: -50%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.translate-x-\[-50\%\] {
- --tw-translate-x: -50%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.translate-x-px {
- --tw-translate-x: 1px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.translate-y-0\.5 {
- --tw-translate-y: 0.125rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.translate-y-\[-50\%\] {
- --tw-translate-y: -50%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.translate-y-\[calc\(-50\%_-_2px\)\] {
- --tw-translate-y: calc(-50% - 2px);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.translate-y-full {
- --tw-translate-y: 100%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.rotate-45 {
- --tw-rotate: 45deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.rotate-90 {
- --tw-rotate: 90deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.scale-x-0 {
- --tw-scale-x: 0;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.transform {
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-@keyframes caret-blink {
- 0%,
- 70%,
- 100% {
- opacity: 1;
- }
-
- 20%,
- 50% {
- opacity: 0;
- }
-}
-.animate-caret-blink {
- animation: caret-blink 1.25s ease-out infinite;
-}
-@keyframes pulse {
- 50% {
- opacity: 0.5;
- }
-}
-.animate-pulse {
- animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
-}
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
-.animate-spin {
- animation: spin 1s linear infinite;
-}
-.cursor-default {
- cursor: default;
-}
-.cursor-text {
- cursor: text;
-}
-.touch-none {
- touch-action: none;
-}
-.select-none {
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
-}
-.resize-none {
- resize: none;
-}
-.resize {
- resize: both;
-}
-.scroll-my-1 {
- scroll-margin-top: 0.25rem;
- scroll-margin-bottom: 0.25rem;
-}
-.scroll-py-1 {
- scroll-padding-top: 0.25rem;
- scroll-padding-bottom: 0.25rem;
-}
-.list-disc {
- list-style-type: disc;
-}
-.list-none {
- list-style-type: none;
-}
-.auto-rows-min {
- grid-auto-rows: min-content;
-}
-.grid-cols-1 {
- grid-template-columns: repeat(1, minmax(0, 1fr));
-}
-.grid-cols-\[0_1fr\] {
- grid-template-columns: 0 1fr;
-}
-.grid-rows-\[auto_auto\] {
- grid-template-rows: auto auto;
-}
-.flex-row {
- flex-direction: row;
-}
-.flex-col {
- flex-direction: column;
-}
-.flex-col-reverse {
- flex-direction: column-reverse;
-}
-.flex-wrap {
- flex-wrap: wrap;
-}
-.place-content-center {
- place-content: center;
-}
-.items-start {
- align-items: flex-start;
-}
-.items-end {
- align-items: flex-end;
-}
-.items-center {
- align-items: center;
-}
-.items-stretch {
- align-items: stretch;
-}
-.justify-start {
- justify-content: flex-start;
-}
-.justify-center {
- justify-content: center;
-}
-.justify-between {
- justify-content: space-between;
-}
-.justify-items-start {
- justify-items: start;
-}
-.gap-0\.5 {
- gap: 0.125rem;
-}
-.gap-1 {
- gap: 0.25rem;
-}
-.gap-1\.5 {
- gap: 0.375rem;
-}
-.gap-12 {
- gap: 3rem;
-}
-.gap-16 {
- gap: 4rem;
-}
-.gap-2 {
- gap: 0.5rem;
-}
-.gap-2\.5 {
- gap: 0.625rem;
-}
-.gap-3 {
- gap: 0.75rem;
-}
-.gap-4 {
- gap: 1rem;
-}
-.gap-6 {
- gap: 1.5rem;
-}
-.gap-7 {
- gap: 1.75rem;
-}
-.gap-8 {
- gap: 2rem;
-}
-.gap-\[--spacing\(var\(--gap\)\)\] {
- gap: var(--spacing(var(--gap)));
-}
-.gap-\[6px\] {
- gap: 6px;
-}
-.gap-y-0\.5 {
- row-gap: 0.125rem;
-}
-.self-start {
- align-self: flex-start;
-}
-.self-stretch {
- align-self: stretch;
-}
-.justify-self-end {
- justify-self: end;
-}
-.overflow-auto {
- overflow: auto;
-}
-.overflow-hidden {
- overflow: hidden;
-}
-.overflow-x-auto {
- overflow-x: auto;
-}
-.overflow-y-auto {
- overflow-y: auto;
-}
-.overflow-x-hidden {
- overflow-x: hidden;
-}
-.whitespace-nowrap {
- white-space: nowrap;
-}
-.text-balance {
- text-wrap: balance;
-}
-.break-words {
- overflow-wrap: break-word;
-}
-.rounded-\[2px\] {
- border-radius: 2px;
-}
-.rounded-\[4px\] {
- border-radius: 4px;
-}
-.rounded-\[calc\(var\(--radius\)-5px\)\] {
- border-radius: calc(var(--radius) - 5px);
-}
-.rounded-\[inherit\] {
- border-radius: inherit;
-}
-.rounded-full {
- border-radius: 9999px;
-}
-.rounded-lg {
- border-radius: var(--radius);
-}
-.rounded-md {
- border-radius: calc(var(--radius) - 2px);
-}
-.rounded-none {
- border-radius: 0px;
-}
-.rounded-sm {
- border-radius: calc(var(--radius) - 4px);
-}
-.rounded-xl {
- border-radius: calc(var(--radius) + 4px);
-}
-.rounded-xs {
- border-radius: calc(var(--radius) - 6px);
-}
-.rounded-l-md {
- border-top-left-radius: calc(var(--radius) - 2px);
- border-bottom-left-radius: calc(var(--radius) - 2px);
-}
-.rounded-r-md {
- border-top-right-radius: calc(var(--radius) - 2px);
- border-bottom-right-radius: calc(var(--radius) - 2px);
-}
-.rounded-tl-sm {
- border-top-left-radius: calc(var(--radius) - 4px);
-}
-.border {
- border-width: 1px;
-}
-.border-0 {
- border-width: 0px;
-}
-.border-2 {
- border-width: 2px;
-}
-.border-\[1\.5px\] {
- border-width: 1.5px;
-}
-.border-y {
- border-top-width: 1px;
- border-bottom-width: 1px;
-}
-.border-b {
- border-bottom-width: 1px;
-}
-.border-l {
- border-left-width: 1px;
-}
-.border-r {
- border-right-width: 1px;
-}
-.border-t {
- border-top-width: 1px;
-}
-.border-dashed {
- border-style: dashed;
-}
-.border-border {
- border-color: var(--border-color);
-}
-.border-primary {
- border-color: var(--primary);
-}
-.border-transparent {
- border-color: transparent;
-}
-.border-l-transparent {
- border-left-color: transparent;
-}
-.border-t-transparent {
- border-top-color: transparent;
-}
-.bg-background {
- background-color: var(--background);
-}
-.bg-black\/50 {
- background-color: rgb(0 0 0 / 0.5);
-}
-.bg-border {
- background-color: var(--border-color);
-}
-.bg-foreground {
- background-color: var(--foreground);
-}
-.bg-muted {
- background-color: var(--muted);
-}
-.bg-primary {
- background-color: var(--primary);
-}
-.bg-secondary {
- background-color: var(--secondary);
-}
-.bg-transparent {
- background-color: transparent;
-}
-.bg-white {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
-}
-.fill-current {
- fill: currentColor;
-}
-.fill-foreground {
- fill: var(--foreground);
-}
-.fill-primary {
- fill: var(--primary);
-}
-.object-cover {
- -o-object-fit: cover;
- object-fit: cover;
-}
-.p-0 {
- padding: 0px;
-}
-.p-1 {
- padding: 0.25rem;
-}
-.p-2 {
- padding: 0.5rem;
-}
-.p-3 {
- padding: 0.75rem;
-}
-.p-4 {
- padding: 1rem;
-}
-.p-6 {
- padding: 1.5rem;
-}
-.p-8 {
- padding: 2rem;
-}
-.p-\[3px\] {
- padding: 3px;
-}
-.p-px {
- padding: 1px;
-}
-.px-1 {
- padding-left: 0.25rem;
- padding-right: 0.25rem;
-}
-.px-1\.5 {
- padding-left: 0.375rem;
- padding-right: 0.375rem;
-}
-.px-10 {
- padding-left: 2.5rem;
- padding-right: 2.5rem;
-}
-.px-2 {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.px-2\.5 {
- padding-left: 0.625rem;
- padding-right: 0.625rem;
-}
-.px-3 {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-.px-3\.5 {
- padding-left: 0.875rem;
- padding-right: 0.875rem;
-}
-.px-4 {
- padding-left: 1rem;
- padding-right: 1rem;
-}
-.px-5 {
- padding-left: 1.25rem;
- padding-right: 1.25rem;
-}
-.px-6 {
- padding-left: 1.5rem;
- padding-right: 1.5rem;
-}
-.px-7 {
- padding-left: 1.75rem;
- padding-right: 1.75rem;
-}
-.px-9 {
- padding-left: 2.25rem;
- padding-right: 2.25rem;
-}
-.py-0\.5 {
- padding-top: 0.125rem;
- padding-bottom: 0.125rem;
-}
-.py-1 {
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
-}
-.py-1\.5 {
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
-}
-.py-10 {
- padding-top: 2.5rem;
- padding-bottom: 2.5rem;
-}
-.py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-.py-2\.5 {
- padding-top: 0.625rem;
- padding-bottom: 0.625rem;
-}
-.py-20 {
- padding-top: 5rem;
- padding-bottom: 5rem;
-}
-.py-3 {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
-}
-.py-4 {
- padding-top: 1rem;
- padding-bottom: 1rem;
-}
-.py-5 {
- padding-top: 1.25rem;
- padding-bottom: 1.25rem;
-}
-.py-6 {
- padding-top: 1.5rem;
- padding-bottom: 1.5rem;
-}
-.py-\[120px\] {
- padding-top: 120px;
- padding-bottom: 120px;
-}
-.pb-10 {
- padding-bottom: 2.5rem;
-}
-.pb-16 {
- padding-bottom: 4rem;
-}
-.pb-3 {
- padding-bottom: 0.75rem;
-}
-.pb-4 {
- padding-bottom: 1rem;
-}
-.pl-2 {
- padding-left: 0.5rem;
-}
-.pl-3 {
- padding-left: 0.75rem;
-}
-.pl-4 {
- padding-left: 1rem;
-}
-.pl-8 {
- padding-left: 2rem;
-}
-.pr-1 {
- padding-right: 0.25rem;
-}
-.pr-2 {
- padding-right: 0.5rem;
-}
-.pr-2\.5 {
- padding-right: 0.625rem;
-}
-.pr-3 {
- padding-right: 0.75rem;
-}
-.pr-8 {
- padding-right: 2rem;
-}
-.pt-0 {
- padding-top: 0px;
-}
-.pt-16 {
- padding-top: 4rem;
-}
-.pt-20 {
- padding-top: 5rem;
-}
-.pt-3 {
- padding-top: 0.75rem;
-}
-.pt-4 {
- padding-top: 1rem;
-}
-.pt-6 {
- padding-top: 1.5rem;
-}
-.text-left {
- text-align: left;
-}
-.text-center {
- text-align: center;
-}
-.align-middle {
- vertical-align: middle;
-}
-.font-mono {
- font-family: "IBM Plex Mono", monospace;
-}
-.font-sans {
- font-family:
- ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
-}
-.font-serif {
- font-family: "IBM Plex Serif", serif;
-}
-.text-\[0\.8rem\] {
- font-size: 0.8rem;
-}
-.text-\[11px\] {
- font-size: 11px;
-}
-.text-\[13px\] {
- font-size: 13px;
-}
-.text-\[15px\] {
- font-size: 15px;
-}
-.text-\[28px\] {
- font-size: 28px;
-}
-.text-\[36px\] {
- font-size: 36px;
-}
-.text-\[42px\] {
- font-size: 42px;
-}
-.text-base {
- font-size: 1rem;
- line-height: 1.5rem;
-}
-.text-lg {
- font-size: 1.125rem;
- line-height: 1.75rem;
-}
-.text-sm {
- font-size: 0.875rem;
- line-height: 1.25rem;
-}
-.text-sm\/relaxed {
- font-size: 0.875rem;
- line-height: 1.625;
-}
-.text-xs {
- font-size: 0.75rem;
- line-height: 1rem;
-}
-.font-light {
- font-weight: 300;
-}
-.font-medium {
- font-weight: 500;
-}
-.font-normal {
- font-weight: 400;
-}
-.font-semibold {
- font-weight: 600;
-}
-.italic {
- font-style: italic;
-}
-.tabular-nums {
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing)
- var(--tw-numeric-fraction);
-}
-.leading-\[1\.15\] {
- line-height: 1.15;
-}
-.leading-\[1\.25\] {
- line-height: 1.25;
-}
-.leading-\[1\.35\] {
- line-height: 1.35;
-}
-.leading-\[1\.65\] {
- line-height: 1.65;
-}
-.leading-\[1\.7\] {
- line-height: 1.7;
-}
-.leading-none {
- line-height: 1;
-}
-.leading-normal {
- line-height: 1.5;
-}
-.leading-relaxed {
- line-height: 1.625;
-}
-.leading-snug {
- line-height: 1.375;
-}
-.tracking-\[-0\.5px\] {
- letter-spacing: -0.5px;
-}
-.tracking-\[0\.05em\] {
- letter-spacing: 0.05em;
-}
-.tracking-tight {
- letter-spacing: -0.025em;
-}
-.tracking-wide {
- letter-spacing: 0.025em;
-}
-.tracking-wider {
- letter-spacing: 0.05em;
-}
-.tracking-widest {
- letter-spacing: 0.1em;
-}
-.text-background {
- color: var(--background);
-}
-.text-current {
- color: currentColor;
-}
-.text-foreground {
- color: var(--foreground);
-}
-.text-primary {
- color: var(--primary);
-}
-.text-white {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity, 1));
-}
-.underline-offset-4 {
- text-underline-offset: 4px;
-}
-.opacity-0 {
- opacity: 0;
-}
-.opacity-50 {
- opacity: 0.5;
-}
-.opacity-70 {
- opacity: 0.7;
-}
-.shadow {
- --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\] {
- --tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));
- --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.shadow-lg {
- --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.shadow-md {
- --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.shadow-none {
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.shadow-sm {
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.shadow-xl {
- --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.shadow-xs {
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.outline-none {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-.outline {
- outline-style: solid;
-}
-.ring-0 {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-offset-background {
- --tw-ring-offset-color: var(--background);
-}
-.blur {
- --tw-blur: blur(8px);
- 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);
-}
-.transition {
- transition-property:
- color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter,
- backdrop-filter;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-\[color\2c box-shadow\] {
- transition-property: color, box-shadow;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-\[left\2c right\2c width\] {
- transition-property: left, right, width;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-\[margin\2c opacity\] {
- transition-property: margin, opacity;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-\[width\2c height\2c padding\] {
- transition-property: width, height, padding;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-\[width\] {
- transition-property: width;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-all {
- transition-property: all;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-colors {
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-none {
- transition-property: none;
-}
-.transition-opacity {
- transition-property: opacity;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-shadow {
- transition-property: box-shadow;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.transition-transform {
- transition-property: transform;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-.duration-100 {
- transition-duration: 100ms;
-}
-.duration-1000 {
- transition-duration: 1000ms;
-}
-.duration-150 {
- transition-duration: 150ms;
-}
-.duration-200 {
- transition-duration: 200ms;
-}
-.duration-300 {
- transition-duration: 300ms;
-}
-.duration-500 {
- transition-duration: 500ms;
-}
-.ease-in-out {
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.ease-linear {
- transition-timing-function: linear;
-}
-.ease-out {
- transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
-}
-@keyframes enter {
- from {
- opacity: var(--tw-enter-opacity, 1);
- transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0)
- scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1))
- rotate(var(--tw-enter-rotate, 0));
- }
-}
-@keyframes exit {
- to {
- opacity: var(--tw-exit-opacity, 1);
- transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0)
- scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1))
- rotate(var(--tw-exit-rotate, 0));
- }
-}
-.animate-in {
- animation-name: enter;
- animation-duration: 150ms;
- --tw-enter-opacity: initial;
- --tw-enter-scale: initial;
- --tw-enter-rotate: initial;
- --tw-enter-translate-x: initial;
- --tw-enter-translate-y: initial;
-}
-.fade-in-0 {
- --tw-enter-opacity: 0;
-}
-.zoom-in-95 {
- --tw-enter-scale: 0.95;
-}
-.duration-100 {
- animation-duration: 100ms;
-}
-.duration-1000 {
- animation-duration: 1000ms;
-}
-.duration-150 {
- animation-duration: 150ms;
-}
-.duration-200 {
- animation-duration: 200ms;
-}
-.duration-300 {
- animation-duration: 300ms;
-}
-.duration-500 {
- animation-duration: 500ms;
-}
-.ease-in-out {
- animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.ease-linear {
- animation-timing-function: linear;
-}
-.ease-out {
- animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
-}
-.\[--cell-size\:--spacing\(8\)\] {
- --cell-size: var(--spacing(8));
-}
-.selection\:bg-primary *::-moz-selection {
- background-color: var(--primary);
-}
-.selection\:bg-primary *::selection {
- background-color: var(--primary);
-}
-.selection\:bg-primary::-moz-selection {
- background-color: var(--primary);
-}
-.selection\:bg-primary::selection {
- background-color: var(--primary);
-}
-.file\:inline-flex::file-selector-button {
- display: inline-flex;
-}
-.file\:h-7::file-selector-button {
- height: 1.75rem;
-}
-.file\:border-0::file-selector-button {
- border-width: 0px;
-}
-.file\:bg-transparent::file-selector-button {
- background-color: transparent;
-}
-.file\:text-sm::file-selector-button {
- font-size: 0.875rem;
- line-height: 1.25rem;
-}
-.file\:font-medium::file-selector-button {
- font-weight: 500;
-}
-.file\:text-foreground::file-selector-button {
- color: var(--foreground);
-}
-.after\:absolute::after {
- content: var(--tw-content);
- position: absolute;
-}
-.after\:-inset-2::after {
- content: var(--tw-content);
- inset: -0.5rem;
-}
-.after\:inset-y-0::after {
- content: var(--tw-content);
- top: 0px;
- bottom: 0px;
-}
-.after\:left-1\/2::after {
- content: var(--tw-content);
- left: 50%;
-}
-.after\:w-1::after {
- content: var(--tw-content);
- width: 0.25rem;
-}
-.after\:w-\[2px\]::after {
- content: var(--tw-content);
- width: 2px;
-}
-.after\:-translate-x-1\/2::after {
- content: var(--tw-content);
- --tw-translate-x: -50%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.first\:rounded-l-md:first-child {
- border-top-left-radius: calc(var(--radius) - 2px);
- border-bottom-left-radius: calc(var(--radius) - 2px);
-}
-.first\:border-l:first-child {
- border-left-width: 1px;
-}
-.last\:mt-0:last-child {
- margin-top: 0px;
-}
-.last\:rounded-r-md:last-child {
- border-top-right-radius: calc(var(--radius) - 2px);
- border-bottom-right-radius: calc(var(--radius) - 2px);
-}
-.last\:border-b-0:last-child {
- border-bottom-width: 0px;
-}
-.hover\:scale-\[1\.03\]:hover {
- --tw-scale-x: 1.03;
- --tw-scale-y: 1.03;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.hover\:bg-muted:hover {
- background-color: var(--muted);
-}
-.hover\:text-\[var\(--foreground\)\]:hover {
- color: var(--foreground);
-}
-.hover\:text-\[var\(--primary\)\]:hover {
- color: var(--primary);
-}
-.hover\:text-foreground:hover {
- color: var(--foreground);
-}
-.hover\:underline:hover {
- text-decoration-line: underline;
-}
-.hover\:opacity-100:hover {
- opacity: 1;
-}
-.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover {
- --tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));
- --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.hover\:ring-4:hover {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.focus\:z-10:focus {
- z-index: 10;
-}
-.focus\:ring-2:focus {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.focus\:ring-offset-2:focus {
- --tw-ring-offset-width: 2px;
-}
-.focus-visible\:z-10:focus-visible {
- z-index: 10;
-}
-.focus-visible\:outline-1:focus-visible {
- outline-width: 1px;
-}
-.focus-visible\:ring-0:focus-visible {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.focus-visible\:ring-1:focus-visible {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.focus-visible\:ring-2:focus-visible {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.focus-visible\:ring-4:focus-visible {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.focus-visible\:ring-\[3px\]:focus-visible {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.focus-visible\:ring-offset-1:focus-visible {
- --tw-ring-offset-width: 1px;
-}
-.disabled\:pointer-events-none:disabled {
- pointer-events: none;
-}
-.disabled\:cursor-not-allowed:disabled {
- cursor: not-allowed;
-}
-.disabled\:opacity-50:disabled {
- opacity: 0.5;
-}
-.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100 {
- opacity: 1;
-}
-.group:hover .group-hover\:scale-x-100 {
- --tw-scale-x: 1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.group\/menu-item:hover .group-hover\/menu-item\:opacity-100 {
- opacity: 1;
-}
-.peer:disabled ~ .peer-disabled\:cursor-not-allowed {
- cursor: not-allowed;
-}
-.peer:disabled ~ .peer-disabled\:opacity-50 {
- opacity: 0.5;
-}
-.has-\[\>button\]\:ml-\[-0\.45rem\]:has(> button) {
- margin-left: -0.45rem;
-}
-.has-\[\>button\]\:mr-\[-0\.45rem\]:has(> button) {
- margin-right: -0.45rem;
-}
-.has-\[\>kbd\]\:ml-\[-0\.35rem\]:has(> kbd) {
- margin-left: -0.35rem;
-}
-.has-\[\>kbd\]\:mr-\[-0\.35rem\]:has(> kbd) {
- margin-right: -0.35rem;
-}
-.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(> [data-align="block-end"]) {
- height: auto;
-}
-.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(> [data-align="block-start"]) {
- height: auto;
-}
-.has-\[\>textarea\]\:h-auto:has(> textarea) {
- height: auto;
-}
-.has-\[\>\[data-slot\=field\]\]\:w-full:has(> [data-slot="field"]) {
- width: 100%;
-}
-.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(> svg) {
- grid-template-columns: calc(var(--spacing) * 4) 1fr;
-}
-.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(> [data-align="block-end"]) {
- flex-direction: column;
-}
-.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(> [data-align="block-start"]) {
- flex-direction: column;
-}
-.has-\[\>\[data-slot\=field\]\]\:flex-col:has(> [data-slot="field"]) {
- flex-direction: column;
-}
-.has-\[\>\[data-slot\=field-content\]\]\:items-start:has(> [data-slot="field-content"]) {
- align-items: flex-start;
-}
-.has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(> [data-slot="button-group"]) {
- gap: 0.5rem;
-}
-.has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(> [data-slot="checkbox-group"]) {
- gap: 0.75rem;
-}
-.has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(> [data-slot="radio-group"]) {
- gap: 0.75rem;
-}
-.has-\[\>svg\]\:gap-x-3:has(> svg) {
- -moz-column-gap: 0.75rem;
- column-gap: 0.75rem;
-}
-.has-\[\>\[data-slot\=field\]\]\:rounded-md:has(> [data-slot="field"]) {
- border-radius: calc(var(--radius) - 2px);
-}
-.has-\[\>\[data-slot\=field\]\]\:border:has(> [data-slot="field"]) {
- border-width: 1px;
-}
-.has-\[\>svg\]\:p-0:has(> svg) {
- padding: 0px;
-}
-.has-\[\>svg\]\:px-2:has(> svg) {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.has-\[\>svg\]\:px-2\.5:has(> svg) {
- padding-left: 0.625rem;
- padding-right: 0.625rem;
-}
-.has-\[\>svg\]\:px-3:has(> svg) {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-.has-\[\>svg\]\:px-4:has(> svg) {
- padding-left: 1rem;
- padding-right: 1rem;
-}
-.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has(
- [data-slot="input-group-control"]:focus-visible
-) {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.group\/item:has([data-slot="item-description"])
- .group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5 {
- --tw-translate-y: 0.125rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.group\/item:has([data-slot="item-description"]) .group-has-\[\[data-slot\=item-description\]\]\/item\:self-start {
- align-self: flex-start;
-}
-.group\/field:has([data-orientation="horizontal"])
- .group-has-\[\[data-orientation\=horizontal\]\]\/field\:text-balance {
- text-wrap: balance;
-}
-.group\/input-group:has(> input) .group-has-\[\>input\]\/input-group\:pb-2\.5 {
- padding-bottom: 0.625rem;
-}
-.group\/input-group:has(> input) .group-has-\[\>input\]\/input-group\:pt-2\.5 {
- padding-top: 0.625rem;
-}
-.aria-disabled\:pointer-events-none[aria-disabled="true"] {
- pointer-events: none;
-}
-.aria-disabled\:opacity-50[aria-disabled="true"] {
- opacity: 0.5;
-}
-.data-\[disabled\=true\]\:pointer-events-none[data-disabled="true"] {
- pointer-events: none;
-}
-.data-\[disabled\]\:pointer-events-none[data-disabled] {
- pointer-events: none;
-}
-.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction="bottom"] {
- left: 0px;
- right: 0px;
-}
-.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction="left"] {
- top: 0px;
- bottom: 0px;
-}
-.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction="right"] {
- top: 0px;
- bottom: 0px;
-}
-.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction="top"] {
- left: 0px;
- right: 0px;
-}
-.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction="bottom"] {
- bottom: 0px;
-}
-.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction="left"] {
- left: 0px;
-}
-.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction="right"] {
- right: 0px;
-}
-.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction="top"] {
- top: 0px;
-}
-.data-\[active\=true\]\:z-10[data-active="true"] {
- z-index: 10;
-}
-.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction="bottom"] {
- margin-top: 6rem;
-}
-.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction="top"] {
- margin-bottom: 6rem;
-}
-.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation="horizontal"] {
- height: 0.375rem;
-}
-.data-\[orientation\=horizontal\]\:h-full[data-orientation="horizontal"] {
- height: 100%;
-}
-.data-\[orientation\=horizontal\]\:h-px[data-orientation="horizontal"] {
- height: 1px;
-}
-.data-\[orientation\=vertical\]\:h-auto[data-orientation="vertical"] {
- height: auto;
-}
-.data-\[orientation\=vertical\]\:h-full[data-orientation="vertical"] {
- height: 100%;
-}
-.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction="vertical"] {
- height: 1px;
-}
-.data-\[size\=default\]\:h-9[data-size="default"] {
- height: 2.25rem;
-}
-.data-\[size\=sm\]\:h-8[data-size="sm"] {
- height: 2rem;
-}
-.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction="bottom"] {
- max-height: 80vh;
-}
-.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction="top"] {
- max-height: 80vh;
-}
-.data-\[orientation\=vertical\]\:min-h-44[data-orientation="vertical"] {
- min-height: 11rem;
-}
-.data-\[orientation\=horizontal\]\:w-full[data-orientation="horizontal"] {
- width: 100%;
-}
-.data-\[orientation\=vertical\]\:w-1\.5[data-orientation="vertical"] {
- width: 0.375rem;
-}
-.data-\[orientation\=vertical\]\:w-auto[data-orientation="vertical"] {
- width: auto;
-}
-.data-\[orientation\=vertical\]\:w-full[data-orientation="vertical"] {
- width: 100%;
-}
-.data-\[orientation\=vertical\]\:w-px[data-orientation="vertical"] {
- width: 1px;
-}
-.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction="vertical"] {
- width: 100%;
-}
-.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction="left"] {
- width: 75%;
-}
-.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction="right"] {
- width: 75%;
-}
-.data-\[side\=bottom\]\:translate-y-1[data-side="bottom"] {
- --tw-translate-y: 0.25rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.data-\[side\=left\]\:-translate-x-1[data-side="left"] {
- --tw-translate-x: -0.25rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.data-\[side\=right\]\:translate-x-1[data-side="right"] {
- --tw-translate-x: 0.25rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.data-\[side\=top\]\:-translate-y-1[data-side="top"] {
- --tw-translate-y: -0.25rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state="checked"] {
- --tw-translate-x: calc(100% - 2px);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.data-\[state\=unchecked\]\:translate-x-0[data-state="unchecked"] {
- --tw-translate-x: 0px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-@keyframes accordion-up {
- from {
- height: var(--radix-accordion-content-height);
- }
-
- to {
- height: 0;
- }
-}
-.data-\[state\=closed\]\:animate-accordion-up[data-state="closed"] {
- animation: accordion-up 0.2s ease-out;
-}
-@keyframes accordion-down {
- from {
- height: 0;
- }
-
- to {
- height: var(--radix-accordion-content-height);
- }
-}
-.data-\[state\=open\]\:animate-accordion-down[data-state="open"] {
- animation: accordion-down 0.2s ease-out;
-}
-.data-\[orientation\=vertical\]\:flex-col[data-orientation="vertical"] {
- flex-direction: column;
-}
-.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction="vertical"] {
- flex-direction: column;
-}
-.data-\[slot\=checkbox-group\]\:gap-3[data-slot="checkbox-group"] {
- gap: 0.75rem;
-}
-.data-\[range-end\=true\]\:rounded-md[data-range-end="true"] {
- border-radius: calc(var(--radius) - 2px);
-}
-.data-\[range-middle\=true\]\:rounded-none[data-range-middle="true"] {
- border-radius: 0px;
-}
-.data-\[range-start\=true\]\:rounded-md[data-range-start="true"] {
- border-radius: calc(var(--radius) - 2px);
-}
-.data-\[selected\=true\]\:rounded-none[data-selected="true"] {
- border-radius: 0px;
-}
-.data-\[spacing\=0\]\:rounded-none[data-spacing="0"] {
- border-radius: 0px;
-}
-.data-\[range-end\=true\]\:rounded-r-md[data-range-end="true"] {
- border-top-right-radius: calc(var(--radius) - 2px);
- border-bottom-right-radius: calc(var(--radius) - 2px);
-}
-.data-\[range-start\=true\]\:rounded-l-md[data-range-start="true"] {
- border-top-left-radius: calc(var(--radius) - 2px);
- border-bottom-left-radius: calc(var(--radius) - 2px);
-}
-.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction="bottom"] {
- border-top-left-radius: var(--radius);
- border-top-right-radius: var(--radius);
-}
-.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction="top"] {
- border-bottom-right-radius: var(--radius);
- border-bottom-left-radius: var(--radius);
-}
-.data-\[spacing\=0\]\:data-\[variant\=outline\]\:border-l-0[data-variant="outline"][data-spacing="0"] {
- border-left-width: 0px;
-}
-.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction="bottom"] {
- border-top-width: 1px;
-}
-.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction="left"] {
- border-right-width: 1px;
-}
-.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction="right"] {
- border-left-width: 1px;
-}
-.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction="top"] {
- border-bottom-width: 1px;
-}
-.data-\[state\=checked\]\:border-primary[data-state="checked"] {
- border-color: var(--primary);
-}
-.data-\[range-end\=true\]\:bg-primary[data-range-end="true"] {
- background-color: var(--primary);
-}
-.data-\[range-start\=true\]\:bg-primary[data-range-start="true"] {
- background-color: var(--primary);
-}
-.data-\[selected-single\=true\]\:bg-primary[data-selected-single="true"] {
- background-color: var(--primary);
-}
-.data-\[state\=active\]\:bg-background[data-state="active"] {
- background-color: var(--background);
-}
-.data-\[state\=checked\]\:bg-primary[data-state="checked"] {
- background-color: var(--primary);
-}
-.data-\[state\=open\]\:bg-secondary[data-state="open"] {
- background-color: var(--secondary);
-}
-.data-\[state\=selected\]\:bg-muted[data-state="selected"] {
- background-color: var(--muted);
-}
-.data-\[inset\]\:pl-8[data-inset] {
- padding-left: 2rem;
-}
-.data-\[variant\=label\]\:text-sm[data-variant="label"] {
- font-size: 0.875rem;
- line-height: 1.25rem;
-}
-.data-\[variant\=legend\]\:text-base[data-variant="legend"] {
- font-size: 1rem;
- line-height: 1.5rem;
-}
-.data-\[active\=true\]\:font-medium[data-active="true"] {
- font-weight: 500;
-}
-.data-\[disabled\=true\]\:opacity-50[data-disabled="true"] {
- opacity: 0.5;
-}
-.data-\[disabled\]\:opacity-50[data-disabled] {
- opacity: 0.5;
-}
-.data-\[state\=open\]\:opacity-100[data-state="open"] {
- opacity: 1;
-}
-.data-\[spacing\=0\]\:shadow-none[data-spacing="0"] {
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.data-\[spacing\=default\]\:data-\[variant\=outline\]\:shadow-xs[data-variant="outline"][data-spacing="default"] {
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.data-\[state\=active\]\:shadow-sm[data-state="active"] {
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.data-\[active\=true\]\:ring-\[3px\][data-active="true"] {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.data-\[state\=closed\]\:duration-300[data-state="closed"] {
- transition-duration: 300ms;
-}
-.data-\[state\=open\]\:duration-500[data-state="open"] {
- transition-duration: 500ms;
-}
-.data-\[motion\^\=from-\]\:animate-in[data-motion^="from-"] {
- animation-name: enter;
- animation-duration: 150ms;
- --tw-enter-opacity: initial;
- --tw-enter-scale: initial;
- --tw-enter-rotate: initial;
- --tw-enter-translate-x: initial;
- --tw-enter-translate-y: initial;
-}
-.data-\[state\=open\]\:animate-in[data-state="open"] {
- animation-name: enter;
- animation-duration: 150ms;
- --tw-enter-opacity: initial;
- --tw-enter-scale: initial;
- --tw-enter-rotate: initial;
- --tw-enter-translate-x: initial;
- --tw-enter-translate-y: initial;
-}
-.data-\[state\=visible\]\:animate-in[data-state="visible"] {
- animation-name: enter;
- animation-duration: 150ms;
- --tw-enter-opacity: initial;
- --tw-enter-scale: initial;
- --tw-enter-rotate: initial;
- --tw-enter-translate-x: initial;
- --tw-enter-translate-y: initial;
-}
-.data-\[motion\^\=to-\]\:animate-out[data-motion^="to-"] {
- animation-name: exit;
- animation-duration: 150ms;
- --tw-exit-opacity: initial;
- --tw-exit-scale: initial;
- --tw-exit-rotate: initial;
- --tw-exit-translate-x: initial;
- --tw-exit-translate-y: initial;
-}
-.data-\[state\=closed\]\:animate-out[data-state="closed"] {
- animation-name: exit;
- animation-duration: 150ms;
- --tw-exit-opacity: initial;
- --tw-exit-scale: initial;
- --tw-exit-rotate: initial;
- --tw-exit-translate-x: initial;
- --tw-exit-translate-y: initial;
-}
-.data-\[state\=hidden\]\:animate-out[data-state="hidden"] {
- animation-name: exit;
- animation-duration: 150ms;
- --tw-exit-opacity: initial;
- --tw-exit-scale: initial;
- --tw-exit-rotate: initial;
- --tw-exit-translate-x: initial;
- --tw-exit-translate-y: initial;
-}
-.data-\[motion\^\=from-\]\:fade-in[data-motion^="from-"] {
- --tw-enter-opacity: 0;
-}
-.data-\[motion\^\=to-\]\:fade-out[data-motion^="to-"] {
- --tw-exit-opacity: 0;
-}
-.data-\[state\=closed\]\:fade-out-0[data-state="closed"] {
- --tw-exit-opacity: 0;
-}
-.data-\[state\=hidden\]\:fade-out[data-state="hidden"] {
- --tw-exit-opacity: 0;
-}
-.data-\[state\=open\]\:fade-in-0[data-state="open"] {
- --tw-enter-opacity: 0;
-}
-.data-\[state\=visible\]\:fade-in[data-state="visible"] {
- --tw-enter-opacity: 0;
-}
-.data-\[state\=closed\]\:zoom-out-95[data-state="closed"] {
- --tw-exit-scale: 0.95;
-}
-.data-\[state\=open\]\:zoom-in-90[data-state="open"] {
- --tw-enter-scale: 0.9;
-}
-.data-\[state\=open\]\:zoom-in-95[data-state="open"] {
- --tw-enter-scale: 0.95;
-}
-.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion="from-end"] {
- --tw-enter-translate-x: 13rem;
-}
-.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion="from-start"] {
- --tw-enter-translate-x: -13rem;
-}
-.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion="to-end"] {
- --tw-exit-translate-x: 13rem;
-}
-.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion="to-start"] {
- --tw-exit-translate-x: -13rem;
-}
-.data-\[side\=bottom\]\:slide-in-from-top-2[data-side="bottom"] {
- --tw-enter-translate-y: -0.5rem;
-}
-.data-\[side\=left\]\:slide-in-from-right-2[data-side="left"] {
- --tw-enter-translate-x: 0.5rem;
-}
-.data-\[side\=right\]\:slide-in-from-left-2[data-side="right"] {
- --tw-enter-translate-x: -0.5rem;
-}
-.data-\[side\=top\]\:slide-in-from-bottom-2[data-side="top"] {
- --tw-enter-translate-y: 0.5rem;
-}
-.data-\[state\=closed\]\:slide-out-to-bottom[data-state="closed"] {
- --tw-exit-translate-y: 100%;
-}
-.data-\[state\=closed\]\:slide-out-to-left[data-state="closed"] {
- --tw-exit-translate-x: -100%;
-}
-.data-\[state\=closed\]\:slide-out-to-right[data-state="closed"] {
- --tw-exit-translate-x: 100%;
-}
-.data-\[state\=closed\]\:slide-out-to-top[data-state="closed"] {
- --tw-exit-translate-y: -100%;
-}
-.data-\[state\=open\]\:slide-in-from-bottom[data-state="open"] {
- --tw-enter-translate-y: 100%;
-}
-.data-\[state\=open\]\:slide-in-from-left[data-state="open"] {
- --tw-enter-translate-x: -100%;
-}
-.data-\[state\=open\]\:slide-in-from-right[data-state="open"] {
- --tw-enter-translate-x: 100%;
-}
-.data-\[state\=open\]\:slide-in-from-top[data-state="open"] {
- --tw-enter-translate-y: -100%;
-}
-.data-\[state\=closed\]\:duration-300[data-state="closed"] {
- animation-duration: 300ms;
-}
-.data-\[state\=open\]\:duration-500[data-state="open"] {
- animation-duration: 500ms;
-}
-.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot="select-value"] > * {
- overflow: hidden;
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: 1;
-}
-.\*\:data-\[slot\=select-value\]\:flex[data-slot="select-value"] > * {
- display: flex;
-}
-.\*\:data-\[slot\=select-value\]\:items-center[data-slot="select-value"] > * {
- align-items: center;
-}
-.\*\:data-\[slot\=select-value\]\:gap-2[data-slot="select-value"] > * {
- gap: 0.5rem;
-}
-.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction="vertical"]::after {
- content: var(--tw-content);
- left: 0px;
-}
-.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction="vertical"]::after {
- content: var(--tw-content);
- height: 0.25rem;
-}
-.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction="vertical"]::after {
- content: var(--tw-content);
- width: 100%;
-}
-.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction="vertical"]::after {
- content: var(--tw-content);
- --tw-translate-y: -50%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction="vertical"]::after {
- content: var(--tw-content);
- --tw-translate-x: 0px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.data-\[spacing\=0\]\:first\:rounded-l-md:first-child[data-spacing="0"] {
- border-top-left-radius: calc(var(--radius) - 2px);
- border-bottom-left-radius: calc(var(--radius) - 2px);
-}
-.data-\[spacing\=0\]\:data-\[variant\=outline\]\:first\:border-l:first-child[data-variant="outline"][data-spacing="0"] {
- border-left-width: 1px;
-}
-.data-\[spacing\=0\]\:last\:rounded-r-md:last-child[data-spacing="0"] {
- border-top-right-radius: calc(var(--radius) - 2px);
- border-bottom-right-radius: calc(var(--radius) - 2px);
-}
-.group[data-disabled="true"] .group-data-\[disabled\=true\]\:pointer-events-none {
- pointer-events: none;
-}
-.group\/day[data-focused="true"] .group-data-\[focused\=true\]\/day\:relative {
- position: relative;
-}
-.group[data-collapsible="offcanvas"]
- .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\] {
- left: calc(var(--sidebar-width) * -1);
-}
-.group[data-collapsible="offcanvas"]
- .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\] {
- right: calc(var(--sidebar-width) * -1);
-}
-.group[data-side="left"] .group-data-\[side\=left\]\:-right-4 {
- right: -1rem;
-}
-.group[data-side="right"] .group-data-\[side\=right\]\:left-0 {
- left: 0px;
-}
-.group\/navigation-menu[data-viewport="false"] .group-data-\[viewport\=false\]\/navigation-menu\:top-full {
- top: 100%;
-}
-.group\/day[data-focused="true"] .group-data-\[focused\=true\]\/day\:z-10 {
- z-index: 10;
-}
-.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:-mt-8 {
- margin-top: -2rem;
-}
-.group\/field-group[data-variant="outline"] .group-data-\[variant\=outline\]\/field-group\:-mb-2 {
- margin-bottom: -0.5rem;
-}
-.group\/navigation-menu[data-viewport="false"] .group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5 {
- margin-top: 0.375rem;
-}
-.group\/drawer-content[data-vaul-drawer-direction="bottom"]
- .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block {
- display: block;
-}
-.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:hidden {
- display: none;
-}
-.group[data-collapsible="icon"]
- .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\] {
- width: calc(var(--sidebar-width-icon) + (--spacing(4)));
-}
-.group[data-collapsible="icon"]
- .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\] {
- width: calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px);
-}
-.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:w-0 {
- width: 0px;
-}
-.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:translate-x-0 {
- --tw-translate-x: 0px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.group[data-side="right"] .group-data-\[side\=right\]\:rotate-180 {
- --tw-rotate: 180deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.group[data-state="open"] .group-data-\[state\=open\]\:rotate-180 {
- --tw-rotate: 180deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:overflow-hidden {
- overflow: hidden;
-}
-.group\/navigation-menu[data-viewport="false"] .group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden {
- overflow: hidden;
-}
-.group[data-variant="floating"] .group-data-\[variant\=floating\]\:rounded-lg {
- border-radius: var(--radius);
-}
-.group\/navigation-menu[data-viewport="false"] .group-data-\[viewport\=false\]\/navigation-menu\:rounded-md {
- border-radius: calc(var(--radius) - 2px);
-}
-.group[data-variant="floating"] .group-data-\[variant\=floating\]\:border {
- border-width: 1px;
-}
-.group\/navigation-menu[data-viewport="false"] .group-data-\[viewport\=false\]\/navigation-menu\:border {
- border-width: 1px;
-}
-.group[data-side="left"] .group-data-\[side\=left\]\:border-r {
- border-right-width: 1px;
-}
-.group[data-side="right"] .group-data-\[side\=right\]\:border-l {
- border-left-width: 1px;
-}
-.group\/drawer-content[data-vaul-drawer-direction="bottom"]
- .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center {
- text-align: center;
-}
-.group\/drawer-content[data-vaul-drawer-direction="top"]
- .group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center {
- text-align: center;
-}
-.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:opacity-0 {
- opacity: 0;
-}
-.group\/field[data-disabled="true"] .group-data-\[disabled\=true\]\/field\:opacity-50 {
- opacity: 0.5;
-}
-.group\/input-group[data-disabled="true"] .group-data-\[disabled\=true\]\/input-group\:opacity-50 {
- opacity: 0.5;
-}
-.group[data-disabled="true"] .group-data-\[disabled\=true\]\:opacity-50 {
- opacity: 0.5;
-}
-.group[data-variant="floating"] .group-data-\[variant\=floating\]\:shadow-sm {
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.group\/navigation-menu[data-viewport="false"] .group-data-\[viewport\=false\]\/navigation-menu\:shadow {
- --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
-}
-.group\/day[data-focused="true"] .group-data-\[focused\=true\]\/day\:ring-\[3px\] {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.group\/navigation-menu[data-viewport="false"] .group-data-\[viewport\=false\]\/navigation-menu\:duration-200 {
- transition-duration: 200ms;
- animation-duration: 200ms;
-}
-.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:after\:left-full::after {
- content: var(--tw-content);
- left: 100%;
-}
-.group\/navigation-menu[data-viewport="false"]
- .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in[data-state="open"] {
- animation-name: enter;
- animation-duration: 150ms;
- --tw-enter-opacity: initial;
- --tw-enter-scale: initial;
- --tw-enter-rotate: initial;
- --tw-enter-translate-x: initial;
- --tw-enter-translate-y: initial;
-}
-.group\/navigation-menu[data-viewport="false"]
- .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out[data-state="closed"] {
- animation-name: exit;
- animation-duration: 150ms;
- --tw-exit-opacity: initial;
- --tw-exit-scale: initial;
- --tw-exit-rotate: initial;
- --tw-exit-translate-x: initial;
- --tw-exit-translate-y: initial;
-}
-.group\/navigation-menu[data-viewport="false"]
- .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0[data-state="closed"] {
- --tw-exit-opacity: 0;
-}
-.group\/navigation-menu[data-viewport="false"]
- .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0[data-state="open"] {
- --tw-enter-opacity: 0;
-}
-.group\/navigation-menu[data-viewport="false"]
- .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95[data-state="closed"] {
- --tw-exit-scale: 0.95;
-}
-.group\/navigation-menu[data-viewport="false"]
- .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95[data-state="open"] {
- --tw-enter-scale: 0.95;
-}
-.peer\/menu-button[data-size="default"] ~ .peer-data-\[size\=default\]\/menu-button\:top-1\.5 {
- top: 0.375rem;
-}
-.peer\/menu-button[data-size="lg"] ~ .peer-data-\[size\=lg\]\/menu-button\:top-2\.5 {
- top: 0.625rem;
-}
-.peer\/menu-button[data-size="sm"] ~ .peer-data-\[size\=sm\]\/menu-button\:top-1 {
- top: 0.25rem;
-}
-.dark\:bg-transparent:is(.dark *) {
- background-color: transparent;
-}
-.dark\:data-\[state\=checked\]\:bg-primary[data-state="checked"]:is(.dark *) {
- background-color: var(--primary);
-}
-.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state="unchecked"]:is(.dark *) {
- background-color: var(--foreground);
-}
-.dark\:data-\[state\=active\]\:text-foreground[data-state="active"]:is(.dark *) {
- color: var(--foreground);
-}
-@media not all and (min-width: 768px) {
- .max-md\:gap-10 {
- gap: 2.5rem;
- }
-
- .max-md\:py-20 {
- padding-top: 5rem;
- padding-bottom: 5rem;
- }
-
- .max-md\:text-4xl {
- font-size: 2.25rem;
- line-height: 2.5rem;
- }
-
- .max-md\:text-\[28px\] {
- font-size: 28px;
- }
-}
-@media (min-width: 640px) {
- .sm\:block {
- display: block;
- }
-
- .sm\:flex {
- display: flex;
- }
-
- .sm\:max-w-lg {
- max-width: 32rem;
- }
-
- .sm\:max-w-sm {
- max-width: 24rem;
- }
-
- .sm\:grid-cols-2 {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-
- .sm\:flex-row {
- flex-direction: row;
- }
-
- .sm\:justify-end {
- justify-content: flex-end;
- }
-
- .sm\:gap-2\.5 {
- gap: 0.625rem;
- }
-
- .sm\:pl-2\.5 {
- padding-left: 0.625rem;
- }
-
- .sm\:pr-2\.5 {
- padding-right: 0.625rem;
- }
-
- .sm\:text-left {
- text-align: left;
- }
-
- .data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction="left"] {
- max-width: 24rem;
- }
-
- .data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction="right"] {
- max-width: 24rem;
- }
-}
-@media (min-width: 768px) {
- .md\:absolute {
- position: absolute;
- }
-
- .md\:block {
- display: block;
- }
-
- .md\:flex {
- display: flex;
- }
-
- .md\:hidden {
- display: none;
- }
-
- .md\:w-\[var\(--radix-navigation-menu-viewport-width\)\] {
- width: var(--radix-navigation-menu-viewport-width);
- }
-
- .md\:w-auto {
- width: auto;
- }
-
- .md\:grid-cols-2 {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-
- .md\:grid-cols-3 {
- grid-template-columns: repeat(3, minmax(0, 1fr));
- }
-
- .md\:flex-row {
- flex-direction: row;
- }
-
- .md\:gap-1\.5 {
- gap: 0.375rem;
- }
-
- .md\:p-12 {
- padding: 3rem;
- }
-
- .md\:text-left {
- text-align: left;
- }
-
- .md\:text-\[52px\] {
- font-size: 52px;
- }
-
- .md\:text-sm {
- font-size: 0.875rem;
- line-height: 1.25rem;
- }
-
- .md\:opacity-0 {
- opacity: 0;
- }
-
- .md\:after\:hidden::after {
- content: var(--tw-content);
- display: none;
- }
-
- .peer[data-variant="inset"] ~ .md\:peer-data-\[variant\=inset\]\:m-2 {
- margin: 0.5rem;
- }
-
- .peer[data-variant="inset"] ~ .md\:peer-data-\[variant\=inset\]\:ml-0 {
- margin-left: 0px;
- }
-
- .peer[data-variant="inset"][data-state="collapsed"]
- ~ .md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2 {
- margin-left: 0.5rem;
- }
-
- .peer[data-variant="inset"] ~ .md\:peer-data-\[variant\=inset\]\:rounded-xl {
- border-radius: calc(var(--radius) + 4px);
- }
-
- .peer[data-variant="inset"] ~ .md\:peer-data-\[variant\=inset\]\:shadow-sm {
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
- }
-}
-@media (min-width: 1024px) {
- .lg\:grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr));
- }
-
- .lg\:text-\[72px\] {
- font-size: 72px;
- }
-}
-.\[\&\+\[data-slot\=item-content\]\]\:flex-none + [data-slot="item-content"] {
- flex: none;
-}
-.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected="true"] button {
- border-top-left-radius: calc(var(--radius) - 2px);
- border-bottom-left-radius: calc(var(--radius) - 2px);
-}
-.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role="checkbox"]) {
- padding-right: 0px;
-}
-.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected="true"] button {
- border-top-right-radius: calc(var(--radius) - 2px);
- border-bottom-right-radius: calc(var(--radius) - 2px);
-}
-.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected="true"] button {
- border-top-left-radius: calc(var(--radius) - 2px);
- border-bottom-left-radius: calc(var(--radius) - 2px);
-}
-.\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none > *:not(:first-child) {
- border-top-left-radius: 0px;
- border-bottom-left-radius: 0px;
-}
-.\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none > *:not(:first-child) {
- border-top-left-radius: 0px;
- border-top-right-radius: 0px;
-}
-.\[\&\>\*\:not\(\:first-child\)\]\:border-l-0 > *:not(:first-child) {
- border-left-width: 0px;
-}
-.\[\&\>\*\:not\(\:first-child\)\]\:border-t-0 > *:not(:first-child) {
- border-top-width: 0px;
-}
-.\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none > *:not(:last-child) {
- border-bottom-right-radius: 0px;
- border-bottom-left-radius: 0px;
-}
-.\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none > *:not(:last-child) {
- border-top-right-radius: 0px;
- border-bottom-right-radius: 0px;
-}
-.\[\&\>\*\]\:w-full > * {
- width: 100%;
-}
-.\[\&\>\*\]\:focus-visible\:relative:focus-visible > * {
- position: relative;
-}
-.\[\&\>\*\]\:focus-visible\:z-10:focus-visible > * {
- z-index: 10;
-}
-.\[\&\>\*\]\:data-\[slot\=field\]\:p-4[data-slot="field"] > * {
- padding: 1rem;
-}
-.\[\&\>\.sr-only\]\:w-auto > .sr-only {
- width: auto;
-}
-.\[\&\>\[data-slot\=field-group\]\]\:gap-4 > [data-slot="field-group"] {
- gap: 1rem;
-}
-.\[\&\>\[data-slot\=field-label\]\]\:flex-auto > [data-slot="field-label"] {
- flex: 1 1 auto;
-}
-.has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md
- > [data-slot="select-trigger"]:last-of-type:has(select[aria-hidden="true"]:last-child) {
- border-top-right-radius: calc(var(--radius) - 2px);
- border-bottom-right-radius: calc(var(--radius) - 2px);
-}
-.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit
- > [data-slot="select-trigger"]:not([class*="w-"]) {
- width: -moz-fit-content;
- width: fit-content;
-}
-.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\] > [role="checkbox"] {
- --tw-translate-y: 2px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.\[\&\>a\:hover\]\:text-primary > a:hover {
- color: var(--primary);
-}
-.\[\&\>a\]\:underline > a {
- text-decoration-line: underline;
-}
-.\[\&\>a\]\:underline-offset-4 > a {
- text-underline-offset: 4px;
-}
-.\[\&\>button\]\:hidden > button {
- display: none;
-}
-.\[\&\>input\]\:flex-1 > input {
- flex: 1 1 0%;
-}
-.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3 > input:has(> [data-align="block-end"]) {
- padding-top: 0.75rem;
-}
-.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3 > input:has(> [data-align="block-start"]) {
- padding-bottom: 0.75rem;
-}
-.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-2 > input:has(> [data-align="inline-end"]) {
- padding-right: 0.5rem;
-}
-.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-2 > input:has(> [data-align="inline-start"]) {
- padding-left: 0.5rem;
-}
-.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\] > kbd {
- border-radius: calc(var(--radius) - 5px);
-}
-.\[\&\>span\:last-child\]\:truncate > span:last-child {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.\[\&\>span\]\:text-xs > span {
- font-size: 0.75rem;
- line-height: 1rem;
-}
-.\[\&\>span\]\:opacity-70 > span {
- opacity: 0.7;
-}
-.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 > svg:not([class*="size-"]) {
- width: 0.875rem;
- height: 0.875rem;
-}
-.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 > svg:not([class*="size-"]) {
- width: 1rem;
- height: 1rem;
-}
-.\[\&\>svg\]\:pointer-events-none > svg {
- pointer-events: none;
-}
-.\[\&\>svg\]\:size-3 > svg {
- width: 0.75rem;
- height: 0.75rem;
-}
-.\[\&\>svg\]\:size-3\.5 > svg {
- width: 0.875rem;
- height: 0.875rem;
-}
-.\[\&\>svg\]\:size-4 > svg {
- width: 1rem;
- height: 1rem;
-}
-.\[\&\>svg\]\:h-2\.5 > svg {
- height: 0.625rem;
-}
-.\[\&\>svg\]\:h-3 > svg {
- height: 0.75rem;
-}
-.\[\&\>svg\]\:w-2\.5 > svg {
- width: 0.625rem;
-}
-.\[\&\>svg\]\:w-3 > svg {
- width: 0.75rem;
-}
-.\[\&\>svg\]\:shrink-0 > svg {
- flex-shrink: 0;
-}
-.\[\&\>svg\]\:translate-y-0\.5 > svg {
- --tw-translate-y: 0.125rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.\[\&\>svg\]\:text-current > svg {
- color: currentColor;
-}
-.\[\&\>tr\]\:last\:border-b-0:last-child > tr {
- border-bottom-width: 0px;
-}
-.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction="vertical"] > div {
- --tw-rotate: 90deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state="open"] > svg {
- --tw-rotate: 180deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x))
- skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor {
- stroke: var(--border-color);
-}
-.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"] {
- stroke: transparent;
-}
-.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"] {
- stroke: var(--border-color);
-}
-.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector {
- fill: var(--muted);
-}
-.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor {
- fill: var(--muted);
-}
-.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"] {
- stroke: var(--border-color);
-}
-.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"] {
- stroke: transparent;
-}
-.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading] {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading] {
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
-}
-.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading] {
- font-size: 0.75rem;
- line-height: 1rem;
-}
-.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading] {
- font-weight: 500;
-}
-.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden]) ~ [cmdk-group] {
- padding-top: 0px;
-}
-.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group] {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg {
- height: 1.25rem;
-}
-.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg {
- width: 1.25rem;
-}
-.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input] {
- height: 3rem;
-}
-.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item] {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
-}
-.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item] {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
-}
-.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg {
- height: 1.25rem;
-}
-.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg {
- width: 1.25rem;
-}
-.\[\&_img\]\:size-full img {
- width: 100%;
- height: 100%;
-}
-.\[\&_img\]\:object-cover img {
- -o-object-fit: cover;
- object-fit: cover;
-}
-.\[\&_p\]\:leading-relaxed p {
- line-height: 1.625;
-}
-.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*="size-"]) {
- width: 0.75rem;
- height: 0.75rem;
-}
-.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*="size-"]) {
- width: 1rem;
- height: 1rem;
-}
-.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*="size-"]) {
- width: 1.5rem;
- height: 1.5rem;
-}
-.\[\&_svg\]\:pointer-events-none svg {
- pointer-events: none;
-}
-.\[\&_svg\]\:shrink-0 svg {
- flex-shrink: 0;
-}
-.\[\&_tr\:last-child\]\:border-0 tr:last-child {
- border-width: 0px;
-}
-.\[\&_tr\]\:border-b tr {
- border-bottom-width: 1px;
-}
-[data-side="left"][data-collapsible="offcanvas"] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2 {
- right: -0.5rem;
-}
-[data-side="left"][data-state="collapsed"] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize {
- cursor: e-resize;
-}
-[data-side="right"][data-collapsible="offcanvas"] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2 {
- left: -0.5rem;
-}
-[data-side="right"][data-state="collapsed"] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize {
- cursor: w-resize;
-}
-[data-slot="card-content"] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent {
- background-color: transparent;
-}
-[data-slot="popover-content"] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent {
- background-color: transparent;
-}
-[data-slot="tooltip-content"] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background {
- color: var(--background);
-}
-[data-variant="legend"] + .\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5 {
- margin-top: -0.375rem;
-}
diff --git a/refs/ref4/duck2.css b/refs/ref4/duck2.css
deleted file mode 100644
index eaf86fc..0000000
--- a/refs/ref4/duck2.css
+++ /dev/null
@@ -1,73 +0,0 @@
-.rfm-marquee-container {
- overflow-x: hidden;
- display: flex;
- flex-direction: row;
- position: relative;
- width: var(--width);
- transform: var(--transform);
-}
-.rfm-marquee-container:hover div {
- animation-play-state: var(--pause-on-hover);
-}
-.rfm-marquee-container:active div {
- animation-play-state: var(--pause-on-click);
-}
-
-.rfm-overlay {
- position: absolute;
- width: 100%;
- height: 100%;
-}
-.rfm-overlay::before,
-.rfm-overlay::after {
- background: linear-gradient(to right, var(--gradient-color), rgba(255, 255, 255, 0));
- content: "";
- height: 100%;
- position: absolute;
- width: var(--gradient-width);
- z-index: 2;
- pointer-events: none;
- touch-action: none;
-}
-.rfm-overlay::after {
- right: 0;
- top: 0;
- transform: rotateZ(180deg);
-}
-.rfm-overlay::before {
- left: 0;
- top: 0;
-}
-
-.rfm-marquee {
- flex: 0 0 auto;
- min-width: var(--min-width);
- z-index: 1;
- display: flex;
- flex-direction: row;
- align-items: center;
- animation: scroll var(--duration) linear var(--delay) var(--iteration-count);
- animation-play-state: var(--play);
- animation-delay: var(--delay);
- animation-direction: var(--direction);
-}
-@keyframes scroll {
- 0% {
- transform: translateX(0%);
- }
- 100% {
- transform: translateX(-100%);
- }
-}
-
-.rfm-initial-child-container {
- flex: 0 0 auto;
- display: flex;
- min-width: auto;
- flex-direction: row;
- align-items: center;
-}
-
-.rfm-child {
- transform: var(--transform);
-}
diff --git a/refs/ref4/index.html b/refs/ref4/index.html
deleted file mode 100644
index 9bfbd56..0000000
--- a/refs/ref4/index.html
+++ /dev/null
@@ -1,2230 +0,0 @@
-
-
-
-
- RDaaS — Rubber Duck Debugging as a Service
-
-
-
-
-
-
-
-
-
-
-
-
-
- 🦆 RDaaS
-
-
-
- How It Works
- Roadmap
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- START NOW
-
-
-
-
-
-
-
-
-
-
- // RUBBER DUCK DEBUGGING AS A SERVICE
-
-
- Stuck on a bug? Talk it out with your duck.
-
-
- The world's first on-demand rubber duck debugging service. Explain your code line by line. Watch the
- solution appear. No judgment, just quacks.
-
-
-
-
-
-
-
- $
- rdaas init
-
-
- >
- Initializing debugging session...
-
-
- >
- Duck is listening...
-
-
- >
- Explain your problem.
-
-
-
-
- START DEBUGGING
-
-
-
-
-
-
-
-
-
-
-
-
- Alex Chen Senior Developer @TechCorp
-
-
"Fixed a 3-day bug in 10 minutes"
-
-
-
-
-
-
- Maria Santos Full Stack Engineer
-
-
"My duck never judges my spaghetti code"
-
-
-
-
-
-
- James Wilson Tech Lead @StartupX
-
-
"Essential part of our debugging workflow"
-
-
-
-
-
-
- Yuki Tanaka Indie Developer
-
-
"Better than Stack Overflow sometimes"
-
-
-
-
-
-
- Priya Sharma Backend Engineer
-
-
"The MCP integration is a game changer"
-
-
-
-
-
-
- Lucas Meyer DevOps Specialist
-
-
"I debug faster with my duck"
-
-
-
-
-
-
- Sarah Kim Frontend Developer
-
-
"Finally, someone who listens"
-
-
-
-
-
-
- David Park Software Architect
-
-
"Surprisingly effective every time"
-
-
-
-
-
-
-
-
-
- Alex Chen Senior Developer @TechCorp
-
-
"Fixed a 3-day bug in 10 minutes"
-
-
-
-
-
-
- Maria Santos Full Stack Engineer
-
-
"My duck never judges my spaghetti code"
-
-
-
-
-
-
- James Wilson Tech Lead @StartupX
-
-
"Essential part of our debugging workflow"
-
-
-
-
-
-
- Yuki Tanaka Indie Developer
-
-
"Better than Stack Overflow sometimes"
-
-
-
-
-
-
- Priya Sharma Backend Engineer
-
-
"The MCP integration is a game changer"
-
-
-
-
-
-
- Lucas Meyer DevOps Specialist
-
-
"I debug faster with my duck"
-
-
-
-
-
-
- Sarah Kim Frontend Developer
-
-
"Finally, someone who listens"
-
-
-
-
-
-
- David Park Software Architect
-
-
"Surprisingly effective every time"
-
-
-
-
-
-
-
-
-
- // HOW IT WORKS
-
-
- Three steps to enlightenment
-
-
-
-
-
- 01
-
-
-
-
-
- Describe your bug
-
-
- Paste your code, explain the error, describe what you expected. Our duck is a patient listener.
-
-
-
-
- 02
-
-
-
-
-
-
- Explain line by line
-
-
- Walk through your logic step by step. The act of explaining often reveals the solution. Your duck
- nods along.
-
-
-
-
- 03
-
-
-
-
-
- Find the solution
-
-
- That moment of clarity hits. The bug was a missing semicolon, a wrong variable name, or a logical
- oversight. You got this.
-
-
-
-
-
-
-
-
-
- // FEATURES
-
-
- Everything you need to debug
-
-
-
-
-
-
-
-
-
-
-
-
-
- Syntax Highlighting
-
-
- Your code is beautifully highlighted as you paste it. 40+ languages supported. Your duck
- appreciates clean formatting.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Session History
-
-
- Every debugging session is saved. Revisit past bugs, see your thought process, build a personal
- knowledge base.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Multi-Duck Support
-
-
- Switch between different duck personas. The strict professor. The calm zen master. The chaotic
- energy duck.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- API Access
-
-
- Integrate debugging into your workflow. RESTful API with webhooks. Debug programmatically when
- words fail.
-
-
-
-
-
-
-
-
-
-
- // ROADMAP
-
-
- What's coming next
-
-
- The MVP is live. Here's what we're building next to make your debugging experience even more powerful.
-
-
-
-
-
IN PROGRESS
-
-
-
-
-
-
- MCP Server
-
-
- Model Context Protocol server for IDE integration. Connect your editor directly to your duck.
-
-
-
- VS Code extension
-
-
- JetBrains plugin
-
-
- Neovim integration
-
-
-
-
-
PLANNED
-
-
-
-
-
-
-
- Duck Skins
-
-
- Customize your debugging companion. From cyberpunk neon to retro CRT aesthetics.
-
-
-
- 20+ unique skins
-
-
- Community marketplace
-
-
- Seasonal collections
-
-
-
-
-
COMING SOON
-
-
-
-
-
-
-
-
- Battlepass
-
-
- Gamify your debugging journey. Earn XP for every bug squashed. Unlock exclusive rewards.
-
-
-
- Weekly challenges
-
-
- Exclusive duck skins
-
-
- Leaderboard rankings
-
-
-
-
-
COMING SOON
-
-
-
-
-
-
- Lootboxes
-
-
- Mystery debugging power-ups. Random boosts, rare skins, and surprise features.
-
-
-
- Common to Legendary tiers
-
-
- Guaranteed no duplicates
-
-
- Trade with fellow debuggers
-
-
-
-
-
-
-
-
-
- $ rdaas status
-
-
-
- > Service status: ONLINE
-
-
- > Active debuggers: 12 847
-
-
- > Bugs solved today: 3 291
-
-
-
- join the flock
-
-
-
-
-
-
-
-
-
- 🦆 RDaaS
-
-
- Rubber Duck Debugging as a Service
-
-
- Built for developers, by developers.
-
-
-
-
-
-
- © 2026 RDaaS. All rights reserved.
-
-
-
-
-
-
-
-
-
- Ready to debug?
-
-
- Your duck is waiting.
-
-
-
- START NOW
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-