claude-code-workflow 6.0.5 → 6.1.1

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 (118) hide show
  1. package/.claude/agents/action-planning-agent.md +1 -1
  2. package/.claude/agents/cli-execution-agent.md +269 -269
  3. package/.claude/agents/cli-explore-agent.md +182 -182
  4. package/.claude/agents/context-search-agent.md +582 -582
  5. package/.claude/agents/memory-bridge.md +93 -93
  6. package/.claude/commands/cli/cli-init.md +1 -1
  7. package/.claude/commands/memory/docs-full-cli.md +471 -471
  8. package/.claude/commands/memory/docs-related-cli.md +386 -386
  9. package/.claude/commands/memory/docs.md +615 -615
  10. package/.claude/commands/memory/load.md +1 -1
  11. package/.claude/commands/memory/update-full.md +332 -332
  12. package/.claude/commands/memory/update-related.md +5 -5
  13. package/.claude/commands/workflow/init.md +1 -1
  14. package/.claude/commands/workflow/lite-fix.md +621 -621
  15. package/.claude/commands/workflow/lite-plan.md +592 -592
  16. package/.claude/commands/workflow/tools/context-gather.md +434 -434
  17. package/.claude/commands/workflow/ui-design/generate.md +504 -504
  18. package/.claude/commands/workflow/ui-design/import-from-code.md +537 -537
  19. package/.claude/scripts/classify-folders.sh +4 -0
  20. package/.claude/scripts/convert_tokens_to_css.sh +4 -0
  21. package/.claude/scripts/detect_changed_modules.sh +5 -1
  22. package/.claude/scripts/discover-design-files.sh +87 -83
  23. package/.claude/scripts/generate_module_docs.sh +717 -713
  24. package/.claude/scripts/get_modules_by_depth.sh +5 -1
  25. package/.claude/scripts/ui-generate-preview.sh +4 -0
  26. package/.claude/scripts/ui-instantiate-prototypes.sh +4 -0
  27. package/.claude/scripts/update_module_claude.sh +4 -0
  28. package/.claude/skills/command-guide/index/all-commands.json +1 -12
  29. package/.claude/skills/command-guide/index/by-category.json +1 -12
  30. package/.claude/skills/command-guide/index/by-use-case.json +1 -12
  31. package/.claude/skills/command-guide/index/essential-commands.json +1 -12
  32. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +127 -71
  33. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +269 -269
  34. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +182 -182
  35. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +18 -38
  36. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +582 -577
  37. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +93 -93
  38. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +1 -1
  39. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -471
  40. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -386
  41. package/.claude/skills/command-guide/reference/commands/memory/docs.md +615 -610
  42. package/.claude/skills/command-guide/reference/commands/memory/load.md +1 -1
  43. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -332
  44. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +5 -5
  45. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +299 -451
  46. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +14 -37
  47. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +252 -350
  48. package/.claude/skills/command-guide/reference/commands/workflow/init.md +2 -2
  49. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +52 -0
  50. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +621 -602
  51. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +46 -36
  52. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +18 -58
  53. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +22 -52
  54. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +19 -48
  55. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +25 -5
  56. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +1 -1
  57. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +7 -7
  58. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -434
  59. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +151 -11
  60. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +4 -4
  61. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +1 -1
  62. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +504 -504
  63. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +537 -537
  64. package/.claude/workflows/context-search-strategy.md +77 -77
  65. package/.claude/workflows/tool-strategy.md +90 -71
  66. package/.claude/workflows/workflow-architecture.md +1 -1
  67. package/README.md +285 -285
  68. package/ccw/src/cli.js +7 -0
  69. package/ccw/src/commands/tool.js +217 -0
  70. package/ccw/src/core/dashboard-generator.js +18 -3
  71. package/ccw/src/core/lite-scanner.js +35 -11
  72. package/ccw/src/core/server.js +531 -46
  73. package/ccw/src/templates/dashboard-css/01-base.css +161 -0
  74. package/ccw/src/templates/dashboard-css/02-session.css +726 -0
  75. package/ccw/src/templates/dashboard-css/03-tasks.css +512 -0
  76. package/ccw/src/templates/dashboard-css/04-lite-tasks.css +843 -0
  77. package/ccw/src/templates/dashboard-css/05-context.css +2206 -0
  78. package/ccw/src/templates/dashboard-css/06-cards.css +1570 -0
  79. package/ccw/src/templates/dashboard-css/07-managers.css +936 -0
  80. package/ccw/src/templates/dashboard-css/08-review.css +1266 -0
  81. package/ccw/src/templates/dashboard-css/09-explorer.css +1397 -0
  82. package/ccw/src/templates/dashboard-js/components/global-notifications.js +219 -0
  83. package/ccw/src/templates/dashboard-js/components/hook-manager.js +10 -0
  84. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +11 -1
  85. package/ccw/src/templates/dashboard-js/components/navigation.js +11 -5
  86. package/ccw/src/templates/dashboard-js/components/tabs-context.js +20 -20
  87. package/ccw/src/templates/dashboard-js/components/tabs-other.js +11 -11
  88. package/ccw/src/templates/dashboard-js/components/theme.js +29 -1
  89. package/ccw/src/templates/dashboard-js/main.js +4 -0
  90. package/ccw/src/templates/dashboard-js/state.js +5 -0
  91. package/ccw/src/templates/dashboard-js/views/explorer.js +852 -0
  92. package/ccw/src/templates/dashboard-js/views/home.js +13 -9
  93. package/ccw/src/templates/dashboard-js/views/hook-manager.js +8 -5
  94. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +21 -16
  95. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +90 -19
  96. package/ccw/src/templates/dashboard-js/views/project-overview.js +15 -11
  97. package/ccw/src/templates/dashboard-js/views/review-session.js +3 -3
  98. package/ccw/src/templates/dashboard-js/views/session-detail.js +38 -28
  99. package/ccw/src/templates/dashboard.html +129 -28
  100. package/ccw/src/tools/classify-folders.js +204 -0
  101. package/ccw/src/tools/convert-tokens-to-css.js +250 -0
  102. package/ccw/src/tools/detect-changed-modules.js +288 -0
  103. package/ccw/src/tools/discover-design-files.js +134 -0
  104. package/ccw/src/tools/edit-file.js +266 -0
  105. package/ccw/src/tools/generate-module-docs.js +416 -0
  106. package/ccw/src/tools/get-modules-by-depth.js +308 -0
  107. package/ccw/src/tools/index.js +176 -0
  108. package/ccw/src/tools/ui-generate-preview.js +327 -0
  109. package/ccw/src/tools/ui-instantiate-prototypes.js +301 -0
  110. package/ccw/src/tools/update-module-claude.js +380 -0
  111. package/package.json +1 -1
  112. package/.claude/skills/command-guide/reference/commands/workflow/status.md +0 -352
  113. package/ccw/src/core/server.js.bak +0 -385
  114. package/ccw/src/core/server_original.bak +0 -385
  115. package/ccw/src/templates/dashboard.css +0 -8187
  116. package/ccw/src/templates/dashboard_tailwind.html +0 -42
  117. package/ccw/src/templates/dashboard_test.html +0 -37
  118. package/ccw/src/templates/tailwind-base.css +0 -212
