vibedoc 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +23 -19
  3. package/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.js +1 -1
  6. package/.next/prerender-manifest.json +1 -1
  7. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(app)/board/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/(app)/docs/page.js +1 -1
  10. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/(app)/setup/page.js +2 -1
  14. package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
  15. package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +1 -1
  19. package/.next/server/app/activity.html +1 -1
  20. package/.next/server/app/activity.rsc +2 -2
  21. package/.next/server/app/api/mcp/route.js +2 -2
  22. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  23. package/.next/server/app/api/setup/generate/route.js +7 -7
  24. package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
  25. package/.next/server/app/board.html +1 -1
  26. package/.next/server/app/board.rsc +2 -2
  27. package/.next/server/app/docs.html +1 -1
  28. package/.next/server/app/docs.rsc +3 -3
  29. package/.next/server/app/index.html +1 -1
  30. package/.next/server/app/index.rsc +1 -1
  31. package/.next/server/app/memory.html +1 -1
  32. package/.next/server/app/memory.rsc +2 -2
  33. package/.next/server/app/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/settings.html +1 -1
  35. package/.next/server/app/settings.rsc +2 -2
  36. package/.next/server/app/setup.html +1 -1
  37. package/.next/server/app/setup.rsc +3 -3
  38. package/.next/server/app-paths-manifest.json +10 -10
  39. package/.next/server/chunks/118.js +2107 -0
  40. package/.next/server/chunks/191.js +1558 -501
  41. package/.next/server/middleware-build-manifest.js +1 -1
  42. package/.next/server/pages/404.html +1 -1
  43. package/.next/server/pages/500.html +1 -1
  44. package/.next/server/pages-manifest.json +1 -1
  45. package/.next/server/server-reference-manifest.js +1 -1
  46. package/.next/server/server-reference-manifest.json +1 -1
  47. package/.next/static/chunks/5179-76391417caead0bc.js +1 -0
  48. package/.next/static/chunks/6441-8a1066f99fe4fead.js +1 -0
  49. package/.next/static/chunks/app/(app)/docs/{page-17670ed46c3594e6.js → page-f5615cefbd3d1c64.js} +1 -1
  50. package/.next/static/chunks/app/(app)/{layout-34b4046ccf919d3f.js → layout-ef459e6f184dba6b.js} +1 -1
  51. package/.next/static/chunks/app/(app)/setup/page-a47e3a9a44666f50.js +1 -0
  52. package/.next/static/css/48c54dd7bfa2411e.css +5 -0
  53. package/package.json +1 -1
  54. package/.next/server/chunks/661.js +0 -1050
  55. package/.next/static/chunks/845-f90ef49ed88a44a2.js +0 -1
  56. package/.next/static/chunks/app/(app)/setup/page-5fd7500bd578e730.js +0 -1
  57. package/.next/static/css/518ce8dddf398f57.css +0 -5
  58. /package/.next/static/{moF7Sng2pYdyIpULgHRjM → SozubT4AiNYJ3ynkRV0zo}/_buildManifest.js +0 -0
  59. /package/.next/static/{moF7Sng2pYdyIpULgHRjM → SozubT4AiNYJ3ynkRV0zo}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[845],{82825:function(e,n,t){t.d(n,{t:function(){return f}});var a=t(59533),s=t(31229),r=t(21263),o=t(66611),i=t(52284),d=t(72374),l=t(220),c=t(13191),u=t(8637);let p=new Date().toISOString().split("T")[0],m=[{id:"blank",name:"Blank Document",description:"Empty markdown file",defaultPath:"docs/untitled.md",content:"# Untitled\n\n"},{id:"claude-md",name:"CLAUDE.md",description:"AI agent instructions for Claude Code",defaultPath:"CLAUDE.md",content:"# {{PROJECT_NAME}} — Agent Instructions\n\n## What this is\n{{DESCRIPTION}}\n\n## Stack\n{{TECH_STACK}}\n\n## Project type\n{{PROJECT_TYPE}}\n\n## Commands\n```bash\n# Install dependencies\nnpm install\n\n# Start development\nnpm run dev\n\n# Build for production\nnpm run build\n\n# Run tests\nnpm test\n```\n\n## Key architecture rules\n- Follow existing patterns before introducing new abstractions\n- Keep modules small and focused\n- Write tests for business logic\n\n## Key conventions\n{{CONVENTIONS}}\n\n## Key features\n{{KEY_FEATURES}}\n\n## Non-negotiables\n- Keep code clean and well-documented\n- Maintain test coverage\n- Follow security best practices\n- Never commit secrets or credentials\n"},{id:"agents-md",name:"AGENTS.md",description:"AI agent instructions (multi-agent / OpenAI)",defaultPath:"AGENTS.md",content:"# {{PROJECT_NAME}} — Agent Instructions\n\n## Overview\n{{DESCRIPTION}}\n\n## Stack\n{{TECH_STACK}}\n\n## Commands\n```bash\nnpm install\nnpm run dev\nnpm run build\nnpm test\n```\n\n## Key conventions\n{{CONVENTIONS}}\n\n## Non-negotiables\n- Follow existing code patterns\n- Write tests for new features\n- Never commit secrets or credentials\n"},{id:"gemini-md",name:"GEMINI.md",description:"AI agent instructions for Gemini CLI",defaultPath:"GEMINI.md",content:"# {{PROJECT_NAME}} — Gemini Agent Instructions\n\n## What this is\n{{DESCRIPTION}}\n\n## Stack\n{{TECH_STACK}}\n\n## Commands\n```bash\n# Install dependencies\nnpm install\n\n# Start development\nnpm run dev\n\n# Build for production\nnpm run build\n\n# Run tests\nnpm test\n```\n\n## Key conventions\n{{CONVENTIONS}}\n\n## Non-negotiables\n- Follow existing code patterns\n- Write tests for new features\n- Never commit secrets or credentials\n"},{id:"cursorrules",name:".cursorrules",description:"Cursor IDE rules for AI assistance",defaultPath:".cursorrules",content:"# {{PROJECT_NAME}} — Cursor Rules\n\n## Project overview\n{{DESCRIPTION}}\n\n## Tech stack\n{{TECH_STACK}}\n\n## Code style\n- Use {{TECH_STACK}} conventions\n- Follow existing patterns in the codebase\n- Prefer explicit over implicit\n- Keep functions small and focused\n\n## Conventions\n{{CONVENTIONS}}\n\n## What NOT to do\n- Don't introduce new dependencies without discussion\n- Don't break existing tests\n- Don't commit secrets or credentials\n- Don't over-engineer simple solutions\n"},{id:"windsurfrules",name:".windsurfrules",description:"Windsurf IDE rules for AI assistance",defaultPath:".windsurfrules",content:"# {{PROJECT_NAME}} — Windsurf Rules\n\n## Project overview\n{{DESCRIPTION}}\n\n## Tech stack\n{{TECH_STACK}}\n\n## Code style\n- Follow existing patterns in the codebase\n- Prefer explicit over implicit\n- Keep functions small and focused\n\n## Conventions\n{{CONVENTIONS}}\n\n## Non-negotiables\n- Don't introduce breaking changes\n- Don't commit secrets or credentials\n- Maintain test coverage\n"},{id:"copilot-instructions",name:"Copilot Instructions",description:"GitHub Copilot custom instructions",defaultPath:".github/copilot-instructions.md",content:"# GitHub Copilot Instructions — {{PROJECT_NAME}}\n\n## Project overview\n{{DESCRIPTION}}\n\n## Tech stack\n{{TECH_STACK}}\n\n## Coding conventions\n{{CONVENTIONS}}\n\n## Key features\n{{KEY_FEATURES}}\n\n## Style guidelines\n- Follow existing patterns before creating new abstractions\n- Write descriptive variable and function names\n- Add comments for non-obvious logic only\n- Keep functions focused on a single responsibility\n\n## Testing\n- Write tests for all new functionality\n- Maintain existing test coverage\n- Use the project's established testing patterns\n"},{id:"prd",name:"PRD",description:"Product requirements document",defaultPath:"docs/prd.md",content:"# Product Requirements — {{PROJECT_NAME}}\n\n**Status:** Draft\n**Last updated:** {{DATE}}\n**Author:**\n**Stakeholders:**\n\n## Problem statement\n{{DESCRIPTION}}\n\n## Goals\n-\n-\n\n## Non-goals\n-\n-\n\n## User stories\n| As a... | I want to... | So that... |\n|---------|--------------|------------|\n| user | | |\n\n## Requirements\n\n### Functional\n{{KEY_FEATURES}}\n\n### Non-functional\n- Performance:\n- Security:\n- Reliability:\n- Scalability:\n\n## Success metrics\n| Metric | Current | Target |\n|--------|---------|--------|\n| | | |\n\n## Timeline\n| Milestone | Target date |\n|-----------|-------------|\n| | |\n\n## Open questions\n-\n"},{id:"architecture-overview",name:"Architecture Overview",description:"System architecture doc",defaultPath:"docs/architecture/overview.md",content:'# Architecture Overview — {{PROJECT_NAME}}\n\n**Last updated:** {{DATE}}\n\n## Summary\n{{DESCRIPTION}}\n\n## Tech stack\n{{TECH_STACK}}\n\n## System diagram\n\n```mermaid\ngraph TB\n Client["Client"] --> API["API Layer"]\n API --> DB["Database"]\n API --> Cache["Cache"]\n```\n\n## Components\n\n| Component | Responsibility | Tech |\n|-----------|---------------|------|\n| | | |\n\n## Data flow\n\n1.\n2.\n3.\n\n## Key decisions\n-\n\n## Security considerations\n- Authentication:\n- Authorization:\n- Data validation:\n- Secrets management:\n\n## Scalability notes\n-\n'},{id:"api-reference",name:"API Reference",description:"API endpoints reference",defaultPath:"docs/api-reference.md",content:'# API Reference — {{PROJECT_NAME}}\n\n**Last updated:** {{DATE}}\n\n## Base URL\n\n```\nhttps://api.example.com/v1\n```\n\n## Authentication\n\nAll requests require a bearer token in the Authorization header:\n\n```\nAuthorization: Bearer <token>\n```\n\n## Rate limiting\n\n- **Limit:** 1000 requests/hour per API key\n- **Headers:** `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`\n\n## Pagination\n\nList endpoints support cursor-based pagination:\n\n```\nGET /resources?cursor=<cursor>&limit=20\n```\n\n## Error codes\n\n| Code | Meaning |\n|------|---------|\n| 400 | Bad request — invalid parameters |\n| 401 | Unauthorized — missing or invalid token |\n| 403 | Forbidden — insufficient permissions |\n| 404 | Not found |\n| 422 | Unprocessable entity — validation error |\n| 429 | Too many requests |\n| 500 | Internal server error |\n\n## Endpoints\n\n### GET /resource\n\n**Description:** List resources\n\n**Query parameters:**\n- `limit` (integer, default 20) — items per page\n- `cursor` (string) — pagination cursor\n\n**Response:**\n```json\n{\n "data": [],\n "cursor": null,\n "total": 0\n}\n```\n\n### POST /resource\n\n**Description:** Create a resource\n\n**Request body:**\n```json\n{}\n```\n\n**Response:**\n```json\n{}\n```\n'},{id:"runbook",name:"Runbook",description:"Operational runbook",defaultPath:"docs/runbook.md",content:"# Runbook — {{PROJECT_NAME}}\n\n**Last updated:** {{DATE}}\n\n## Overview\n{{DESCRIPTION}}\n\n## SLOs\n\n| Metric | Target |\n|--------|--------|\n| Availability | 99.9% |\n| P95 latency | < 500ms |\n| Error rate | < 0.1% |\n\n## Environments\n\n| Env | URL | Purpose |\n|-----|-----|---------|\n| Production | | Live traffic |\n| Staging | | Pre-release testing |\n| Development | | Local dev |\n\n## Alerting\n\n| Alert | Threshold | Severity | Action |\n|-------|-----------|----------|--------|\n| | | | |\n\n## On-call contacts\n\n| Role | Name | Contact |\n|------|------|---------|\n| Primary | | |\n| Secondary | | |\n\n## Procedures\n\n### Deploy\n\n1.\n2.\n3.\n\n### Rollback\n\n1.\n2.\n3.\n\n### Troubleshooting\n\n#### High error rate\n1. Check application logs\n2. Check downstream dependencies\n3. Review recent deploys\n\n#### High latency\n1. Check database query times\n2. Check cache hit rates\n3. Review resource utilization\n\n## Escalation path\n\n1. On-call engineer\n2. Team lead\n3. Engineering manager\n"},{id:"adr",name:"Architecture Decision",description:"Architecture Decision Record",defaultPath:"docs/architecture/decisions/ADR-001.md",content:"# ADR-001: Title\n\n**Status:** Proposed\n**Date:** {{DATE}}\n**Deciders:**\n\n## Context\nWhat is the issue that we're seeing that is motivating this decision or change?\n\n## Decision\nWhat is the change that we're proposing and/or doing?\n\n## Rationale\nWhy did we choose this option?\n\n## Alternatives considered\n- **Option A:** Description — pros/cons\n- **Option B:** Description — pros/cons\n\n## Consequences\n\n### Positive\n-\n\n### Negative\n-\n\n### Neutral\n-\n"},{id:"meeting-notes",name:"Meeting Notes",description:"Meeting notes template",defaultPath:"docs/meetings/".concat(p,".md"),content:"# Meeting Notes — ".concat(p,"\n\n**Attendees:**\n**Facilitator:**\n\n## Agenda\n\n1.\n2.\n\n## Notes\n\n## Decisions\n\n## Action items\n\n| Action | Owner | Due |\n|--------|-------|-----|\n| | | |\n\n## Next meeting\n")},{id:"onboarding",name:"Onboarding Guide",description:"Developer onboarding guide",defaultPath:"docs/onboarding.md",content:"# Developer Onboarding — {{PROJECT_NAME}}\n\n**Last updated:** {{DATE}}\n\n## Overview\n{{DESCRIPTION}}\n\n## Prerequisites\n- [ ] Access to repository ({{REPO_URL}})\n- [ ] Access to staging environment\n- [ ] Accounts: (list required accounts/services)\n\n## Day 1 checklist\n- [ ] Clone the repository\n- [ ] Set up local development environment\n- [ ] Run the app locally\n- [ ] Read the architecture overview\n- [ ] Meet the team\n\n## Environment setup\n\n```bash\n# Clone\ngit clone {{REPO_URL}}\ncd {{PROJECT_NAME}}\n\n# Install dependencies\nnpm install\n\n# Copy environment variables\ncp .env.example .env.local\n\n# Start development server\nnpm run dev\n```\n\n## Tech stack\n{{TECH_STACK}}\n\n## IDE setup\n- Recommended: VS Code or Cursor\n- Install recommended extensions (see `.vscode/extensions.json`)\n- Enable format on save\n\n## Project structure\n\n```\n(describe key directories here)\n```\n\n## Key concepts\n-\n\n## Common tasks\n\n### Running tests\n```bash\nnpm test\n```\n\n### Building for production\n```bash\nnpm run build\n```\n\n## Key contacts\n\n| Role | Name | Contact |\n|------|------|---------|\n| | | |\n\n## Resources\n- Architecture overview: `docs/architecture/overview.md`\n- API reference: `docs/api-reference.md`\n- Runbook: `docs/runbook.md`\n"},{id:"contributing",name:"CONTRIBUTING.md",description:"Contribution guidelines",defaultPath:"CONTRIBUTING.md",content:"# Contributing to {{PROJECT_NAME}}\n\nThank you for your interest in contributing!\n\n## Getting started\n\n1. Fork the repository\n2. Clone your fork: `git clone {{REPO_URL}}`\n3. Create a feature branch: `git checkout -b feat/your-feature`\n4. Make your changes\n5. Submit a pull request\n\n## Branch naming\n\n| Type | Pattern | Example |\n|------|---------|---------|\n| Feature | `feat/<description>` | `feat/user-auth` |\n| Fix | `fix/<description>` | `fix/login-crash` |\n| Chore | `chore/<description>` | `chore/update-deps` |\n| Docs | `docs/<description>` | `docs/api-guide` |\n\n## Commit conventions\n\nWe use [Conventional Commits](https://conventionalcommits.org):\n\n```\nfeat: add user authentication\nfix: resolve login redirect issue\ndocs: update API reference\nchore: upgrade dependencies\n```\n\n## Pull request process\n\n1. Fill out the PR template completely\n2. Ensure all CI checks pass\n3. Request review from at least one maintainer\n4. Address all review comments\n5. Squash commits before merge\n\n## PR review checklist\n\n- [ ] Code follows project conventions\n- [ ] Tests added/updated\n- [ ] Documentation updated if needed\n- [ ] No secrets or credentials in code\n- [ ] Breaking changes documented\n\n## Code style\n{{CONVENTIONS}}\n\n## Reporting bugs\n\nOpen an issue with:\n- Description of the bug\n- Steps to reproduce\n- Expected vs actual behavior\n- Environment details\n"},{id:"security",name:"SECURITY.md",description:"Security policy and vulnerability reporting",defaultPath:"SECURITY.md",content:"# Security Policy — {{PROJECT_NAME}}\n\n## Supported versions\n\n| Version | Supported |\n|---------|-----------|\n| latest | ✅ |\n| < 1.0 | ❌ |\n\n## Reporting a vulnerability\n\n**Please do not report security vulnerabilities through public GitHub issues.**\n\nTo report a security issue, email: security@example.com\n\nInclude:\n- Description of the vulnerability\n- Steps to reproduce\n- Potential impact\n- Any suggested mitigations\n\nYou will receive a response within 48 hours. We will:\n1. Confirm receipt of your report\n2. Investigate and assess the issue\n3. Release a fix or mitigation\n4. Credit you in the release notes (unless you prefer anonymity)\n\n## Security best practices\n\nWhen contributing to this project:\n- Never commit secrets, tokens, or credentials\n- Use environment variables for all sensitive configuration\n- Validate and sanitize all user input\n- Follow the principle of least privilege\n- Keep dependencies up to date\n"},{id:"pr-template",name:"PR Template",description:"Pull request template",defaultPath:".github/pull_request_template.md",content:"## Description\n\n<!-- Briefly describe the changes and why they were made -->\n\n## Type of change\n\n- [ ] Bug fix (non-breaking change that fixes an issue)\n- [ ] New feature (non-breaking change that adds functionality)\n- [ ] Breaking change (fix or feature that would cause existing functionality to change)\n- [ ] Documentation update\n- [ ] Refactor / code cleanup\n- [ ] Dependency update\n\n## Related issues\n\nCloses #\n\n## How to test\n\n1.\n2.\n3.\n\n## Screenshots / recordings\n\n<!-- If applicable, add screenshots or screen recordings -->\n\n## Checklist\n\n- [ ] My code follows the project's style guidelines\n- [ ] I have performed a self-review of my changes\n- [ ] I have added tests that prove my fix or feature works\n- [ ] New and existing unit tests pass locally\n- [ ] I have updated documentation if needed\n- [ ] No secrets or credentials are included\n"},{id:"bug-report",name:"Bug Report Template",description:"GitHub issue template for bugs",defaultPath:".github/ISSUE_TEMPLATE/bug_report.md",content:"---\nname: Bug report\nabout: Create a report to help us improve\nlabels: bug\n---\n\n## Describe the bug\n\nA clear and concise description of what the bug is.\n\n## Steps to reproduce\n\n1. Go to '...'\n2. Click on '...'\n3. See error\n\n## Expected behavior\n\nA clear and concise description of what you expected to happen.\n\n## Actual behavior\n\nWhat actually happened.\n\n## Screenshots\n\nIf applicable, add screenshots to help explain your problem.\n\n## Environment\n\n- OS: [e.g. macOS 14]\n- Browser: [e.g. Chrome 120]\n- Version: [e.g. 1.2.3]\n- Node.js: [e.g. 20.x]\n\n## Additional context\n\nAdd any other context about the problem here.\n"},{id:"feature-request",name:"Feature Request Template",description:"GitHub issue template for features",defaultPath:".github/ISSUE_TEMPLATE/feature_request.md",content:"---\nname: Feature request\nabout: Suggest an idea for this project\nlabels: enhancement\n---\n\n## Problem\n\nIs your feature request related to a problem? Please describe.\nA clear and concise description of what the problem is.\n\n## Proposed solution\n\nA clear and concise description of what you want to happen.\n\n## Alternatives considered\n\nA clear and concise description of any alternative solutions or features you've considered.\n\n## Implementation notes\n\nAny thoughts on how this might be implemented?\n\n## Additional context\n\nAdd any other context, mockups, or screenshots about the feature request here.\n"},{id:"changelog",name:"CHANGELOG.md",description:"Keep a Changelog format",defaultPath:"CHANGELOG.md",content:"# Changelog — {{PROJECT_NAME}}\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [Unreleased]\n\n### Added\n-\n\n### Changed\n-\n\n### Fixed\n-\n\n### Removed\n-\n\n## [1.0.0] — {{DATE}}\n\n### Added\n- Initial release\n"},{id:"deployment",name:"DEPLOYMENT.md",description:"Deployment guide and procedures",defaultPath:"DEPLOYMENT.md",content:"# Deployment Guide — {{PROJECT_NAME}}\n\n**Last updated:** {{DATE}}\n\n## Environments\n\n| Environment | URL | Branch | Auto-deploy |\n|-------------|-----|--------|-------------|\n| Production | | `main` | No |\n| Staging | | `develop` | Yes |\n| Preview | | PRs | Yes |\n\n## Prerequisites\n\n- Access to deployment platform\n- Environment variables configured (see `.env.example`)\n- CI/CD pipeline passing\n\n## Deploy to production\n\n```bash\n# 1. Ensure tests pass\nnpm test\n\n# 2. Build and verify\nnpm run build\n\n# 3. Merge to main\ngit checkout main && git merge develop\n\n# 4. Tag the release\ngit tag v1.x.x && git push --tags\n```\n\n## Environment variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| | Yes | |\n\n## Rollback procedure\n\n1. Identify the last stable release tag\n2. `git checkout <tag>`\n3. Redeploy the previous version\n4. Verify the rollback with smoke tests\n\n## Smoke tests\n\nAfter every deploy, verify:\n- [ ] App loads at production URL\n- [ ] Auth flow works\n- [ ] Core features functional\n- [ ] No error spikes in monitoring\n\n## Contacts\n\n| Role | Contact |\n|------|---------|\n| On-call | |\n| Release manager | |\n"},{id:"testing",name:"TESTING.md",description:"Testing strategy and guide",defaultPath:"TESTING.md",content:"# Testing Guide — {{PROJECT_NAME}}\n\n**Last updated:** {{DATE}}\n\n## Test strategy\n\n| Layer | Type | Tool | Coverage target |\n|-------|------|------|----------------|\n| Unit | Functions/logic | {{TEST_FRAMEWORK}} | 80%+ |\n| Integration | API/DB | {{TEST_FRAMEWORK}} | 70%+ |\n| E2E | User flows | Playwright | Key paths |\n\n## Running tests\n\n```bash\n# Run all tests\nnpm test\n\n# Run with coverage\nnpm run test:coverage\n\n# Run E2E tests\nnpm run test:e2e\n\n# Watch mode\nnpm run test:watch\n```\n\n## Writing tests\n\n### Unit test example\n\n```typescript\ndescribe('MyFunction', () => {\n it('should return expected value', () => {\n expect(myFunction(input)).toBe(expected)\n })\n})\n```\n\n### Integration test guidelines\n- Use a real database (not mocks) for DB tests\n- Reset state between tests\n- Test happy path and error cases\n\n### E2E test guidelines\n- Cover critical user journeys\n- Use stable selectors (`data-testid`)\n- Run against staging environment\n\n## Test organization\n\n```\nsrc/\n __tests__/ # Unit tests\n __integration__/ # Integration tests\ne2e/ # E2E tests\n```\n\n## CI/CD\n\nTests run automatically on every PR. PRs cannot merge with failing tests.\n"},{id:"glossary",name:"Glossary",description:"Project terminology reference",defaultPath:"docs/glossary.md",content:"# Glossary — {{PROJECT_NAME}}\n\n**Last updated:** {{DATE}}\n\nThis document defines terms used throughout the project documentation and codebase.\n\n## Terms\n\n| Term | Definition |\n|------|------------|\n| | |\n\n## Acronyms\n\n| Acronym | Full form | Meaning |\n|---------|-----------|---------|\n| | | |\n\n## Domain concepts\n\n<!-- Add domain-specific concepts here -->\n\n---\n\n*Keep this document updated as new terminology is introduced.*\n"},{id:"database",name:"Database Docs",description:"Database schema and design reference",defaultPath:"docs/DATABASE.md",content:"# Database Documentation — {{PROJECT_NAME}}\n\n**Last updated:** {{DATE}}\n\n## Overview\n\n<!-- Brief description of the database design -->\n\n## Entity Relationship Diagram\n\n```mermaid\nerDiagram\n USERS {\n uuid id PK\n string email\n timestamp created_at\n }\n```\n\n## Tables\n\n### users\n\n| Column | Type | Nullable | Description |\n|--------|------|----------|-------------|\n| id | uuid | No | Primary key |\n| email | varchar | No | Unique email |\n| created_at | timestamp | No | Creation time |\n\n## Indexes\n\n| Table | Columns | Type | Purpose |\n|-------|---------|------|---------|\n| | | | |\n\n## Migrations\n\nMigrations live in `db/migrations/`. Run with:\n\n```bash\nnpm run db:migrate\n```\n\n## Connection\n\n```\nDATABASE_URL=postgresql://user:password@host:5432/dbname\n```\n\n## Backup & restore\n\n```bash\n# Backup\npg_dump $DATABASE_URL > backup.sql\n\n# Restore\npsql $DATABASE_URL < backup.sql\n```\n\n## Performance notes\n\n-\n"},{id:"openapi",name:"OpenAPI Spec",description:"OpenAPI 3.0 API specification scaffold",defaultPath:"docs/api-spec.yaml",content:"openapi: 3.0.3\ninfo:\n title: {{PROJECT_NAME}} API\n description: |\n {{DESCRIPTION}}\n version: 1.0.0\n contact:\n email: team@example.com\n\nservers:\n - url: https://api.example.com/v1\n description: Production\n - url: https://staging-api.example.com/v1\n description: Staging\n\nsecurity:\n - bearerAuth: []\n\npaths:\n /health:\n get:\n summary: Health check\n operationId: healthCheck\n security: []\n responses:\n '200':\n description: OK\n content:\n application/json:\n schema:\n type: object\n properties:\n status:\n type: string\n example: ok\n\n /resources:\n get:\n summary: List resources\n operationId: listResources\n parameters:\n - name: limit\n in: query\n schema:\n type: integer\n default: 20\n - name: cursor\n in: query\n schema:\n type: string\n responses:\n '200':\n description: Success\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/ResourceList'\n '401':\n $ref: '#/components/responses/Unauthorized'\n\ncomponents:\n securitySchemes:\n bearerAuth:\n type: http\n scheme: bearer\n bearerFormat: JWT\n\n schemas:\n Resource:\n type: object\n properties:\n id:\n type: string\n format: uuid\n createdAt:\n type: string\n format: date-time\n\n ResourceList:\n type: object\n properties:\n data:\n type: array\n items:\n $ref: '#/components/schemas/Resource'\n cursor:\n type: string\n nullable: true\n total:\n type: integer\n\n Error:\n type: object\n properties:\n error:\n type: string\n message:\n type: string\n\n responses:\n Unauthorized:\n description: Unauthorized\n content:\n application/json:\n schema:\n $ref: '#/components/schemas/Error'\n"}];function f(e){let{open:n,onOpenChange:t,rootParam:p,onDocCreated:f}=e,[h,g]=(0,s.useState)(1),[b,x]=(0,s.useState)(null),[v,y]=(0,s.useState)(""),[N,C]=(0,s.useState)(""),[E,k]=(0,s.useState)(!1);async function w(){if(b&&v.trim()){C(""),k(!0);try{let e=await fetch("/api/docs".concat(p),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:v.trim(),content:b.content})});if(409===e.status){C("File already exists"),k(!1);return}if(!e.ok){let n=await e.json();C(n.error||"Failed to create file"),k(!1);return}t(!1),f(v.trim())}catch(e){C("Network error"),k(!1)}}}return(0,s.useEffect)(()=>{n&&(g(1),x(null),y(""),C(""),k(!1))},[n]),(0,a.jsx)(d.Vq,{open:n,onOpenChange:t,children:(0,a.jsxs)(d.cZ,{className:"max-w-2xl bg-surface border-border",children:[(0,a.jsx)(d.fK,{children:(0,a.jsx)(d.$N,{className:"text-txt text-sm font-semibold",children:1===h?"Choose a template":"Confirm file path"})}),1===h&&(0,a.jsx)(u.x,{className:"max-h-[420px]",children:(0,a.jsx)("div",{className:"grid grid-cols-3 gap-2 p-1",children:m.map(e=>(0,a.jsxs)("button",{onClick:()=>{x(e),y(e.defaultPath),C(""),g(2)},className:(0,i.cn)("flex flex-col items-start gap-1.5 p-3 rounded-lg border border-border text-left","bg-surface2 hover:bg-surface2/80 hover:border-accent/50 transition-colors"),children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(r.Z,{className:"h-3.5 w-3.5 text-accent shrink-0"}),(0,a.jsx)("span",{className:"text-xs font-medium text-txt",children:e.name})]}),(0,a.jsx)("p",{className:"text-[11px] text-muted leading-relaxed",children:e.description}),(0,a.jsx)("p",{className:"text-[10px] text-muted/60 font-mono truncate w-full",children:e.defaultPath})]},e.id))})}),2===h&&b&&(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-start gap-3 p-3 rounded-lg bg-surface2 border border-border",children:[(0,a.jsx)(r.Z,{className:"h-4 w-4 text-accent shrink-0 mt-0.5"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-xs font-medium text-txt",children:b.name}),(0,a.jsx)("p",{className:"text-[11px] text-muted mt-0.5",children:b.description})]})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)("label",{className:"text-[11px] font-medium text-muted uppercase tracking-wider",children:"File path"}),(0,a.jsx)(c.I,{autoFocus:!0,value:v,onChange:e=>{y(e.target.value),C("")},onKeyDown:e=>{"Enter"===e.key&&w()},placeholder:"docs/my-document.md",className:"h-8 text-xs bg-surface2 border-border font-mono"}),N&&(0,a.jsx)("p",{className:"text-[11px] text-red-400",children:N})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between pt-1",children:[(0,a.jsxs)(l.z,{variant:"ghost",size:"sm",onClick:()=>g(1),className:"h-7 text-xs text-muted hover:text-txt gap-1.5",children:[(0,a.jsx)(o.Z,{className:"h-3 w-3"}),"Back"]}),(0,a.jsx)(l.z,{size:"sm",onClick:w,disabled:E||!v.trim(),className:"h-7 text-xs bg-accent hover:bg-accent/90 text-white",children:E?"Creating…":"Create"})]})]})]})})}},71301:function(e,n,t){t.d(n,{C:function(){return i}});var a=t(59533);t(31229);var s=t(95084),r=t(52284);let o=(0,s.j)("inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300",{variants:{variant:{default:"border-transparent bg-slate-900 text-slate-50 hover:bg-slate-900/80 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/80",secondary:"border-transparent bg-slate-100 text-slate-900 hover:bg-slate-100/80 dark:bg-slate-800 dark:text-slate-50 dark:hover:bg-slate-800/80",destructive:"border-transparent bg-red-500 text-slate-50 hover:bg-red-500/80 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/80",outline:"text-slate-950 dark:text-slate-50"}},defaultVariants:{variant:"default"}});function i(e){let{className:n,variant:t,...s}=e;return(0,a.jsx)("div",{className:(0,r.cn)(o({variant:t}),n),...s})}},220:function(e,n,t){t.d(n,{z:function(){return l}});var a=t(59533),s=t(31229),r=t(38777),o=t(95084),i=t(52284);let d=(0,o.j)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300",{variants:{variant:{default:"bg-slate-900 text-slate-50 hover:bg-slate-900/90 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/90",destructive:"bg-red-500 text-slate-50 hover:bg-red-500/90 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/90",outline:"border border-slate-200 bg-white hover:bg-slate-100 hover:text-slate-900 dark:border-slate-800 dark:bg-slate-950 dark:hover:bg-slate-800 dark:hover:text-slate-50",secondary:"bg-slate-100 text-slate-900 hover:bg-slate-100/80 dark:bg-slate-800 dark:text-slate-50 dark:hover:bg-slate-800/80",ghost:"hover:bg-slate-100 hover:text-slate-900 dark:hover:bg-slate-800 dark:hover:text-slate-50",link:"text-slate-900 underline-offset-4 hover:underline dark:text-slate-50"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),l=s.forwardRef((e,n)=>{let{className:t,variant:s,size:o,asChild:l=!1,...c}=e,u=l?r.g7:"button";return(0,a.jsx)(u,{className:(0,i.cn)(d({variant:s,size:o,className:t})),ref:n,...c})});l.displayName="Button"},72374:function(e,n,t){t.d(n,{$N:function(){return m},Vq:function(){return d},cZ:function(){return u},fK:function(){return p}});var a=t(59533),s=t(31229),r=t(68778),o=t(46850),i=t(52284);let d=r.fC;r.xz;let l=r.h_;r.x8;let c=s.forwardRef((e,n)=>{let{className:t,...s}=e;return(0,a.jsx)(r.aV,{ref:n,className:(0,i.cn)("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...s})});c.displayName=r.aV.displayName;let u=s.forwardRef((e,n)=>{let{className:t,children:s,...d}=e;return(0,a.jsxs)(l,{children:[(0,a.jsx)(c,{}),(0,a.jsxs)(r.VY,{ref:n,className:(0,i.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-slate-200 bg-white p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg dark:border-slate-800 dark:bg-slate-950",t),...d,children:[s,(0,a.jsxs)(r.x8,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-slate-100 data-[state=open]:text-slate-500 dark:ring-offset-slate-950 dark:focus:ring-slate-300 dark:data-[state=open]:bg-slate-800 dark:data-[state=open]:text-slate-400",children:[(0,a.jsx)(o.Z,{className:"h-4 w-4"}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})});u.displayName=r.VY.displayName;let p=e=>{let{className:n,...t}=e;return(0,a.jsx)("div",{className:(0,i.cn)("flex flex-col space-y-1.5 text-center sm:text-left",n),...t})};p.displayName="DialogHeader";let m=s.forwardRef((e,n)=>{let{className:t,...s}=e;return(0,a.jsx)(r.Dx,{ref:n,className:(0,i.cn)("text-lg font-semibold leading-none tracking-tight",t),...s})});m.displayName=r.Dx.displayName,s.forwardRef((e,n)=>{let{className:t,...s}=e;return(0,a.jsx)(r.dk,{ref:n,className:(0,i.cn)("text-sm text-slate-500 dark:text-slate-400",t),...s})}).displayName=r.dk.displayName},83373:function(e,n,t){t.d(n,{$F:function(){return u},AW:function(){return p},Xi:function(){return m},h_:function(){return c}});var a=t(59533),s=t(31229),r=t(9140),o=t(12794),i=t(20508),d=t(34457),l=t(52284);let c=r.fC,u=r.xz;r.ZA,r.Uv,r.Tr,r.Ee,s.forwardRef((e,n)=>{let{className:t,inset:s,children:i,...d}=e;return(0,a.jsxs)(r.fF,{ref:n,className:(0,l.cn)("flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 dark:focus:bg-slate-800 dark:data-[state=open]:bg-slate-800",s&&"pl-8",t),...d,children:[i,(0,a.jsx)(o.Z,{className:"ml-auto"})]})}).displayName=r.fF.displayName,s.forwardRef((e,n)=>{let{className:t,...s}=e;return(0,a.jsx)(r.tu,{ref:n,className:(0,l.cn)("z-50 min-w-[8rem] overflow-hidden rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin] dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50",t),...s})}).displayName=r.tu.displayName;let p=s.forwardRef((e,n)=>{let{className:t,sideOffset:s=4,...o}=e;return(0,a.jsx)(r.Uv,{children:(0,a.jsx)(r.VY,{ref:n,sideOffset:s,className:(0,l.cn)("z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin] dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50",t),...o})})});p.displayName=r.VY.displayName;let m=s.forwardRef((e,n)=>{let{className:t,inset:s,...o}=e;return(0,a.jsx)(r.ck,{ref:n,className:(0,l.cn)("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 dark:focus:bg-slate-800 dark:focus:text-slate-50",s&&"pl-8",t),...o})});m.displayName=r.ck.displayName,s.forwardRef((e,n)=>{let{className:t,children:s,checked:o,...d}=e;return(0,a.jsxs)(r.oC,{ref:n,className:(0,l.cn)("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-slate-800 dark:focus:text-slate-50",t),checked:o,...d,children:[(0,a.jsx)("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,a.jsx)(r.wU,{children:(0,a.jsx)(i.Z,{className:"h-4 w-4"})})}),s]})}).displayName=r.oC.displayName,s.forwardRef((e,n)=>{let{className:t,children:s,...o}=e;return(0,a.jsxs)(r.Rk,{ref:n,className:(0,l.cn)("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-slate-100 focus:text-slate-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-slate-800 dark:focus:text-slate-50",t),...o,children:[(0,a.jsx)("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,a.jsx)(r.wU,{children:(0,a.jsx)(d.Z,{className:"h-2 w-2 fill-current"})})}),s]})}).displayName=r.Rk.displayName,s.forwardRef((e,n)=>{let{className:t,inset:s,...o}=e;return(0,a.jsx)(r.__,{ref:n,className:(0,l.cn)("px-2 py-1.5 text-sm font-semibold",s&&"pl-8",t),...o})}).displayName=r.__.displayName,s.forwardRef((e,n)=>{let{className:t,...s}=e;return(0,a.jsx)(r.Z0,{ref:n,className:(0,l.cn)("-mx-1 my-1 h-px bg-slate-100 dark:bg-slate-800",t),...s})}).displayName=r.Z0.displayName},13191:function(e,n,t){t.d(n,{I:function(){return o}});var a=t(59533),s=t(31229),r=t(52284);let o=s.forwardRef((e,n)=>{let{className:t,type:s,...o}=e;return(0,a.jsx)("input",{type:s,className:(0,r.cn)("flex h-10 w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-base ring-offset-white file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-slate-950 placeholder:text-slate-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:border-slate-800 dark:bg-slate-950 dark:ring-offset-slate-950 dark:file:text-slate-50 dark:placeholder:text-slate-400 dark:focus-visible:ring-slate-300",t),ref:n,...o})});o.displayName="Input"},8637:function(e,n,t){t.d(n,{x:function(){return i}});var a=t(59533),s=t(31229),r=t(19006),o=t(52284);let i=s.forwardRef((e,n)=>{let{className:t,children:s,...i}=e;return(0,a.jsxs)(r.fC,{ref:n,className:(0,o.cn)("relative overflow-hidden",t),...i,children:[(0,a.jsx)(r.l_,{className:"h-full w-full rounded-[inherit]",children:s}),(0,a.jsx)(d,{}),(0,a.jsx)(r.Ns,{})]})});i.displayName=r.fC.displayName;let d=s.forwardRef((e,n)=>{let{className:t,orientation:s="vertical",...i}=e;return(0,a.jsx)(r.gb,{ref:n,orientation:s,className:(0,o.cn)("flex touch-none select-none transition-colors","vertical"===s&&"h-full w-2.5 border-l border-l-transparent p-[1px]","horizontal"===s&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",t),...i,children:(0,a.jsx)(r.q4,{className:"relative flex-1 rounded-full bg-slate-200 dark:bg-slate-800"})})});d.displayName=r.gb.displayName},12301:function(e,n,t){t.d(n,{Z:function(){return i}});var a=t(59533),s=t(31229),r=t(513),o=t(52284);let i=s.forwardRef((e,n)=>{let{className:t,orientation:s="horizontal",decorative:i=!0,...d}=e;return(0,a.jsx)(r.f,{ref:n,decorative:i,orientation:s,className:(0,o.cn)("shrink-0 bg-slate-200 dark:bg-slate-800","horizontal"===s?"h-[1px] w-full":"h-full w-[1px]",t),...d})});i.displayName=r.f.displayName},17477:function(e,n,t){t.d(n,{_v:function(){return c},aJ:function(){return l},pn:function(){return i},u:function(){return d}});var a=t(59533),s=t(31229),r=t(9332),o=t(52284);let i=r.zt,d=r.fC,l=r.xz,c=s.forwardRef((e,n)=>{let{className:t,sideOffset:s=4,...i}=e;return(0,a.jsx)(r.VY,{ref:n,sideOffset:s,className:(0,o.cn)("z-50 overflow-hidden rounded-md border border-slate-200 bg-white px-3 py-1.5 text-sm text-slate-950 shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin] dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50",t),...i})});c.displayName=r.VY.displayName},11180:function(e,n,t){t.d(n,{q:function(){return i},w:function(){return d}});var a=t(59533),s=t(31229),r=t(61250);let o=(0,s.createContext)(null);function i(){let e=(0,s.useContext)(o);if(!e)throw Error("useApp must be used inside AppProvider");return e}function d(e){let{children:n}=e,t=(0,r.useRouter)(),[i,d]=(0,s.useState)([]),[l,c]=(0,s.useState)(""),[u,p]=(0,s.useState)(null),[m,f]=(0,s.useState)(null),[h,g]=(0,s.useState)([]),[b,x]=(0,s.useState)(!0),[v,y]=(0,s.useState)(!1),[N,C]=(0,s.useState)(null),E=(0,s.useRef)(null),k=l?"?root=".concat(encodeURIComponent(l)):"",w=(0,s.useCallback)(async e=>{let n=e||l;if(!n)return;let t="?root=".concat(encodeURIComponent(n));try{let[e,n,a]=await Promise.all([fetch("/api/summary".concat(t)).then(e=>e.json()),fetch("/api/tasks".concat(t)).then(e=>e.json()),fetch("/api/activity".concat(t,"&limit=30")).then(e=>e.json())]);p(e),f(n.board),g(Array.isArray(a)?a:[])}catch(e){}x(!1)},[l]);(0,s.useEffect)(()=>{fetch("/api/projects").then(e=>e.json()).then(e=>{d(e),e.length>0?(c(e[0].root),w(e[0].root)):x(!1)}).catch(()=>x(!1))},[]),(0,s.useEffect)(()=>{if(!l)return;let e=new EventSource("/api/events");return E.current=e,e.onmessage=e=>{try{let n=JSON.parse(e.data);if("connected"===n.type)return;y(!0),setTimeout(()=>y(!1),2e3),["task_updated","decision_logged","memory_updated","session_start"].includes(n.type)&&w()}catch(e){}},()=>{e.close()}},[l,w]);let A=(0,s.useCallback)(async(e,n)=>{f(t=>{let a;if(!t)return t;let s=structuredClone(t);for(let t of Object.keys(s)){let r=s[t].findIndex(n=>n.id===e);-1!==r&&(a={...s[t][r],status:n},s[t]=s[t].filter(n=>n.id!==e))}return a&&s[n]&&(s[n]=[a,...s[n]]),s});try{await fetch("/api/tasks".concat(k),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({taskId:e,status:n,actor:"human"})}),w()}catch(e){w()}},[k,w]),R=(0,s.useCallback)(async e=>{let n=await fetch("/api/docs".concat(k,"&read=").concat(encodeURIComponent(e)));C(await n.json()),t.push("/docs")},[k,t]);return(0,a.jsx)(o.Provider,{value:{projects:i,activeProject:l,summary:u,board:m,activity:h,liveIndicator:v,loading:b,selectedDoc:N,setSelectedDoc:C,rootParam:k,onProjectChange:function(e){c(e),w(e)},refresh:w,moveTask:A,openDoc:R},children:n})}},52284:function(e,n,t){t.d(n,{cn:function(){return r}});var a=t(27494),s=t(724);function r(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return(0,s.m6)((0,a.W)(n))}}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7821],{31852:function(e,t,s){Promise.resolve().then(s.bind(s,39264))},39264:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return Q}});var a=s(59533),n=s(31229),r=s(11180),i=s(10241),c=s(21263),l=s(20508),o=s(12794),d=s(50533),m=s(78764),x=s(52284),u=s(56622),h=s(27881),p=s(28260),b=s(81463),f=s(4864),g=s(73473),j=s(42217),v=s(94297),N=s(63542),y=s(72036),w=s(8892),k=s(93762),C=s(26422);let S=[{category:"AI Agent Config",items:[{id:"claude-md",name:"CLAUDE.md",description:"Claude Code instructions",icon:u.Z,path:"CLAUDE.md"},{id:"agents-md",name:"AGENTS.md",description:"Multi-agent config",icon:u.Z,path:"AGENTS.md"},{id:"gemini-md",name:"GEMINI.md",description:"Gemini CLI instructions",icon:u.Z,path:"GEMINI.md"},{id:"cursorrules",name:".cursorrules",description:"Cursor IDE rules",icon:h.Z,path:".cursorrules"},{id:"windsurfrules",name:".windsurfrules",description:"Windsurf IDE rules",icon:h.Z,path:".windsurfrules"},{id:"copilot-instructions",name:"Copilot Instructions",description:"GitHub Copilot rules",icon:u.Z,path:".github/copilot-instructions.md"}]},{category:"GitHub",items:[{id:"contributing",name:"CONTRIBUTING.md",description:"Contribution guide",icon:p.Z,path:"CONTRIBUTING.md"},{id:"security",name:"SECURITY.md",description:"Security policy",icon:b.Z,path:"SECURITY.md"},{id:"pr-template",name:"PR Template",description:"Pull request template",icon:p.Z,path:".github/pull_request_template.md"},{id:"bug-report",name:"Bug Report",description:"Issue template for bugs",icon:f.Z,path:".github/ISSUE_TEMPLATE/bug_report.md"},{id:"feature-request",name:"Feature Request",description:"Issue template for features",icon:c.Z,path:".github/ISSUE_TEMPLATE/feature_request.md"}]},{category:"Process Docs",items:[{id:"changelog",name:"CHANGELOG.md",description:"Keep a Changelog format",icon:g.Z,path:"CHANGELOG.md"},{id:"deployment",name:"DEPLOYMENT.md",description:"Deployment guide",icon:j.Z,path:"DEPLOYMENT.md"},{id:"testing",name:"TESTING.md",description:"Testing strategy",icon:l.Z,path:"TESTING.md"},{id:"glossary",name:"Glossary",description:"Project terminology",icon:v.Z,path:"docs/glossary.md"}]},{category:"Technical Docs",items:[{id:"prd",name:"PRD",description:"Product requirements",icon:c.Z,path:"docs/prd.md"},{id:"architecture-overview",name:"Architecture",description:"System overview",icon:N.Z,path:"docs/architecture/overview.md"},{id:"api-reference",name:"API Reference",description:"Endpoints docs",icon:y.Z,path:"docs/api-reference.md"},{id:"runbook",name:"Runbook",description:"Operations guide",icon:v.Z,path:"docs/runbook.md"},{id:"adr",name:"ADR",description:"Decision record",icon:f.Z,path:"docs/architecture/decisions/ADR-001.md"},{id:"onboarding",name:"Onboarding",description:"Dev onboarding",icon:w.Z,path:"docs/onboarding.md"},{id:"database",name:"Database Docs",description:"Schema & design",icon:k.Z,path:"docs/DATABASE.md"},{id:"openapi",name:"OpenAPI Spec",description:"API spec scaffold",icon:y.Z,path:"docs/api-spec.yaml"},{id:"meeting-notes",name:"Meeting Notes",description:"Meeting template",icon:C.Z,path:"docs/meetings/notes.md"}]}];function T(e){let{selected:t,onChange:s}=e,n=e=>t.some(t=>t.id===e),r=e=>{n(e.id)?s(t.filter(t=>t.id!==e.id)):s([...t,{id:e.id,name:e.name,path:e.path}])},i=e=>{let a=S.find(t=>t.category===e);if(a){if(a.items.every(e=>n(e.id)))s(t.filter(e=>!a.items.some(t=>t.id===e.id)));else{let e=[...t];a.items.forEach(t=>{n(t.id)||e.push({id:t.id,name:t.name,path:t.path})}),s(e)}}};return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-txt mb-2",children:"Select Templates"}),(0,a.jsx)("p",{className:"text-muted",children:"Choose which documentation files to generate for your project."})]}),S.map(e=>(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h3",{className:"text-sm font-medium text-muted uppercase tracking-wider",children:e.category}),(0,a.jsx)("button",{onClick:()=>i(e.category),className:"text-xs text-accent hover:text-accent/80 transition-colors",children:e.items.every(e=>n(e.id))?"Deselect all":"Select all"})]}),(0,a.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-3",children:e.items.map(e=>{let t=e.icon,s=n(e.id);return(0,a.jsx)("button",{onClick:()=>r(e),className:(0,x.cn)("p-3 rounded-lg border text-left transition-all",s?"border-accent bg-accent/10":"border-border hover:border-accent/50"),children:(0,a.jsxs)("div",{className:"flex items-start gap-2",children:[(0,a.jsx)("div",{className:(0,x.cn)("w-8 h-8 rounded-lg flex items-center justify-center shrink-0",s?"bg-accent/20":"bg-surface2"),children:(0,a.jsx)(t,{className:(0,x.cn)("w-4 h-4",s?"text-accent":"text-muted")})}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("div",{className:"font-medium text-sm text-txt truncate",children:e.name}),(0,a.jsx)("div",{className:"text-xs text-muted truncate",children:e.description})]}),s&&(0,a.jsx)(l.Z,{className:"w-4 h-4 text-accent shrink-0"})]})},e.id)})})]},e.category)),(0,a.jsxs)("div",{className:"text-sm text-muted",children:[t.length," template",1!==t.length?"s":""," selected"]})]})}var P=s(13191);let A=[{value:"web-app",label:"Web Application"},{value:"api-backend",label:"API / Backend"},{value:"cli-tool",label:"CLI Tool"},{value:"library",label:"Library / SDK"},{value:"mobile-app",label:"Mobile App"},{value:"monorepo",label:"Monorepo"}];function I(e){let{answers:t,onChange:s}=e,n=(e,a)=>{s({...t,[e]:a})};return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-txt mb-2",children:"Basic Information"}),(0,a.jsx)("p",{className:"text-muted",children:"Tell us about your project to customize the documentation."})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:["Project Name ",(0,a.jsx)("span",{className:"text-red-400",children:"*"})]}),(0,a.jsx)(P.I,{value:t.projectName,onChange:e=>n("projectName",e.target.value),placeholder:"My Awesome Project",className:"bg-surface2"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:"Project Type"}),(0,a.jsx)("select",{value:t.projectType,onChange:e=>n("projectType",e.target.value),className:"w-full h-10 px-3 rounded-md border border-border bg-surface2 text-txt text-sm focus:outline-none focus:ring-2 focus:ring-accent/50",children:A.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:["Repository URL ",(0,a.jsx)("span",{className:"text-muted",children:"(optional)"})]}),(0,a.jsx)(P.I,{value:t.repoUrl,onChange:e=>n("repoUrl",e.target.value),placeholder:"https://github.com/org/repo",className:"bg-surface2"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:"Description"}),(0,a.jsx)("textarea",{value:t.description,onChange:e=>n("description",e.target.value),placeholder:"A brief description of what your project does...",rows:3,className:"w-full px-3 py-2 rounded-md border border-border bg-surface2 text-txt text-sm resize-none focus:outline-none focus:ring-2 focus:ring-accent/50"})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:["Key Features ",(0,a.jsx)("span",{className:"text-muted",children:"(optional)"})]}),(0,a.jsx)(P.I,{value:t.keyFeatures,onChange:e=>n("keyFeatures",e.target.value),placeholder:"Auth, payments, real-time sync, etc.",className:"bg-surface2"}),(0,a.jsx)("p",{className:"text-xs text-muted mt-1",children:"Comma-separated list of main features"})]})]})]})}var E=s(76877),Z=s(46850);let R=[{id:"language",label:"Language",techs:["TypeScript","JavaScript","Python","Go","Rust","Java","C#","Ruby","Kotlin","Swift","PHP","Elixir"]},{id:"frontend",label:"Frontend",techs:["React","Vue","Angular","Next.js","Nuxt","SvelteKit","Remix","Astro","Vite","Tailwind CSS","React Native","Expo"]},{id:"backend",label:"Backend",techs:["Node.js","Express","Fastify","NestJS","FastAPI","Django","Flask","Rails","Spring Boot","Go/Fiber","Rust/Actix","Hono","Bun"]},{id:"database",label:"Database",techs:["PostgreSQL","MySQL","MongoDB","Redis","SQLite","Supabase","PlanetScale","DynamoDB","Cassandra","Prisma","Drizzle","TypeORM"]},{id:"devops",label:"DevOps",techs:["Docker","Kubernetes","GitHub Actions","GitLab CI","CircleCI","Jenkins","Terraform","Pulumi","AWS","GCP","Azure","Vercel","Railway","Fly.io","Render"]},{id:"testing",label:"Testing",techs:["Jest","Vitest","Playwright","Cypress","Testing Library","pytest","RSpec","Mocha","k6"]},{id:"tools",label:"Tools",techs:["ESLint","Prettier","Husky","lint-staged","Storybook","Turborepo","pnpm","Nx","GraphQL","tRPC","Zod","Stripe"]}];R.flatMap(e=>e.techs);let D=[{id:"nextjs",label:"Next.js Full-Stack",techs:["TypeScript","Next.js","React","Tailwind CSS","PostgreSQL","Prisma"]},{id:"python-api",label:"Python API",techs:["Python","FastAPI","PostgreSQL","Redis","Docker"]},{id:"react-native",label:"React Native",techs:["TypeScript","React Native","Expo"]},{id:"go-service",label:"Go Microservice",techs:["Go","Go/Fiber","PostgreSQL","Docker","Kubernetes"]},{id:"sveltekit",label:"SvelteKit",techs:["TypeScript","SvelteKit","Tailwind CSS","SQLite"]}];function G(e){var t,s;let{value:r,onChange:i}=e,[c,l]=(0,n.useState)(""),[o,d]=(0,n.useState)("language"),m=c.trim().length>0,u=e=>{let t=e.filter(e=>!r.includes(e));t.length>0&&i([...r,...t])},h=e=>{r.includes(e)?i(r.filter(t=>t!==e)):i([...r,e])},p=e=>{let t=e.trim();t&&!r.includes(t)&&i([...r,t]),l("")},b=m?R.map(e=>({...e,items:e.techs.filter(e=>e.toLowerCase().includes(c.toLowerCase()))})).filter(e=>e.items.length>0):[],f=null!==(s=null===(t=R.find(e=>e.id===o))||void 0===t?void 0:t.techs)&&void 0!==s?s:[],g=R.flatMap(e=>e.techs).some(e=>e.toLowerCase()===c.toLowerCase()),j=m&&!g&&c.trim().length>0;return(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-xs font-medium text-muted mb-2 uppercase tracking-wider",children:"Quick Presets"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:D.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>u(e.techs),className:"px-3 py-1 rounded-md border border-border text-xs text-txt hover:border-accent hover:text-accent transition-colors",children:e.label},e.id))})]}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(E.Z,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted pointer-events-none"}),(0,a.jsx)("input",{value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key?(e.preventDefault(),!R.flatMap(e=>e.techs).some(e=>e.toLowerCase()===c.toLowerCase())&&c.trim()&&p(c)):"Escape"===e.key&&l("")},placeholder:"Search technologies...",className:"w-full pl-9 pr-3 py-2 rounded-md border border-border bg-surface2 text-txt text-sm outline-none placeholder:text-muted focus:border-accent transition-colors"}),m&&(0,a.jsx)("button",{type:"button",onClick:()=>l(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-muted hover:text-txt transition-colors",children:(0,a.jsx)(Z.Z,{className:"w-4 h-4"})})]}),!m&&(0,a.jsx)("div",{className:"flex gap-1 overflow-x-auto pb-1 scrollbar-hide",children:R.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>d(e.id),className:(0,x.cn)("px-3 py-1 rounded-md text-xs font-medium whitespace-nowrap transition-colors flex-shrink-0",o===e.id?"bg-accent text-white":"bg-surface2 text-muted hover:text-txt hover:bg-surface"),children:e.label},e.id))}),m?(0,a.jsxs)("div",{className:"space-y-3",children:[b.map(e=>(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-xs font-medium text-muted uppercase tracking-wider mb-1.5",children:e.label}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:e.items.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>h(e),className:(0,x.cn)("px-3 py-1 rounded-full text-sm border transition-colors",r.includes(e)?"bg-accent/15 border-accent text-accent":"bg-surface2 border-border text-txt hover:border-accent/50 hover:text-accent/80"),children:e},e))})]},e.id)),j&&(0,a.jsxs)("p",{className:"text-xs text-muted",children:["Press ",(0,a.jsx)("kbd",{className:"px-1 py-0.5 rounded bg-surface border border-border text-xs",children:"Enter"}),' to add "',c,'"']})]}):(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:f.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>h(e),className:(0,x.cn)("px-3 py-1 rounded-full text-sm border transition-colors",r.includes(e)?"bg-accent/15 border-accent text-accent":"bg-surface2 border-border text-txt hover:border-accent/50 hover:text-accent/80"),children:e},e))}),r.length>0&&(0,a.jsxs)("div",{className:"pt-2 border-t border-border",children:[(0,a.jsxs)("p",{className:"text-xs font-medium text-muted mb-2",children:["Selected (",r.length,")"]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1.5",children:r.map(e=>(0,a.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-md bg-accent/15 text-accent text-sm font-medium",children:[e,(0,a.jsx)("button",{type:"button",onClick:()=>i(r.filter(t=>t!==e)),className:"hover:text-accent/70 transition-colors",children:(0,a.jsx)(Z.Z,{className:"w-3 h-3"})})]},e))})]})]})}let L=[{value:"solo",label:"Solo"},{value:"2-5",label:"2–5"},{value:"6-15",label:"6–15"},{value:"15+",label:"15+"}],M=[{value:"",label:"Not sure / other"},{value:"Jest",label:"Jest"},{value:"Vitest",label:"Vitest"},{value:"pytest",label:"pytest"},{value:"RSpec",label:"RSpec"},{value:"Mocha",label:"Mocha"}],F=[{value:"",label:"Not specified"},{value:"trunk-based",label:"Trunk-based"},{value:"gitflow",label:"Gitflow"},{value:"feature-branch",label:"Feature branches"}],O=["GitHub Actions","GitLab CI","CircleCI","Jenkins","Buildkite","Travis CI"],U=["ESLint","Prettier","Biome","Stylelint","oxc","Rome"],B=["Vercel","AWS","GCP","Azure","Fly.io","Railway","Render","Docker","Kubernetes","Heroku"];function _(e){let{answers:t,onChange:s}=e,n=(e,a)=>{s({...t,[e]:a})};return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-txt mb-2",children:"Team & Conventions"}),(0,a.jsx)("p",{className:"text-muted",children:"Help us tailor documentation to your team. All fields are optional."})]}),(0,a.jsxs)("div",{className:"space-y-5",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-sm font-medium text-txt mb-2",children:"Team Size"}),(0,a.jsx)("div",{className:"flex gap-2 flex-wrap",children:L.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>n("teamSize",t.teamSize===e.value?"":e.value),className:(0,x.cn)("px-4 py-2 rounded-lg border text-sm font-medium transition-all",t.teamSize===e.value?"border-accent bg-accent/10 text-accent":"border-border text-txt hover:border-accent/50"),children:e.label},e.value))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:"Linting & Formatting"}),(0,a.jsx)("div",{className:"flex gap-2 flex-wrap mb-2",children:U.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>{n("linting",t.linting.includes(e)?t.linting.filter(t=>t!==e):[...t.linting,e])},className:(0,x.cn)("px-3 py-1.5 rounded-md border text-sm transition-all",t.linting.includes(e)?"border-accent bg-accent/10 text-accent":"border-border text-txt hover:border-accent/50"),children:e},e))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:"Test Framework"}),(0,a.jsx)("select",{value:t.testFramework,onChange:e=>n("testFramework",e.target.value),className:"w-full h-10 px-3 rounded-md border border-border bg-surface2 text-txt text-sm focus:outline-none focus:ring-2 focus:ring-accent/50",children:M.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:"CI/CD"}),(0,a.jsx)("div",{className:"flex gap-2 flex-wrap mb-2",children:O.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>{n("ciCd",t.ciCd.includes(e)?t.ciCd.filter(t=>t!==e):[...t.ciCd,e])},className:(0,x.cn)("px-3 py-1.5 rounded-md border text-sm transition-all",t.ciCd.includes(e)?"border-accent bg-accent/10 text-accent":"border-border text-txt hover:border-accent/50"),children:e},e))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-sm font-medium text-txt mb-2",children:"Branch Strategy"}),(0,a.jsx)("div",{className:"flex gap-2 flex-wrap",children:F.filter(e=>e.value).map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>n("branchStrategy",t.branchStrategy===e.value?"":e.value),className:(0,x.cn)("px-4 py-2 rounded-lg border text-sm font-medium transition-all",t.branchStrategy===e.value?"border-accent bg-accent/10 text-accent":"border-border text-txt hover:border-accent/50"),children:e.label},e.value))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:"Deployment Target"}),(0,a.jsx)("div",{className:"flex gap-2 flex-wrap",children:B.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>{n("deploymentTarget",t.deploymentTarget.includes(e)?t.deploymentTarget.filter(t=>t!==e):[...t.deploymentTarget,e])},className:(0,x.cn)("px-3 py-1.5 rounded-md border text-sm transition-all",t.deploymentTarget.includes(e)?"border-accent bg-accent/10 text-accent":"border-border text-txt hover:border-accent/50"),children:e},e))})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("label",{className:"block text-sm font-medium text-txt mb-1.5",children:["Additional Conventions ",(0,a.jsx)("span",{className:"text-muted",children:"(optional)"})]}),(0,a.jsx)(P.I,{value:t.conventions,onChange:e=>n("conventions",e.target.value),placeholder:"Conventional Commits, semantic versioning, etc.",className:"bg-surface2"})]})]})]})}var q=s(9232),z=s(62778);function H(e){let{files:t,onWrite:s,isWriting:r}=e,[i,l]=(0,n.useState)(new Set),d=e=>{l(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},m=t.filter(e=>!e.skipped),x=t.filter(e=>e.skipped);return 0===t.length?(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)(q.Z,{className:"w-12 h-12 text-muted mx-auto mb-4"}),(0,a.jsx)("h3",{className:"text-lg font-medium text-txt mb-2",children:"No files generated"}),(0,a.jsx)("p",{className:"text-muted",children:"Something went wrong. Please go back and try again."})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-txt mb-2",children:"Preview"}),(0,a.jsx)("p",{className:"text-muted",children:"Review the files that will be created. Click to expand and see the content."})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("h3",{className:"text-sm font-medium text-muted uppercase tracking-wider",children:["Files to create (",m.length,")"]}),(0,a.jsx)("div",{className:"border border-border rounded-lg divide-y divide-border overflow-hidden",children:m.map(e=>{let t=i.has(e.path);return(0,a.jsxs)("div",{children:[(0,a.jsxs)("button",{onClick:()=>d(e.path),className:"w-full flex items-center gap-3 p-3 hover:bg-surface2 transition-colors",children:[t?(0,a.jsx)(z.Z,{className:"w-4 h-4 text-muted shrink-0"}):(0,a.jsx)(o.Z,{className:"w-4 h-4 text-muted shrink-0"}),(0,a.jsx)(c.Z,{className:"w-4 h-4 text-accent shrink-0"}),(0,a.jsx)("span",{className:"text-sm font-mono text-txt",children:e.path})]}),t&&(0,a.jsx)("div",{className:"px-3 pb-3",children:(0,a.jsxs)("pre",{className:"p-3 bg-surface2 rounded-lg text-xs text-muted overflow-x-auto max-h-64 overflow-y-auto",children:[e.content.slice(0,2e3),e.content.length>2e3&&"\n\n...(truncated)"]})})]},e.path)})})]}),x.length>0&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("h3",{className:"text-sm font-medium text-muted uppercase tracking-wider",children:["Skipped (",x.length,")"]}),(0,a.jsx)("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-3 space-y-1",children:x.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)(q.Z,{className:"w-4 h-4 text-amber-400 shrink-0"}),(0,a.jsx)("span",{className:"font-mono text-amber-400",children:e.path}),(0,a.jsxs)("span",{className:"text-amber-400/70",children:["— ",e.reason||"already exists"]})]},e.path))})]}),(0,a.jsxs)("div",{className:"text-sm text-muted",children:[m.length," file",1!==m.length?"s":""," will be created",x.length>0&&", ".concat(x.length," skipped")]})]})}let J=[{id:"welcome",title:"Welcome"},{id:"templates",title:"Templates"},{id:"basic-info",title:"Basic Info"},{id:"tech-stack",title:"Tech Stack"},{id:"team",title:"Team"},{id:"mode",title:"Generation"},{id:"preview",title:"Preview"},{id:"complete",title:"Complete"}],W=J.length-1;function K(){let{activeProject:e,rootParam:t,projects:s}=(0,r.q)(),u=s.find(t=>t.root===e),[h,p]=(0,n.useState)(0),[b,f]=(0,n.useState)([]),[g,j]=(0,n.useState)({projectName:"",projectType:"web-app",description:"",repoUrl:"",techStackTags:[],keyFeatures:"",teamSize:"",linting:[],testFramework:"",ciCd:[],branchStrategy:"",deploymentTarget:[],conventions:""}),[v,N]=(0,n.useState)("quick"),[y,w]=(0,n.useState)([]),[k,C]=(0,n.useState)(!1),[S,P]=(0,n.useState)([]);(0,n.useEffect)(()=>{!async function(){try{let e=await fetch("/api/docs".concat(t)),s=(await e.json()).filter(e=>"CLAUDE.md"===e.path||"AGENTS.md"===e.path).map(e=>e.path);P(s)}catch(e){}}()},[t]);let A=async()=>{if(5===h){C(!0);try{let e=await fetch("/api/setup/generate".concat(t),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({templates:b,answers:g,mode:v})}),s=await e.json();w(s.files||[])}catch(e){w([])}C(!1)}p(e=>Math.min(e+1,W))},E=async()=>{C(!0);try{await fetch("/api/setup/write".concat(t),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({files:y})}),p(7)}catch(e){}C(!1)};return(0,a.jsxs)("div",{className:"min-h-screen bg-bg flex flex-col",children:[(0,a.jsx)("div",{className:"border-b border-border bg-surface",children:(0,a.jsxs)("div",{className:"max-w-3xl mx-auto px-6 py-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,a.jsx)("h1",{className:"text-lg font-semibold text-txt",children:"Setup Wizard"}),(0,a.jsxs)("span",{className:"text-sm text-muted",children:["Step ",h+1," of ",J.length]})]}),(0,a.jsx)("div",{className:"flex gap-1",children:J.map((e,t)=>(0,a.jsx)("div",{className:(0,x.cn)("h-1 flex-1 rounded-full transition-colors",t<=h?"bg-accent":"bg-border")},e.id))}),(0,a.jsx)("div",{className:"flex gap-1 mt-1",children:J.map((e,t)=>(0,a.jsx)("div",{className:"flex-1 text-center",children:t===h&&(0,a.jsx)("span",{className:"text-xs text-accent",children:e.title})},e.id))})]})}),(0,a.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,a.jsxs)("div",{className:"max-w-3xl mx-auto px-6 py-8",children:[0===h&&(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"text-center space-y-4",children:[(0,a.jsx)("div",{className:"w-16 h-16 rounded-2xl bg-accent/10 flex items-center justify-center mx-auto",children:(0,a.jsx)(i.Z,{className:"w-8 h-8 text-accent"})}),(0,a.jsx)("h2",{className:"text-2xl font-bold text-txt",children:"Welcome to VibeDoc"}),(0,a.jsx)("p",{className:"text-muted max-w-md mx-auto",children:"Let's set up your project documentation. You can generate AI-optimized docs like CLAUDE.md, architecture overviews, and more."})]}),u&&(0,a.jsxs)("div",{className:"bg-surface border border-border rounded-lg p-4",children:[(0,a.jsx)("div",{className:"text-sm text-muted mb-1",children:"Current Project"}),(0,a.jsx)("div",{className:"font-medium text-txt",children:u.name}),(0,a.jsx)("div",{className:"text-xs text-muted mt-1 font-mono",children:u.root})]}),S.length>0&&(0,a.jsxs)("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4",children:[(0,a.jsx)("div",{className:"text-sm font-medium text-amber-400 mb-1",children:"Existing files detected"}),(0,a.jsxs)("div",{className:"text-sm text-amber-400/80",children:[S.join(", ")," already exist. They will be skipped during generation."]})]})]}),1===h&&(0,a.jsx)(T,{selected:b,onChange:f}),2===h&&(0,a.jsx)(I,{answers:g,onChange:j}),3===h&&(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-txt mb-2",children:"Tech Stack"}),(0,a.jsx)("p",{className:"text-muted",children:"Add the technologies your project uses. Search or type custom ones."})]}),(0,a.jsx)(G,{value:g.techStackTags,onChange:e=>j(t=>({...t,techStackTags:e}))}),g.techStackTags.length>0&&(0,a.jsxs)("p",{className:"text-sm text-muted",children:[g.techStackTags.length," technology",1!==g.techStackTags.length?"ies":"y"," added"]})]}),4===h&&(0,a.jsx)(_,{answers:g,onChange:j}),5===h&&(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-txt mb-2",children:"Choose Generation Mode"}),(0,a.jsx)("p",{className:"text-muted",children:"How would you like to generate your documentation?"})]}),(0,a.jsxs)("div",{className:"grid gap-4",children:[(0,a.jsx)("button",{onClick:()=>N("quick"),className:(0,x.cn)("p-4 rounded-lg border text-left transition-all","quick"===v?"border-accent bg-accent/10":"border-border hover:border-accent/50"),children:(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(c.Z,{className:"w-5 h-5 text-accent mt-0.5"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"font-medium text-txt",children:"Quick Mode"}),(0,a.jsx)("div",{className:"text-sm text-muted mt-1",children:"Use templates with your project info filled in. Fast and reliable."})]}),"quick"===v&&(0,a.jsx)(l.Z,{className:"w-5 h-5 text-accent ml-auto"})]})}),(0,a.jsx)("button",{onClick:()=>N("ai"),className:(0,x.cn)("p-4 rounded-lg border text-left transition-all","ai"===v?"border-accent bg-accent/10":"border-border hover:border-accent/50"),children:(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(i.Z,{className:"w-5 h-5 text-accent mt-0.5"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"font-medium text-txt",children:"AI Mode"}),(0,a.jsx)("div",{className:"text-sm text-muted mt-1",children:"Generate custom content using your connected coding agent (Claude Code, Cursor, etc.)."}),(0,a.jsx)("div",{className:"text-xs text-accent mt-2",children:"Requires MCP connection"})]}),"ai"===v&&(0,a.jsx)(l.Z,{className:"w-5 h-5 text-accent ml-auto"})]})})]})]}),6===h&&(0,a.jsx)(H,{files:y,onWrite:E,isWriting:k}),7===h&&(0,a.jsxs)("div",{className:"text-center space-y-6",children:[(0,a.jsx)("div",{className:"w-16 h-16 rounded-full bg-green-500/10 flex items-center justify-center mx-auto",children:(0,a.jsx)(l.Z,{className:"w-8 h-8 text-green-500"})}),(0,a.jsx)("h2",{className:"text-2xl font-bold text-txt",children:"Setup Complete!"}),(0,a.jsx)("p",{className:"text-muted max-w-md mx-auto",children:"Your documentation files have been created. You can now view and edit them in the Docs tab."}),(0,a.jsxs)("div",{className:"bg-surface border border-border rounded-lg p-4 text-left max-w-md mx-auto",children:[(0,a.jsx)("div",{className:"text-sm font-medium text-txt mb-2",children:"Next steps:"}),(0,a.jsxs)("ul",{className:"text-sm text-muted space-y-2",children:[(0,a.jsx)("li",{children:"• Review generated files in the Docs tab"}),(0,a.jsx)("li",{children:"• Edit content to match your project specifics"}),(0,a.jsx)("li",{children:"• Connect your coding agent via MCP for AI assistance"})]})]}),(0,a.jsxs)("a",{href:"/docs",className:"inline-flex items-center gap-2 px-4 py-2 bg-accent text-white rounded-lg font-medium hover:bg-accent/90 transition-colors",children:["Go to Docs",(0,a.jsx)(o.Z,{className:"w-4 h-4"})]})]})]})}),h<W&&(0,a.jsx)("div",{className:"border-t border-border bg-surface",children:(0,a.jsxs)("div",{className:"max-w-3xl mx-auto px-6 py-4 flex items-center justify-between",children:[(0,a.jsxs)("button",{onClick:()=>{p(e=>Math.max(e-1,0))},disabled:0===h,className:(0,x.cn)("flex items-center gap-2 px-4 py-2 rounded-lg font-medium transition-colors",0===h?"text-muted cursor-not-allowed":"text-txt hover:bg-surface2"),children:[(0,a.jsx)(d.Z,{className:"w-4 h-4"}),"Back"]}),6===h?(0,a.jsx)("button",{onClick:E,disabled:k||0===y.length,className:"flex items-center gap-2 px-4 py-2 bg-accent text-white rounded-lg font-medium hover:bg-accent/90 transition-colors disabled:opacity-50",children:k?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(m.Z,{className:"w-4 h-4 animate-spin"}),"Writing..."]}):(0,a.jsxs)(a.Fragment,{children:["Write Files",(0,a.jsx)(l.Z,{className:"w-4 h-4"})]})}):(0,a.jsx)("button",{onClick:A,disabled:!(()=>{switch(h){case 0:default:return!0;case 1:return b.length>0;case 2:return""!==g.projectName.trim()}})()||k,className:"flex items-center gap-2 px-4 py-2 bg-accent text-white rounded-lg font-medium hover:bg-accent/90 transition-colors disabled:opacity-50",children:k?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(m.Z,{className:"w-4 h-4 animate-spin"}),"Generating..."]}):(0,a.jsxs)(a.Fragment,{children:[5===h?"Generate":"Next",(0,a.jsx)(o.Z,{className:"w-4 h-4"})]})})]})})]})}function Q(){return(0,a.jsx)(K,{})}},13191:function(e,t,s){"use strict";s.d(t,{I:function(){return i}});var a=s(59533),n=s(31229),r=s(52284);let i=n.forwardRef((e,t)=>{let{className:s,type:n,...i}=e;return(0,a.jsx)("input",{type:n,className:(0,r.cn)("flex h-10 w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-base ring-offset-white file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-slate-950 placeholder:text-slate-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:border-slate-800 dark:bg-slate-950 dark:ring-offset-slate-950 dark:file:text-slate-50 dark:placeholder:text-slate-400 dark:focus-visible:ring-slate-300",s),ref:t,...i})});i.displayName="Input"},11180:function(e,t,s){"use strict";s.d(t,{q:function(){return c},w:function(){return l}});var a=s(59533),n=s(31229),r=s(61250);let i=(0,n.createContext)(null);function c(){let e=(0,n.useContext)(i);if(!e)throw Error("useApp must be used inside AppProvider");return e}function l(e){let{children:t}=e,s=(0,r.useRouter)(),[c,l]=(0,n.useState)([]),[o,d]=(0,n.useState)(""),[m,x]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[p,b]=(0,n.useState)([]),[f,g]=(0,n.useState)(!0),[j,v]=(0,n.useState)(!1),[N,y]=(0,n.useState)(null),w=(0,n.useRef)(null),k=o?"?root=".concat(encodeURIComponent(o)):"",C=(0,n.useCallback)(async e=>{let t=e||o;if(!t)return;let s="?root=".concat(encodeURIComponent(t));try{let[e,t,a]=await Promise.all([fetch("/api/summary".concat(s)).then(e=>e.json()),fetch("/api/tasks".concat(s)).then(e=>e.json()),fetch("/api/activity".concat(s,"&limit=30")).then(e=>e.json())]);x(e),h(t.board),b(Array.isArray(a)?a:[])}catch(e){}g(!1)},[o]);(0,n.useEffect)(()=>{fetch("/api/projects").then(e=>e.json()).then(e=>{l(e),e.length>0?(d(e[0].root),C(e[0].root)):g(!1)}).catch(()=>g(!1))},[]),(0,n.useEffect)(()=>{if(!o)return;let e=new EventSource("/api/events");return w.current=e,e.onmessage=e=>{try{let t=JSON.parse(e.data);if("connected"===t.type)return;v(!0),setTimeout(()=>v(!1),2e3),["task_updated","decision_logged","memory_updated","session_start"].includes(t.type)&&C()}catch(e){}},()=>{e.close()}},[o,C]);let S=(0,n.useCallback)(async(e,t)=>{h(s=>{let a;if(!s)return s;let n=structuredClone(s);for(let s of Object.keys(n)){let r=n[s].findIndex(t=>t.id===e);-1!==r&&(a={...n[s][r],status:t},n[s]=n[s].filter(t=>t.id!==e))}return a&&n[t]&&(n[t]=[a,...n[t]]),n});try{await fetch("/api/tasks".concat(k),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({taskId:e,status:t,actor:"human"})}),C()}catch(e){C()}},[k,C]),T=(0,n.useCallback)(async e=>{let t=await fetch("/api/docs".concat(k,"&read=").concat(encodeURIComponent(e)));y(await t.json()),s.push("/docs")},[k,s]);return(0,a.jsx)(i.Provider,{value:{projects:c,activeProject:o,summary:m,board:u,activity:p,liveIndicator:j,loading:f,selectedDoc:N,setSelectedDoc:y,rootParam:k,onProjectChange:function(e){d(e),C(e)},refresh:C,moveTask:S,openDoc:T},children:t})}},52284:function(e,t,s){"use strict";s.d(t,{cn:function(){return r}});var a=s(27494),n=s(724);function r(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,n.m6)((0,a.W)(t))}}},function(e){e.O(0,[490,2401,4170,6842,1744],function(){return e(e.s=31852)}),_N_E=e.O()}]);
@@ -1,5 +0,0 @@
1
- @import url("https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=DM+Mono:wght@300;400;500&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;1,9..40,300&display=swap");*,:after,:before{--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:rgba(59,130,246,.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:rgba(59,130,246,.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: }
2
-
3
- /*
4
- ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
5
- */*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans),system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--font-mono),monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--sidebar-background:0 0% 98%;--sidebar-foreground:240 5.3% 26.1%;--sidebar-primary:240 5.9% 10%;--sidebar-primary-foreground:0 0% 98%;--sidebar-accent:240 4.8% 95.9%;--sidebar-accent-foreground:240 5.9% 10%;--sidebar-border:220 13% 91%;--sidebar-ring:217.2 91.2% 59.8%}.dark{--sidebar-background:240 5.9% 10%;--sidebar-foreground:240 4.8% 95.9%;--sidebar-primary:224.3 76.3% 48%;--sidebar-primary-foreground:0 0% 100%;--sidebar-accent:240 3.7% 15.9%;--sidebar-accent-foreground:240 4.8% 95.9%;--sidebar-border:240 3.7% 15.9%;--sidebar-ring:217.2 91.2% 59.8%}.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.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}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.bottom-8{bottom:2rem}.left-0{left:0}.left-0\.5{left:.125rem}.left-1{left:.25rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-4{left:1rem}.left-6{left:1.5rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-20{top:5rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.size-4{width:1rem;height:1rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.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-\[1px\]{height:1px}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-\[420px\]{max-height:420px}.max-h-\[50vh\]{max-height:50vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[calc\(50vh-44px\)\]{max-height:calc(50vh - 44px)}.max-h-\[calc\(70vh-44px\)\]{max-height:calc(70vh - 44px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[420px\]{width:420px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0}.min-w-5{min-width:1.25rem}.min-w-\[8rem\]{min-width:8rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[200px\]{max-width:200px}.max-w-\[40\%\]{max-width:40%}.max-w-\[60px\]{max-width:60px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.origin-bottom-right{transform-origin:bottom right}.origin-top-right{transform-origin:top right}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-px{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}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.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-\[-50\%\]{--tw-translate-x:-50%}.translate-x-px{--tw-translate-x:1px}.translate-x-px,.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-\[-50\%\]{--tw-translate-y:-50%}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fadeIn .3s ease}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulseDot{0%,to{opacity:.4;transform:scale(.8)}50%{opacity:1;transform:scale(1.1)}}.animate-pulse-dot{animation:pulseDot 2s ease-in-out infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-grabbing{cursor:grabbing}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.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))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(34 34 46/var(--tw-divide-opacity,1))}.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}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.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-accent{--tw-border-opacity:1;border-color:rgb(124 106 247/var(--tw-border-opacity,1))}.border-accent\/20{border-color:rgba(124,106,247,.2)}.border-accent\/30{border-color:rgba(124,106,247,.3)}.border-amber\/30{border-color:hsla(24,90%,69%,.3)}.border-amber\/40{border-color:hsla(24,90%,69%,.4)}.border-border{--tw-border-opacity:1;border-color:rgb(34 34 46/var(--tw-border-opacity,1))}.border-border\/50{border-color:rgba(34,34,46,.5)}.border-border2{--tw-border-opacity:1;border-color:rgb(45 45 61/var(--tw-border-opacity,1))}.border-danger\/30{border-color:hsla(0,90%,69%,.3)}.border-danger\/40{border-color:hsla(0,90%,69%,.4)}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-teal\/30{border-color:rgba(79,216,180,.3)}.border-teal\/40{border-color:rgba(79,216,180,.4)}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-accent{--tw-border-opacity:1;border-top-color:rgb(124 106 247/var(--tw-border-opacity,1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#282c34\]{--tw-bg-opacity:1;background-color:rgb(40 44 52/var(--tw-bg-opacity,1))}.bg-accent{--tw-bg-opacity:1;background-color:rgb(124 106 247/var(--tw-bg-opacity,1))}.bg-accent\/10{background-color:rgba(124,106,247,.1)}.bg-accent\/15{background-color:rgba(124,106,247,.15)}.bg-accent\/20{background-color:rgba(124,106,247,.2)}.bg-accent\/5{background-color:rgba(124,106,247,.05)}.bg-amber\/5{background-color:hsla(24,90%,69%,.05)}.bg-bg{--tw-bg-opacity:1;background-color:rgb(10 10 15/var(--tw-bg-opacity,1))}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-black\/80{background-color:rgba(0,0,0,.8)}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-border{--tw-bg-opacity:1;background-color:rgb(34 34 46/var(--tw-bg-opacity,1))}.bg-border2{--tw-bg-opacity:1;background-color:rgb(45 45 61/var(--tw-bg-opacity,1))}.bg-danger\/5{background-color:hsla(0,90%,69%,.05)}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-500\/10{background-color:rgba(34,197,94,.1)}.bg-green-500\/20{background-color:rgba(34,197,94,.2)}.bg-muted\/20{background-color:hsla(240,9%,46%,.2)}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-surface{--tw-bg-opacity:1;background-color:rgb(17 17 24/var(--tw-bg-opacity,1))}.bg-surface\/80{background-color:rgba(17,17,24,.8)}.bg-surface\/95{background-color:rgba(17,17,24,.95)}.bg-surface2{--tw-bg-opacity:1;background-color:rgb(22 22 31/var(--tw-bg-opacity,1))}.bg-teal{--tw-bg-opacity:1;background-color:rgb(79 216 180/var(--tw-bg-opacity,1))}.bg-teal\/5{background-color:rgba(79,216,180,.05)}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-accent{--tw-gradient-from:#7c6af7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(124,106,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-teal{--tw-gradient-to:#4fd8b4 var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-\[1px\]{padding:1px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.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{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-display{font-family:var(--font-display),serif}.font-mono{font-family:var(--font-mono),monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.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-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent{--tw-text-opacity:1;color:rgb(124 106 247/var(--tw-text-opacity,1))}.text-accent\/70{color:rgba(124,106,247,.7)}.text-accent\/80{color:rgba(124,106,247,.8)}.text-amber{--tw-text-opacity:1;color:rgb(247 162 106/var(--tw-text-opacity,1))}.text-danger{--tw-text-opacity:1;color:rgb(247 106 106/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-muted{--tw-text-opacity:1;color:rgb(107 107 128/var(--tw-text-opacity,1))}.text-muted\/30{color:hsla(240,9%,46%,.3)}.text-muted\/50{color:hsla(240,9%,46%,.5)}.text-muted\/60{color:hsla(240,9%,46%,.6)}.text-muted\/70{color:hsla(240,9%,46%,.7)}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground)/.7)}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.text-teal{--tw-text-opacity:1;color:rgb(79 216 180/var(--tw-text-opacity,1))}.text-txt{--tw-text-opacity:1;color:rgb(232 232 240/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{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)}.shadow-\[0_0_6px_\#4fd8b4\]{--tw-shadow:0 0 6px #4fd8b4;--tw-shadow-colored:0 0 6px var(--tw-shadow-color)}.shadow-\[0_0_6px_\#4fd8b4\],.shadow-lg{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 rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-none{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}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{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 rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--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)}.ring-accent\/50{--tw-ring-color:rgba(124,106,247,.5)}.ring-sidebar-ring{--tw-ring-color:hsl(var(--sidebar-ring))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}.ring-offset-2{--tw-ring-offset-width:2px}.ring-offset-bg{--tw-ring-offset-color:#0a0a0f}.ring-offset-white{--tw-ring-offset-color:#fff}.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-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.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(.4,0,.2,1);transition-duration:.15s}.transition-\[left\2c right\2c width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\2c opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\2c height\2c padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--font-sans:"DM Sans";--font-mono:"DM Mono";--font-display:"DM Serif Display"}*{box-sizing:border-box}body{background:#0a0a0f;color:#e8e8f0;font-family:DM Sans,system-ui,sans-serif;-webkit-font-smoothing:antialiased}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#2d2d3d;border-radius:2px}::-webkit-scrollbar-thumb:hover{background:#44445a}.prose-dark h1{font-family:"DM Serif Display",serif;font-size:1.6rem;color:#e8e8f0;margin-bottom:1rem}.prose-dark h2{font-size:1.1rem;font-weight:600;color:#9490c8;margin:1.5rem 0 .5rem;border-bottom:1px solid #22222e;padding-bottom:.25rem}.prose-dark h3{font-size:.95rem;font-weight:600;color:#7c6af7;margin:1rem 0 .4rem}.prose-dark p{font-size:.9rem;color:#b0b0c8;line-height:1.7;margin-bottom:.75rem}.prose-dark ol,.prose-dark ul{padding-left:1.25rem;margin-bottom:.75rem}.prose-dark li{font-size:.875rem;color:#b0b0c8;line-height:1.7;margin-bottom:.2rem}.prose-dark code{font-family:DM Mono,monospace;font-size:.8rem;background:#16161f;border:1px solid #22222e;padding:1px 5px;border-radius:4px;color:#4fd8b4}.prose-dark pre{background:#0d0d14;border:1px solid #22222e;border-radius:8px;padding:1rem;overflow-x:auto;margin-bottom:1rem}.prose-dark pre code{background:none;border:none;padding:0;color:#c8c8e8;font-size:.8rem}.prose-dark table{width:100%;border-collapse:collapse;margin-bottom:1rem;font-size:.8rem}.prose-dark th{text-align:left;padding:6px 10px;border-bottom:1px solid #2d2d3d;color:#6b6b80;font-weight:500;font-family:DM Mono,monospace;text-transform:uppercase;font-size:10px;letter-spacing:.06em}.prose-dark td{padding:6px 10px;border-bottom:1px solid #16161f;color:#b0b0c8}.prose-dark blockquote{border-left:2px solid #7c6af7;padding-left:1rem;margin:1rem 0;color:#6b6b80;font-style:italic}.prose-dark a{color:#7c6af7;text-decoration:none}.prose-dark a:hover{text-decoration:underline}.prose-dark strong{color:#e8e8f0;font-weight:600}.prose-dark hr{border:none;border-top:1px solid #22222e;margin:1.5rem 0}@keyframes collapsible-down{0%{height:0;opacity:0}to{height:var(--radix-collapsible-content-height);opacity:1}}@keyframes collapsible-up{0%{height:var(--radix-collapsible-content-height);opacity:1}to{height:0;opacity:0}}.animate-collapsible-down{animation:collapsible-down .18s ease-out}.animate-collapsible-up{animation:collapsible-up .15s ease-in}.mermaid{margin:1rem 0;text-align:center}.mermaid svg{max-width:100%;height:auto;border-radius:8px}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-slate-950::file-selector-button{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.placeholder\:text-muted::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 107 128/var(--tw-text-opacity,1))}.placeholder\:text-muted::placeholder{--tw-text-opacity:1;color:rgb(107 107 128/var(--tw-text-opacity,1))}.placeholder\:text-slate-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.placeholder\:text-slate-500::placeholder{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:border-0:first-child{border-width:0}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;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\:border-accent:hover{--tw-border-opacity:1;border-color:rgb(124 106 247/var(--tw-border-opacity,1))}.hover\:border-accent\/30:hover{border-color:rgba(124,106,247,.3)}.hover\:border-accent\/50:hover{border-color:rgba(124,106,247,.5)}.hover\:border-border2:hover{--tw-border-opacity:1;border-color:rgb(45 45 61/var(--tw-border-opacity,1))}.hover\:bg-accent\/10:hover{background-color:rgba(124,106,247,.1)}.hover\:bg-accent\/30:hover{background-color:rgba(124,106,247,.3)}.hover\:bg-accent\/5:hover{background-color:rgba(124,106,247,.05)}.hover\:bg-accent\/90:hover{background-color:rgba(124,106,247,.9)}.hover\:bg-red-500\/10:hover{background-color:rgba(239,68,68,.1)}.hover\:bg-red-500\/80:hover{background-color:rgba(239,68,68,.8)}.hover\:bg-red-500\/90:hover{background-color:rgba(239,68,68,.9)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\:bg-slate-100\/80:hover{background-color:rgba(241,245,249,.8)}.hover\:bg-slate-900\/80:hover{background-color:rgba(15,23,42,.8)}.hover\:bg-slate-900\/90:hover{background-color:rgba(15,23,42,.9)}.hover\:bg-surface:hover{--tw-bg-opacity:1;background-color:rgb(17 17 24/var(--tw-bg-opacity,1))}.hover\:bg-surface2:hover{--tw-bg-opacity:1;background-color:rgb(22 22 31/var(--tw-bg-opacity,1))}.hover\:bg-surface2\/80:hover{background-color:rgba(22,22,31,.8)}.hover\:text-accent:hover{--tw-text-opacity:1;color:rgb(124 106 247/var(--tw-text-opacity,1))}.hover\:text-accent\/70:hover{color:rgba(124,106,247,.7)}.hover\:text-accent\/80:hover{color:rgba(124,106,247,.8)}.hover\:text-muted:hover{--tw-text-opacity:1;color:rgb(107 107 128/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\:text-txt:hover{--tw-text-opacity:1;color:rgb(232 232 240/var(--tw-text-opacity,1))}.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\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:border-accent:focus{--tw-border-opacity:1;border-color:rgb(124 106 247/var(--tw-border-opacity,1))}.focus\:border-border:focus{--tw-border-opacity:1;border-color:rgb(34 34 46/var(--tw-border-opacity,1))}.focus\:bg-slate-100:focus{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.focus\:bg-surface2:focus{--tw-bg-opacity:1;background-color:rgb(22 22 31/var(--tw-bg-opacity,1))}.focus\:text-red-400:focus{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.focus\:text-slate-900:focus{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.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-accent\/50:focus{--tw-ring-color:rgba(124,106,247,.5)}.focus\:ring-slate-950:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(2 6 23/var(--tw-ring-opacity,1))}.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\: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-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-sidebar-ring:focus-visible{--tw-ring-color:hsl(var(--sidebar-ring))}.focus-visible\:ring-slate-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(2 6 23/var(--tw-ring-opacity,1))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:pointer-events-auto{pointer-events:auto}.group:hover .group-hover\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-0{opacity:0}.group:hover .group-hover\:opacity-100{opacity:1}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=active\]\:bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\[state\=open\]\:bg-slate-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[state\=active\]\:text-slate-950[data-state=active]{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.data-\[state\=open\]\:text-slate-500[data-state=open]{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 2px 0 rgba(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\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.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:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group\/folder[data-state=open] .group-data-\[state\=open\]\/folder\:block{display:block}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden,.group\/folder[data-state=open] .group-data-\[state\=open\]\/folder\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0,.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{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}.group\/folder[data-state=open] .group-data-\[state\=open\]\/folder\: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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:.5rem}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(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[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-slate-800:is(.dark *){--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\:bg-slate-50:is(.dark *){--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\:bg-slate-950:is(.dark *){--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.dark\:text-slate-400:is(.dark *){--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.dark\:text-slate-50:is(.dark *){--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\:text-slate-900:is(.dark *){--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.dark\:ring-offset-slate-950:is(.dark *){--tw-ring-offset-color:#020617}.dark\:file\:text-slate-50:is(.dark *)::file-selector-button{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\:placeholder\:text-slate-400:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.dark\:placeholder\:text-slate-400:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.dark\:hover\:bg-red-900\/80:hover:is(.dark *){background-color:rgba(127,29,29,.8)}.dark\:hover\:bg-red-900\/90:hover:is(.dark *){background-color:rgba(127,29,29,.9)}.dark\:hover\:bg-slate-50\/80:hover:is(.dark *){background-color:rgba(248,250,252,.8)}.dark\:hover\:bg-slate-50\/90:hover:is(.dark *){background-color:rgba(248,250,252,.9)}.dark\:hover\:bg-slate-800:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\:hover\:bg-slate-800\/80:hover:is(.dark *){background-color:rgba(30,41,59,.8)}.dark\:hover\:text-slate-50:hover:is(.dark *){--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\:focus\:bg-slate-800:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\:focus\:text-slate-50:focus:is(.dark *){--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\:focus\:ring-slate-300:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity,1))}.dark\:focus-visible\:ring-slate-300:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity,1))}.dark\:data-\[state\=active\]\:bg-slate-950[data-state=active]:is(.dark *){--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.dark\:data-\[state\=open\]\:bg-slate-800[data-state=open]:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\:data-\[state\=active\]\:text-slate-50[data-state=active]:is(.dark *){--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\:data-\[state\=open\]\:text-slate-400[data-state=open]:is(.dark *){--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:flex{display:flex}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(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)}}@media (min-width:1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}