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). +

+

Инструменты

+ +
+ ); +} 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 - - - - - - - - \ 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 - - - - - - -
-
- - - - - -
-
-
- 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-terminal — zsh -
-
-
- $ 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% -
-
-
-
-
- - -
-
- -

Why Duck Debugging?

-

Proven by decades of programmer folklore, now powered by modern tech.

-
-
-
-
🦆
-

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.

-
-
-
- - -
-
- -

What's Coming Next

-

We're just getting started. Here's what's on the horizon.

-
- -
- -
-
-
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 -
-
-
-
- - -
-
- -

Choose Your Debug Tier

-

From free quacks to enterprise-level debugging.

-
-
-
-

Free Quack

-
$0/mo
-
    -
  • 5 debug sessions/day
  • -
  • Basic duck listener
  • -
  • Standard skins
  • -
  • Community support
  • -
- Get Started -
- -
-

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 - -
-
- - - - - - - 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 - - - - - - -
-
- - -
-
-
-
-
- Rubber debug duck -
- 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 - - - - - - - -
-
- -
-
- duck://debug - -
- -
-
-
-
-
-
-
-
- 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. -

-
-
- - $Start now - -

No install. Start debugging in 30 seconds.

-
-
-
-
-
-
-
- terminal://session -
-
-
-
-
- $ describe issue --env production --symptom intermittent -
-
- > assistant: what changed before the failures started? -
-
- $ plan.next() -
- 1. Reproduce with clean input2. Compare environment flags3. Trace state mutation before render -
-
-
- Abstract duck and code flow -
-
-
-
-
-
-
-
-

workflow

-

- How it works -

-

- A short path from confusion to the next useful debugging action. -

-
-
-
- Abstract bug signal network -
-
-
- - - -
- 01 -
-
-

Describe problem

-

- Write what is broken, when it happens, and what you already checked. -

-
-
-
-
- Abstract duck dialogue waves -
-
-
- - - -
- 02 -
-
-

Talk to duck assistant

-

- The assistant asks clarifying questions and keeps the debugging thread focused. -

-
-
-
-
- Abstract structured debug path -
-
-
- - - -
- 03 -
-
-

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. -

-
-
-
-
-
- 01 -
- In progress -
-
-
-

MCP server

-

- Connect the assistant to richer developer workflows and external tooling. -

-
-
- ETAQ3 -
-
-
-
-
-
- 02 -
- Planned -
-
-
-

Skins

-

- Theme packs and visual personalization for your debugging workspace. -

-
-
- ETAQ3 -
-
-
-
-
-
- 03 -
- Planned -
-
-
-

Battlepass

-

- Progression mechanics for debugging sessions, streaks, and milestones. -

-
-
- ETAQ4 -
-
-
-
-
-
- 04 -
- Backlog -
-
-
-

Lootboxes

-

- Experimental unlockables for playful engagement without blocking core utility. -

-
-
- ETALater -
-
-
-
-
- Abstract four track roadmap -
-
-
-
-
-
-

faq

-

- Questions developers ask before they try it -

-

- Short answers for common objections, setup worries, and workflow questions. -

-
-
-
-

- -

- -
-
-

- -

- -
-
-

- -

- -
-
-

- -

- -
-
-

- -

- -
-
-

- -

- -
-
-
-
-
-
-
-
-

ready

-

- Explain the bug. Follow the path. Ship the fix. -

-

- Built for developers who want a calm debugging assistant instead of more noise. -

-
- -
-
-
-
-
-
-

contacts

-

- Need a custom rollout or have product questions? -

-

- Send a note and we will reply with the best next step for your team, workflow, or partnership. -

-
-

Email

- hello@duckdebug.dev -
-
-
-
-
-
- -
-
- -
-
- -
- -
-
-
-
-
-
- -
-
- - 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 - - - - - - - - -
-
- -
-
- -
-
- // 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. -
-
-
- -
- -
-
-
- -
-
-
-
- // 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 -
-
- -
-
-
- - -
-
- - - - -