@@ -1,42 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-theme="light">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>CCW Dashboard</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com">
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
10
- <script src="https://cdn.tailwindcss.com"></script>
11
- <script>
12
- tailwind.config = {
13
- darkMode: ['class', '[data-theme="dark"]'],
14
- theme: {
15
- extend: {
16
- colors: {
17
- background: 'hsl(var(--color-background))',
18
- foreground: 'hsl(var(--color-foreground))',
19
- card: 'hsl(var(--color-card))',
20
- border: 'hsl(var(--color-border))',
21
- },
22
- },
23
- },
24
- }
25
- </script>
26
- <style>:root{--color-background:0 0% 100%;--color-foreground:0 0% 25%;}</style>
27
- </head>
28
- <body>
29
- <div class="flex flex-col min-h-screen bg-background text-foreground">
30
- <header class="flex items-center justify-between px-5 h-14 bg-card border-b border-border sticky top-0 z-50">
31
- <div class="flex items-center gap-2">
32
- <span class="text-xl">⚡</span>
33
- <span class="font-semibold">Claude Code Workflow</span>
34
- </div>
35
- </header>
36
- <main class="flex-1 p-6">
37
- <h1>Dashboard</h1>
38
- </main>
39
- </div>
40
- <script>{{JS_CONTENT}}</script>
41
- </body>
42
- </html>
@@ -1,37 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-theme="light">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>CCW Dashboard</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com">
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
10
- <script src="https://cdn.tailwindcss.com"></script>
11
- <script>
12
- tailwind.config = {
13
- darkMode: ['class', '[data-theme="dark"]'],
14
- theme: {
15
- extend: {
16
- colors: {
17
- background: 'hsl(var(--color-background))',
18
- foreground: 'hsl(var(--color-foreground))',
19
- card: 'hsl(var(--color-card))',
20
- border: 'hsl(var(--color-border))',
21
- input: 'hsl(var(--color-input))',
22
- ring: 'hsl(var(--color-ring))',
23
- primary: 'hsl(var(--color-interactive-primary-default))',
24
- accent: 'hsl(var(--color-interactive-accent-default))',
25
- muted: 'hsl(var(--color-muted))',
26
- },
27
- fontFamily: {
28
- sans: ['Inter', 'system-ui', 'sans-serif'],
29
- },
30
- },
31
- },
32
- }
33
- </script>
34
- <style>:root{--color-background:0 0% 100%;--color-foreground:0 0% 25%;--color-card:0 0% 100%;--color-border:0 0% 90%;--color-input:0 0% 90%;--color-ring:220 65% 50%;--color-interactive-primary-default:220 65% 50%;--color-interactive-accent-default:220 40% 95%;--color-muted:0 0% 97%;--color-muted-foreground:0 0% 50%;--color-sidebar-background:0 0% 97.5%;}[data-theme="dark"]{--color-background:0 0% 10%;--color-foreground:0 0% 90%;--color-card:0 0% 15%;--color-border:0 0% 25%;}</style>
35
- </head>
36
- <body>Test</body>
37
- </html>
@@ -1,212 +0,0 @@
1
- /* Tailwind Base Styles with Design Tokens */
2
-
3
- @tailwind base;
4
- @tailwind components;
5
- @tailwind utilities;
6
-
7
- @layer base {
8
- /* CSS Custom Properties - Light Mode (Default) */
9
- :root {
10
- /* Base Colors */
11
- --color-background: 0 0% 100%; /* oklch(1 0 0) -> white */
12
- --color-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
13
- --color-card: 0 0% 100%; /* oklch(1 0 0) -> white */
14
- --color-card-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
15
- --color-border: 0 0% 90%; /* oklch(0.9 0 0) -> light gray */
16
- --color-input: 0 0% 90%; /* oklch(0.9 0 0) -> light gray */
17
- --color-ring: 220 65% 50%; /* oklch(0.5 0.15 250) -> primary blue */
18
-
19
- /* Interactive Colors - Primary */
20
- --color-interactive-primary-default: 220 65% 50%; /* oklch(0.5 0.15 250) -> #4066bf */
21
- --color-interactive-primary-hover: 220 65% 55%; /* oklch(0.55 0.15 250) -> lighter blue */
22
- --color-interactive-primary-active: 220 65% 45%; /* oklch(0.45 0.15 250) -> darker blue */
23
- --color-interactive-primary-disabled: 220 30% 70%; /* oklch(0.7 0.05 250) -> muted blue */
24
- --color-interactive-primary-foreground: 0 0% 100%; /* oklch(1 0 0) -> white */
25
-
26
- /* Interactive Colors - Secondary */
27
- --color-interactive-secondary-default: 220 60% 65%; /* oklch(0.65 0.12 250) -> #6b8ccc */
28
- --color-interactive-secondary-hover: 220 60% 70%; /* oklch(0.7 0.12 250) -> lighter */
29
- --color-interactive-secondary-active: 220 60% 60%; /* oklch(0.6 0.12 250) -> darker */
30
- --color-interactive-secondary-disabled: 220 30% 80%; /* oklch(0.8 0.05 250) -> muted */
31
- --color-interactive-secondary-foreground: 0 0% 100%; /* oklch(1 0 0) -> white */
32
-
33
- /* Interactive Colors - Accent */
34
- --color-interactive-accent-default: 220 40% 95%; /* oklch(0.95 0.02 250) -> #eef3fa */
35
- --color-interactive-accent-hover: 220 45% 92%; /* oklch(0.92 0.03 250) -> slightly darker */
36
- --color-interactive-accent-active: 220 35% 97%; /* oklch(0.97 0.02 250) -> slightly lighter */
37
- --color-interactive-accent-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
38
-
39
- /* Interactive Colors - Destructive */
40
- --color-interactive-destructive-default: 8 75% 55%; /* oklch(0.55 0.22 25) -> #d93025 */
41
- --color-interactive-destructive-hover: 8 75% 60%; /* oklch(0.6 0.22 25) -> lighter red */
42
- --color-interactive-destructive-foreground: 0 0% 100%; /* oklch(1 0 0) -> white */
43
-
44
- /* Semantic Colors */
45
- --color-muted: 0 0% 97%; /* oklch(0.97 0 0) -> very light gray */
46
- --color-muted-foreground: 0 0% 50%; /* oklch(0.5 0 0) -> medium gray */
47
-
48
- /* Sidebar Colors */
49
- --color-sidebar-background: 0 0% 97.5%; /* oklch(0.975 0 0) -> #f8f8f8 */
50
- --color-sidebar-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
51
- --color-sidebar-primary: 220 65% 50%; /* oklch(0.5 0.15 250) -> primary blue */
52
- --color-sidebar-primary-foreground: 0 0% 100%; /* oklch(1 0 0) -> white */
53
- --color-sidebar-accent: 220 40% 95%; /* oklch(0.95 0.02 250) -> light blue */
54
- --color-sidebar-accent-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
55
- --color-sidebar-border: 0 0% 90%; /* oklch(0.9 0 0) -> light gray */
56
-
57
- /* Typography */
58
- --font-sans: 'Inter', system-ui, -apple-system, sans-serif;
59
- --font-mono: 'Consolas', 'Monaco', 'Courier New', monospace;
60
-
61
- --font-size-xs: 0.75rem; /* 12px */
62
- --font-size-sm: 0.875rem; /* 14px */
63
- --font-size-base: 1rem; /* 16px */
64
- --font-size-lg: 1.125rem; /* 18px */
65
- --font-size-xl: 1.25rem; /* 20px */
66
- --font-size-2xl: 1.5rem; /* 24px */
67
- --font-size-3xl: 1.875rem; /* 30px */
68
- --font-size-4xl: 2.25rem; /* 36px */
69
-
70
- --line-height-tight: 1.25;
71
- --line-height-normal: 1.5;
72
- --line-height-relaxed: 1.75;
73
-
74
- --letter-spacing-tight: -0.025em;
75
- --letter-spacing-normal: 0;
76
- --letter-spacing-wide: 0.025em;
77
-
78
- /* Spacing */
79
- --spacing-0: 0;
80
- --spacing-1: 0.25rem; /* 4px */
81
- --spacing-2: 0.5rem; /* 8px */
82
- --spacing-3: 0.75rem; /* 12px */
83
- --spacing-4: 1rem; /* 16px */
84
- --spacing-6: 1.5rem; /* 24px */
85
- --spacing-8: 2rem; /* 32px */
86
- --spacing-12: 3rem; /* 48px */
87
- --spacing-16: 4rem; /* 64px */
88
-
89
- /* Effects */
90
- --opacity-disabled: 0.5;
91
- --opacity-hover: 0.8;
92
- --opacity-active: 1;
93
-
94
- /* Shadows */
95
- --shadow-2xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
96
- --shadow-xs: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
97
- --shadow-sm: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
98
- --shadow-md: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
99
- --shadow-lg: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
100
- --shadow-xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
101
-
102
- /* Border Radius */
103
- --border-radius-sm: calc(0.375rem - 4px); /* 2px */
104
- --border-radius-md: calc(0.375rem - 2px); /* 4px */
105
- --border-radius-lg: 0.375rem; /* 6px */
106
- --border-radius-xl: calc(0.375rem + 4px); /* 10px */
107
- --border-radius-default: 0.375rem; /* 6px */
108
-
109
- /* Animations */
110
- --duration-instant: 0ms;
111
- --duration-fast: 150ms;
112
- --duration-normal: 200ms;
113
- --duration-medium: 300ms;
114
- --duration-slow: 500ms;
115
-
116
- --easing-linear: linear;
117
- --easing-ease-in: cubic-bezier(0.4, 0, 1, 1);
118
- --easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
119
- --easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
120
- --easing-spring: cubic-bezier(0.68, -0.55, 0.265, 1.55);
121
- }
122
-
123
- /* Dark Mode Theme */
124
- [data-theme="dark"] {
125
- /* Base Colors - Dark Mode */
126
- --color-background: 0 0% 10%; /* Dark background */
127
- --color-foreground: 0 0% 90%; /* Light text */
128
- --color-card: 0 0% 15%; /* Dark card background */
129
- --color-card-foreground: 0 0% 90%; /* Light card text */
130
- --color-border: 0 0% 25%; /* Dark border */
131
- --color-input: 0 0% 25%; /* Dark input border */
132
- --color-ring: 220 65% 60%; /* Brighter ring for dark mode */
133
-
134
- /* Interactive Colors - Primary (Dark Mode) */
135
- --color-interactive-primary-default: 220 70% 60%; /* Brighter blue for dark mode */
136
- --color-interactive-primary-hover: 220 70% 65%; /* Even brighter on hover */
137
- --color-interactive-primary-active: 220 70% 55%; /* Slightly darker on active */
138
- --color-interactive-primary-disabled: 220 30% 40%; /* Muted blue for dark mode */
139
- --color-interactive-primary-foreground: 0 0% 100%; /* White text */
140
-
141
- /* Interactive Colors - Secondary (Dark Mode) */
142
- --color-interactive-secondary-default: 220 60% 70%; /* Brighter secondary */
143
- --color-interactive-secondary-hover: 220 60% 75%; /* Brighter on hover */
144
- --color-interactive-secondary-active: 220 60% 65%; /* Slightly darker on active */
145
- --color-interactive-secondary-disabled: 220 30% 50%; /* Muted */
146
- --color-interactive-secondary-foreground: 0 0% 100%; /* White text */
147
-
148
- /* Interactive Colors - Accent (Dark Mode) */
149
- --color-interactive-accent-default: 220 30% 25%; /* Dark accent */
150
- --color-interactive-accent-hover: 220 35% 30%; /* Slightly lighter on hover */
151
- --color-interactive-accent-active: 220 25% 20%; /* Darker on active */
152
- --color-interactive-accent-foreground: 0 0% 90%; /* Light text */
153
-
154
- /* Interactive Colors - Destructive (Dark Mode) */
155
- --color-interactive-destructive-default: 8 75% 60%; /* Brighter red for visibility */
156
- --color-interactive-destructive-hover: 8 75% 65%; /* Even brighter on hover */
157
- --color-interactive-destructive-foreground: 0 0% 100%; /* White text */
158
-
159
- /* Semantic Colors (Dark Mode) */
160
- --color-muted: 0 0% 20%; /* Dark muted background */
161
- --color-muted-foreground: 0 0% 60%; /* Lighter muted text */
162
-
163
- /* Sidebar Colors (Dark Mode) */
164
- --color-sidebar-background: 0 0% 12%; /* Slightly lighter than background */
165
- --color-sidebar-foreground: 0 0% 90%; /* Light text */
166
- --color-sidebar-primary: 220 70% 60%; /* Brighter blue */
167
- --color-sidebar-primary-foreground: 0 0% 100%; /* White text */
168
- --color-sidebar-accent: 220 30% 25%; /* Dark accent */
169
- --color-sidebar-accent-foreground: 0 0% 90%; /* Light text */
170
- --color-sidebar-border: 0 0% 25%; /* Dark border */
171
- }
172
-
173
- /* Base typography */
174
- * {
175
- box-sizing: border-box;
176
- }
177
-
178
- body {
179
- @apply bg-background text-foreground font-sans leading-normal;
180
- margin: 0;
181
- padding: 0;
182
- }
183
-
184
- /* Focus styles */
185
- *:focus-visible {
186
- outline: 2px solid hsl(var(--color-ring));
187
- outline-offset: 2px;
188
- }
189
- }
190
-
191
- @layer utilities {
192
- /* Custom utility classes */
193
- .text-balance {
194
- text-wrap: balance;
195
- }
196
-
197
- .transition-default {
198
- transition: all var(--duration-normal) var(--easing-ease-out);
199
- }
200
-
201
- .transition-fast {
202
- transition: all var(--duration-fast) var(--easing-ease-out);
203
- }
204
-
205
- .transition-medium {
206
- transition: all var(--duration-medium) var(--easing-ease-in-out);
207
- }
208
-
209
- .transition-slow {
210
- transition: all var(--duration-slow) var(--easing-ease-in-out);
211
- }
212
- }