@saulwade/swl-ses 1.0.0

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 (702) hide show
  1. package/CLAUDE.md +238 -0
  2. package/README.md +560 -0
  3. package/_userland/agentes/.gitkeep +0 -0
  4. package/_userland/habilidades/.gitkeep +0 -0
  5. package/agentes/.evolved.json +9 -0
  6. package/agentes/accesibilidad-wcag-swl.md +692 -0
  7. package/agentes/arquitecto-swl.md +238 -0
  8. package/agentes/auto-evolucion-swl.md +854 -0
  9. package/agentes/backend-api-swl.md +470 -0
  10. package/agentes/backend-csharp-swl.md +418 -0
  11. package/agentes/backend-go-swl.md +388 -0
  12. package/agentes/backend-java-swl.md +279 -0
  13. package/agentes/backend-node-swl.md +477 -0
  14. package/agentes/backend-python-swl.md +608 -0
  15. package/agentes/backend-rust-swl.md +362 -0
  16. package/agentes/backend-workers-swl.md +480 -0
  17. package/agentes/cloud-infra-swl.md +485 -0
  18. package/agentes/consolidador-swl.md +539 -0
  19. package/agentes/datos-swl.md +584 -0
  20. package/agentes/depurador-swl.md +349 -0
  21. package/agentes/devops-ci-swl.md +374 -0
  22. package/agentes/disenador-ui-swl.md +558 -0
  23. package/agentes/documentador-swl.md +343 -0
  24. package/agentes/evals/arquitecto-swl.evals.json +56 -0
  25. package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
  26. package/agentes/evals/implementador-swl.evals.json +56 -0
  27. package/agentes/evals/orquestador-swl.evals.json +60 -0
  28. package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
  29. package/agentes/evals/red-team-swl.evals.json +59 -0
  30. package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
  31. package/agentes/frontend-angular-swl.md +627 -0
  32. package/agentes/frontend-css-swl.md +720 -0
  33. package/agentes/frontend-react-swl.md +696 -0
  34. package/agentes/frontend-swl.md +500 -0
  35. package/agentes/frontend-tailwind-swl.md +830 -0
  36. package/agentes/implementador-swl.md +328 -0
  37. package/agentes/investigador-swl.md +430 -0
  38. package/agentes/investigador-ux-swl.md +500 -0
  39. package/agentes/llm-apps-swl.md +276 -0
  40. package/agentes/migrador-swl.md +417 -0
  41. package/agentes/mobile-android-swl.md +509 -0
  42. package/agentes/mobile-cross-swl.md +539 -0
  43. package/agentes/mobile-ios-swl.md +500 -0
  44. package/agentes/mobile-testing-swl.md +300 -0
  45. package/agentes/notificador-swl.md +916 -0
  46. package/agentes/observabilidad-swl.md +436 -0
  47. package/agentes/orquestador-swl.md +884 -0
  48. package/agentes/pagos-swl.md +283 -0
  49. package/agentes/perfilador-usuario-swl.md +306 -0
  50. package/agentes/planificador-swl.md +402 -0
  51. package/agentes/producto-prd-swl.md +587 -0
  52. package/agentes/red-team-swl.md +216 -0
  53. package/agentes/release-manager-swl.md +568 -0
  54. package/agentes/rendimiento-swl.md +714 -0
  55. package/agentes/resolutor-build-swl.md +243 -0
  56. package/agentes/revisor-angular-swl.md +276 -0
  57. package/agentes/revisor-codigo-swl.md +348 -0
  58. package/agentes/revisor-csharp-swl.md +262 -0
  59. package/agentes/revisor-go-swl.md +257 -0
  60. package/agentes/revisor-java-swl.md +255 -0
  61. package/agentes/revisor-kotlin-swl.md +271 -0
  62. package/agentes/revisor-nextjs-swl.md +279 -0
  63. package/agentes/revisor-php-swl.md +269 -0
  64. package/agentes/revisor-react-swl.md +276 -0
  65. package/agentes/revisor-rust-swl.md +344 -0
  66. package/agentes/revisor-seguridad-swl.md +390 -0
  67. package/agentes/revisor-swift-swl.md +266 -0
  68. package/agentes/revisor-typescript-swl.md +344 -0
  69. package/agentes/sre-swl.md +265 -0
  70. package/agentes/tdd-qa-swl.md +354 -0
  71. package/agentes/ux-disenador-swl.md +501 -0
  72. package/bin/lib/bot-comandos.js +1030 -0
  73. package/bin/lib/bot-discovery.js +182 -0
  74. package/bin/lib/bot-git.js +142 -0
  75. package/bin/swl-ses.js +325 -0
  76. package/bin/swl-telegram-bot.js +442 -0
  77. package/bin/swl-telegram-bot.plist +21 -0
  78. package/bin/swl-telegram-bot.service +14 -0
  79. package/comandos/swl/.evolved.json +23 -0
  80. package/comandos/swl/actualizar.md +174 -0
  81. package/comandos/swl/adoptar-proyecto.md +207 -0
  82. package/comandos/swl/aprender.md +701 -0
  83. package/comandos/swl/auditar-deps.md +134 -0
  84. package/comandos/swl/autoresearch.md +170 -0
  85. package/comandos/swl/ayuda.md +224 -0
  86. package/comandos/swl/brainstorm.md +50 -0
  87. package/comandos/swl/checkpoint.md +330 -0
  88. package/comandos/swl/compactar.md +283 -0
  89. package/comandos/swl/configurar-ci.md +227 -0
  90. package/comandos/swl/contexto.md +112 -0
  91. package/comandos/swl/contribuir.md +233 -0
  92. package/comandos/swl/crear-skill.md +292 -0
  93. package/comandos/swl/cron.md +196 -0
  94. package/comandos/swl/dashboard.md +146 -0
  95. package/comandos/swl/discutir-fase.md +230 -0
  96. package/comandos/swl/ejecutar-fase.md +135 -0
  97. package/comandos/swl/evaluar-skill.md +487 -0
  98. package/comandos/swl/evolucion-estado.md +142 -0
  99. package/comandos/swl/evolucionar.md +259 -0
  100. package/comandos/swl/exportar-vault.md +189 -0
  101. package/comandos/swl/gateway.md +158 -0
  102. package/comandos/swl/inbox.md +116 -0
  103. package/comandos/swl/instalar.md +220 -0
  104. package/comandos/swl/instintos.md +86 -0
  105. package/comandos/swl/mapear-codebase.md +312 -0
  106. package/comandos/swl/mcp-status.md +175 -0
  107. package/comandos/swl/metricas.md +270 -0
  108. package/comandos/swl/modelo.md +102 -0
  109. package/comandos/swl/notificaciones.md +396 -0
  110. package/comandos/swl/nuevo-proyecto.md +154 -0
  111. package/comandos/swl/planear-fase.md +221 -0
  112. package/comandos/swl/plugins.md +256 -0
  113. package/comandos/swl/reflect-skills.md +125 -0
  114. package/comandos/swl/release.md +217 -0
  115. package/comandos/swl/revisar-impacto.md +206 -0
  116. package/comandos/swl/revisar.md +330 -0
  117. package/comandos/swl/salud.md +363 -0
  118. package/comandos/swl/sesiones.md +200 -0
  119. package/comandos/swl/skill-search.md +113 -0
  120. package/comandos/swl/verificar.md +585 -0
  121. package/comandos/swl/wiki.md +620 -0
  122. package/contextos/dev.md +32 -0
  123. package/contextos/research.md +30 -0
  124. package/contextos/review.md +31 -0
  125. package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
  126. package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
  127. package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
  128. package/habilidades/agent-browser/SKILL.md +218 -0
  129. package/habilidades/agentes-como-servicio/SKILL.md +218 -0
  130. package/habilidades/ai-runtime-security/SKILL.md +273 -0
  131. package/habilidades/angular-avanzado/SKILL.md +164 -0
  132. package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
  133. package/habilidades/angular-moderno/SKILL.md +186 -0
  134. package/habilidades/angular-moderno/evals/evals.json +45 -0
  135. package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
  136. package/habilidades/api-rest-diseno/SKILL.md +191 -0
  137. package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
  138. package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
  139. package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
  140. package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
  141. package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
  142. package/habilidades/async-python/SKILL.md +149 -0
  143. package/habilidades/async-python/evals/evals.json +47 -0
  144. package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
  145. package/habilidades/auth-patrones/.evolved.json +9 -0
  146. package/habilidades/auth-patrones/SKILL.md +413 -0
  147. package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
  148. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
  149. package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
  150. package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
  151. package/habilidades/autoresearch/SKILL.md +268 -0
  152. package/habilidades/autoresearch/evals/evals.json +41 -0
  153. package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
  154. package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
  155. package/habilidades/azure-cloud/SKILL.md +308 -0
  156. package/habilidades/azure-cloud/recursos/aks.md +327 -0
  157. package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
  158. package/habilidades/backend-production-resilience/SKILL.md +288 -0
  159. package/habilidades/brainstorming/SKILL.md +295 -0
  160. package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
  161. package/habilidades/build-errors-cpp/SKILL.md +270 -0
  162. package/habilidades/build-errors-csharp/SKILL.md +265 -0
  163. package/habilidades/build-errors-go/SKILL.md +306 -0
  164. package/habilidades/build-errors-java/SKILL.md +278 -0
  165. package/habilidades/build-errors-kotlin/SKILL.md +303 -0
  166. package/habilidades/build-errors-nextjs/SKILL.md +312 -0
  167. package/habilidades/build-errors-php/SKILL.md +270 -0
  168. package/habilidades/build-errors-python/SKILL.md +292 -0
  169. package/habilidades/build-errors-rust/SKILL.md +284 -0
  170. package/habilidades/build-errors-swift/SKILL.md +272 -0
  171. package/habilidades/build-errors-typescript/SKILL.md +369 -0
  172. package/habilidades/checklist-calidad/SKILL.md +271 -0
  173. package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
  174. package/habilidades/checklist-seguridad/SKILL.md +285 -0
  175. package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
  176. package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
  177. package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
  178. package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
  179. package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
  180. package/habilidades/cloud-aws/SKILL.md +142 -0
  181. package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
  182. package/habilidades/compactacion-contexto/SKILL.md +247 -0
  183. package/habilidades/contenedores-docker/SKILL.md +137 -0
  184. package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
  185. package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
  186. package/habilidades/context-builder/SKILL.md +170 -0
  187. package/habilidades/control-profundidad/SKILL.md +128 -0
  188. package/habilidades/csharp-experto/SKILL.md +322 -0
  189. package/habilidades/csharp-patrones/SKILL.md +316 -0
  190. package/habilidades/csharp-testing/SKILL.md +286 -0
  191. package/habilidades/css-moderno/SKILL.md +166 -0
  192. package/habilidades/css-moderno/evals/evals.json +43 -0
  193. package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
  194. package/habilidades/datos-etl/SKILL.md +129 -0
  195. package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
  196. package/habilidades/dbml-experto/SKILL.md +339 -0
  197. package/habilidades/dbml-experto/evals/evals.json +56 -0
  198. package/habilidades/dependencias-auditoria/SKILL.md +320 -0
  199. package/habilidades/deprecacion-migracion/SKILL.md +169 -0
  200. package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
  201. package/habilidades/design-tokens/SKILL.md +158 -0
  202. package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
  203. package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
  204. package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
  205. package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
  206. package/habilidades/discutir-fase/SKILL.md +188 -0
  207. package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
  208. package/habilidades/diseno-responsivo/SKILL.md +186 -0
  209. package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
  210. package/habilidades/django-experto/SKILL.md +205 -0
  211. package/habilidades/django-experto/recursos/async-django.md +390 -0
  212. package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
  213. package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
  214. package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
  215. package/habilidades/django-experto/recursos/testing-django.md +415 -0
  216. package/habilidades/doc-sync/SKILL.md +280 -0
  217. package/habilidades/drift-detection/SKILL.md +179 -0
  218. package/habilidades/ejecutar-fase/SKILL.md +468 -0
  219. package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
  220. package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
  221. package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
  222. package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
  223. package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
  224. package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
  225. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
  226. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
  227. package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
  228. package/habilidades/evaluacion-agentes/SKILL.md +314 -0
  229. package/habilidades/event-driven/SKILL.md +153 -0
  230. package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
  231. package/habilidades/extraccion-documentos/SKILL.md +221 -0
  232. package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
  233. package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
  234. package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
  235. package/habilidades/fastapi-experto/SKILL.md +221 -0
  236. package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
  237. package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
  238. package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
  239. package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
  240. package/habilidades/filament-admin/SKILL.md +290 -0
  241. package/habilidades/frontend-avanzado/SKILL.md +257 -0
  242. package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
  243. package/habilidades/gcp-cloud/SKILL.md +260 -0
  244. package/habilidades/gcp-cloud/recursos/gke.md +234 -0
  245. package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
  246. package/habilidades/generacion-mermaid/SKILL.md +229 -0
  247. package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
  248. package/habilidades/go-experto/SKILL.md +305 -0
  249. package/habilidades/go-patrones/SKILL.md +299 -0
  250. package/habilidades/go-testing/SKILL.md +291 -0
  251. package/habilidades/graphql-experto/SKILL.md +323 -0
  252. package/habilidades/guardrail-semantico/SKILL.md +282 -0
  253. package/habilidades/harness-claude-code/SKILL.md +299 -0
  254. package/habilidades/iam-secretos/SKILL.md +265 -0
  255. package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
  256. package/habilidades/infra-github-actions/SKILL.md +166 -0
  257. package/habilidades/instalar-sistema/.evolved.json +9 -0
  258. package/habilidades/instalar-sistema/SKILL.md +221 -0
  259. package/habilidades/java-experto/SKILL.md +290 -0
  260. package/habilidades/java-patrones/SKILL.md +275 -0
  261. package/habilidades/java-testing/SKILL.md +288 -0
  262. package/habilidades/kotlin-compose/SKILL.md +278 -0
  263. package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
  264. package/habilidades/kotlin-experto/SKILL.md +318 -0
  265. package/habilidades/kotlin-testing/SKILL.md +267 -0
  266. package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
  267. package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
  268. package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
  269. package/habilidades/langchain-langraph/SKILL.md +386 -0
  270. package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
  271. package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
  272. package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
  273. package/habilidades/legacy-code-rescue/SKILL.md +267 -0
  274. package/habilidades/likec4-experto/SKILL.md +412 -0
  275. package/habilidades/likec4-experto/evals/evals.json +69 -0
  276. package/habilidades/manejo-errores/.evolved.json +9 -0
  277. package/habilidades/manejo-errores/SKILL.md +407 -0
  278. package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
  279. package/habilidades/mapear-codebase/SKILL.md +275 -0
  280. package/habilidades/memoria-busqueda/SKILL.md +194 -0
  281. package/habilidades/memoria-busqueda/evals/evals.json +44 -0
  282. package/habilidades/meta-skills-estandar/SKILL.md +298 -0
  283. package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
  284. package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
  285. package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
  286. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
  287. package/habilidades/microservicios/SKILL.md +155 -0
  288. package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
  289. package/habilidades/mobile-flutter/SKILL.md +199 -0
  290. package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
  291. package/habilidades/mobile-react-native/SKILL.md +176 -0
  292. package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
  293. package/habilidades/mongodb-experto/SKILL.md +302 -0
  294. package/habilidades/monitoring-alertas/SKILL.md +201 -0
  295. package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
  296. package/habilidades/nestjs-experto/SKILL.md +307 -0
  297. package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
  298. package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
  299. package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
  300. package/habilidades/nextjs-experto/SKILL.md +335 -0
  301. package/habilidades/nextjs-patrones/SKILL.md +303 -0
  302. package/habilidades/nextjs-testing/SKILL.md +331 -0
  303. package/habilidades/node-experto/.evolved.json +9 -0
  304. package/habilidades/node-experto/SKILL.md +266 -0
  305. package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
  306. package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
  307. package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
  308. package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
  309. package/habilidades/nuevo-proyecto/SKILL.md +204 -0
  310. package/habilidades/orquestacion-async/SKILL.md +303 -0
  311. package/habilidades/paid-media-tracking/SKILL.md +269 -0
  312. package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
  313. package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
  314. package/habilidades/patrones-python/SKILL.md +228 -0
  315. package/habilidades/patrones-python/evals/evals.json +56 -0
  316. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
  317. package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
  318. package/habilidades/perfil-usuario/SKILL.md +200 -0
  319. package/habilidades/perfil-usuario/evals/evals.json +55 -0
  320. package/habilidades/performance-baseline/SKILL.md +297 -0
  321. package/habilidades/php-experto/SKILL.md +291 -0
  322. package/habilidades/php-patrones/SKILL.md +306 -0
  323. package/habilidades/php-testing/SKILL.md +280 -0
  324. package/habilidades/planear-fase/SKILL.md +269 -0
  325. package/habilidades/postgresql-experto/SKILL.md +151 -0
  326. package/habilidades/postgresql-experto/evals/evals.json +53 -0
  327. package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
  328. package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
  329. package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
  330. package/habilidades/privacy-memoria/SKILL.md +141 -0
  331. package/habilidades/privacy-memoria/evals/evals.json +43 -0
  332. package/habilidades/prompt-engineering/SKILL.md +518 -0
  333. package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
  334. package/habilidades/rag-arquitectura/SKILL.md +338 -0
  335. package/habilidades/rails-experto/SKILL.md +237 -0
  336. package/habilidades/rails-experto/recursos/active-record.md +260 -0
  337. package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
  338. package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
  339. package/habilidades/react-experto/SKILL.md +209 -0
  340. package/habilidades/react-experto/evals/evals.json +55 -0
  341. package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
  342. package/habilidades/react-optimizacion/SKILL.md +174 -0
  343. package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
  344. package/habilidades/redis-experto/SKILL.md +305 -0
  345. package/habilidades/release-semver/.evolved.json +9 -0
  346. package/habilidades/release-semver/SKILL.md +248 -0
  347. package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
  348. package/habilidades/rust-experto/SKILL.md +400 -0
  349. package/habilidades/rust-patrones/SKILL.md +296 -0
  350. package/habilidades/rust-testing/SKILL.md +311 -0
  351. package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
  352. package/habilidades/sql-optimizacion/SKILL.md +200 -0
  353. package/habilidades/sql-optimizacion/evals/evals.json +54 -0
  354. package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
  355. package/habilidades/sre-patrones/SKILL.md +333 -0
  356. package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
  357. package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
  358. package/habilidades/stripe-pagos/SKILL.md +550 -0
  359. package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
  360. package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
  361. package/habilidades/structured-outputs/SKILL.md +343 -0
  362. package/habilidades/swift-experto/SKILL.md +320 -0
  363. package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
  364. package/habilidades/swift-patrones/SKILL.md +313 -0
  365. package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
  366. package/habilidades/swift-testing/SKILL.md +254 -0
  367. package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
  368. package/habilidades/swl-dashboard/SKILL.md +370 -0
  369. package/habilidades/swl-markitdown/SKILL.md +285 -0
  370. package/habilidades/swl-markitdown/evals/evals.json +52 -0
  371. package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
  372. package/habilidades/tailwind-experto/SKILL.md +240 -0
  373. package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
  374. package/habilidades/tdd-workflow/SKILL.md +293 -0
  375. package/habilidades/terraform-experto/SKILL.md +321 -0
  376. package/habilidades/testing-python/SKILL.md +340 -0
  377. package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
  378. package/habilidades/threat-model-lite/SKILL.md +246 -0
  379. package/habilidades/tracing-processor/SKILL.md +212 -0
  380. package/habilidades/tracking-measurement/SKILL.md +239 -0
  381. package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
  382. package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
  383. package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
  384. package/habilidades/typescript-avanzado/SKILL.md +144 -0
  385. package/habilidades/typescript-avanzado/evals/evals.json +55 -0
  386. package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
  387. package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
  388. package/habilidades/ux-diseno/SKILL.md +116 -0
  389. package/habilidades/ux-diseno/evals/evals.json +43 -0
  390. package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
  391. package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
  392. package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
  393. package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
  394. package/habilidades/verificacion-evidencia/SKILL.md +160 -0
  395. package/habilidades/verificar-trabajo/SKILL.md +303 -0
  396. package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
  397. package/habilidades/wiki-conocimiento/SKILL.md +276 -0
  398. package/habilidades/wireframes-flujos/SKILL.md +212 -0
  399. package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
  400. package/habilidades/workflow-claude-code/SKILL.md +260 -0
  401. package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
  402. package/hooks/_run-hook.sh +57 -0
  403. package/hooks/actualizar-perfil-usuario.js +364 -0
  404. package/hooks/agente-lifecycle.js +71 -0
  405. package/hooks/aiisms-detector.js +173 -0
  406. package/hooks/audit-trail.js +204 -0
  407. package/hooks/auto-background.js +97 -0
  408. package/hooks/auto-consolidacion.js +178 -0
  409. package/hooks/auto-evolucion.js +666 -0
  410. package/hooks/auto-restaurar-settings.js +360 -0
  411. package/hooks/calidad-pre-commit.js +929 -0
  412. package/hooks/calidad-typescript.js +511 -0
  413. package/hooks/captura-feedback-usuario.js +148 -0
  414. package/hooks/check-update.js +211 -0
  415. package/hooks/clasificador-mensajes.js +271 -0
  416. package/hooks/degradacion-instintos.js +272 -0
  417. package/hooks/escaneo-secretos.js +389 -0
  418. package/hooks/extraccion-aprendizajes.js +763 -0
  419. package/hooks/grafo-contexto.js +129 -0
  420. package/hooks/graph-update.js +67 -0
  421. package/hooks/guardrail-modelo.js +247 -0
  422. package/hooks/inbox-aviso.js +75 -0
  423. package/hooks/inyeccion-contexto.js +246 -0
  424. package/hooks/lib/abort-registry.js +214 -0
  425. package/hooks/lib/agent-backend.js +210 -0
  426. package/hooks/lib/agent-comms.js +263 -0
  427. package/hooks/lib/agent-issue-codes.js +284 -0
  428. package/hooks/lib/agent-matcher.js +189 -0
  429. package/hooks/lib/async-hook-registry.js +252 -0
  430. package/hooks/lib/atomic-write.js +130 -0
  431. package/hooks/lib/auto-consolidator.js +335 -0
  432. package/hooks/lib/canary-skills.js +187 -0
  433. package/hooks/lib/consolidation-lock.js +291 -0
  434. package/hooks/lib/context-builder.js +430 -0
  435. package/hooks/lib/context-compressor.js +657 -0
  436. package/hooks/lib/convergence-detector.js +105 -0
  437. package/hooks/lib/delegation-tracker.js +198 -0
  438. package/hooks/lib/detectar-package-manager.js +423 -0
  439. package/hooks/lib/edit-accumulator.js +171 -0
  440. package/hooks/lib/error-classifier.js +308 -0
  441. package/hooks/lib/event-bus.js +112 -0
  442. package/hooks/lib/evolution-tracker.js +442 -0
  443. package/hooks/lib/execution-state.js +316 -0
  444. package/hooks/lib/fingerprint-id.js +135 -0
  445. package/hooks/lib/gateway-notify.js +116 -0
  446. package/hooks/lib/graph-security.js +75 -0
  447. package/hooks/lib/guardrail-metrics.js +202 -0
  448. package/hooks/lib/hook-circuit-breaker.js +206 -0
  449. package/hooks/lib/loop-detector.js +267 -0
  450. package/hooks/lib/mcp-health.js +184 -0
  451. package/hooks/lib/mcp-pool.js +436 -0
  452. package/hooks/lib/memory-search.js +506 -0
  453. package/hooks/lib/merkle-audit.js +96 -0
  454. package/hooks/lib/model-router.js +222 -0
  455. package/hooks/lib/normalize-error.js +324 -0
  456. package/hooks/lib/normalize-input.js +65 -0
  457. package/hooks/lib/nudge-tracker.js +306 -0
  458. package/hooks/lib/otlp-exporter.js +365 -0
  459. package/hooks/lib/performance-marks.js +239 -0
  460. package/hooks/lib/privacy-filter.js +128 -0
  461. package/hooks/lib/prompt-injection-scanner.js +209 -0
  462. package/hooks/lib/provenance-tracker.js +183 -0
  463. package/hooks/lib/rate-limit-tracker.js +253 -0
  464. package/hooks/lib/reflect-classifier.js +164 -0
  465. package/hooks/lib/resource-quota.js +122 -0
  466. package/hooks/lib/retry-jitter.js +165 -0
  467. package/hooks/lib/risk-engine.js +368 -0
  468. package/hooks/lib/run-log.js +408 -0
  469. package/hooks/lib/session-fts.js +379 -0
  470. package/hooks/lib/session-store.js +293 -0
  471. package/hooks/lib/singleton-guard.js +159 -0
  472. package/hooks/lib/skill-auditor.js +588 -0
  473. package/hooks/lib/sync-status.js +228 -0
  474. package/hooks/lib/taint-tracker.js +107 -0
  475. package/hooks/lib/task-service.js +295 -0
  476. package/hooks/lib/tech-skills-map.js +146 -0
  477. package/hooks/lib/telegram-cliente.js +159 -0
  478. package/hooks/lib/telegram-config.js +170 -0
  479. package/hooks/lib/token-budget.js +156 -0
  480. package/hooks/lib/token-estimator.js +420 -0
  481. package/hooks/lib/toon-compressor.js +245 -0
  482. package/hooks/lib/usage-model.js +183 -0
  483. package/hooks/lib/variable-resolver.js +230 -0
  484. package/hooks/linea-estado.js +324 -0
  485. package/hooks/metricas-evolucion.js +209 -0
  486. package/hooks/monitor-contexto.js +325 -0
  487. package/hooks/notificacion-sesion-stop.js +198 -0
  488. package/hooks/notificacion-telegram-notification.js +4 -0
  489. package/hooks/notificacion-telegram-subagent.js +4 -0
  490. package/hooks/notificacion-telegram.js +267 -0
  491. package/hooks/preservar-estado-pre-compact.js +150 -0
  492. package/hooks/proteccion-rutas.js +366 -0
  493. package/hooks/registro-turnos.js +209 -0
  494. package/hooks/resumen-sesion.js +249 -0
  495. package/hooks/risk-scoring.js +323 -0
  496. package/hooks/rotar-audit-auto.js +122 -0
  497. package/hooks/sugerir-regenerar-inventario.js +170 -0
  498. package/hooks/telemetria-agentes.js +167 -0
  499. package/hooks/tracking-costos.js +688 -0
  500. package/instintos/global.yaml +8 -0
  501. package/instintos/perfil-usuario.yaml +53 -0
  502. package/instintos/prompt-appendices.yaml +57 -0
  503. package/instintos/proyecto.yaml +372 -0
  504. package/manifiestos/gateway-config.json +77 -0
  505. package/manifiestos/handoff-context.json +223 -0
  506. package/manifiestos/hook-profiles.json +44 -0
  507. package/manifiestos/hooks-config.json +360 -0
  508. package/manifiestos/modulos.json +1173 -0
  509. package/manifiestos/perfiles.json +404 -0
  510. package/package.json +86 -0
  511. package/plantillas/ESTADO.md +109 -0
  512. package/plantillas/HOJA-RUTA.md +143 -0
  513. package/plantillas/PROYECTO.md +122 -0
  514. package/plantillas/REQUISITOS.md +132 -0
  515. package/plantillas/auditor-veto-template.md +105 -0
  516. package/plantillas/github-workflows/README.md +47 -0
  517. package/plantillas/github-workflows/release-please.yml +44 -0
  518. package/plantillas/github-workflows/swl-ci.yml +107 -0
  519. package/plantillas/github-workflows/swl-security.yml +51 -0
  520. package/plantillas/mcp-mineru.json +13 -0
  521. package/plantillas/research/ARQUITECTURA.md +220 -0
  522. package/plantillas/research/FUNCIONALIDADES.md +175 -0
  523. package/plantillas/research/RESUMEN.md +165 -0
  524. package/plantillas/research/STACK.md +233 -0
  525. package/plantillas/research/TRAMPAS.md +299 -0
  526. package/plantillas/skill-evals-template.json +44 -0
  527. package/plugin.json +343 -0
  528. package/reglas/accesibilidad.md +269 -0
  529. package/reglas/api-diseno.md +400 -0
  530. package/reglas/arquitectura.md +352 -0
  531. package/reglas/brevedad-output.md +124 -0
  532. package/reglas/cloud-infra.md +247 -0
  533. package/reglas/docs.md +245 -0
  534. package/reglas/estilo-codigo.md +201 -0
  535. package/reglas/git-workflow.md +245 -0
  536. package/reglas/gobernanza.md +271 -0
  537. package/reglas/harness-claude-code.md +213 -0
  538. package/reglas/hooks.md +186 -0
  539. package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
  540. package/reglas/lenguajes/csharp/hooks.md +281 -0
  541. package/reglas/lenguajes/csharp/patrones.md +226 -0
  542. package/reglas/lenguajes/csharp/seguridad.md +258 -0
  543. package/reglas/lenguajes/csharp/testing.md +176 -0
  544. package/reglas/lenguajes/go/estilo-codigo.md +195 -0
  545. package/reglas/lenguajes/go/hooks.md +249 -0
  546. package/reglas/lenguajes/go/patrones.md +249 -0
  547. package/reglas/lenguajes/go/seguridad.md +225 -0
  548. package/reglas/lenguajes/go/testing.md +272 -0
  549. package/reglas/lenguajes/java/estilo-codigo.md +217 -0
  550. package/reglas/lenguajes/java/hooks.md +251 -0
  551. package/reglas/lenguajes/java/patrones.md +226 -0
  552. package/reglas/lenguajes/java/seguridad.md +233 -0
  553. package/reglas/lenguajes/java/testing.md +238 -0
  554. package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
  555. package/reglas/lenguajes/kotlin/hooks.md +245 -0
  556. package/reglas/lenguajes/kotlin/patrones.md +201 -0
  557. package/reglas/lenguajes/kotlin/seguridad.md +202 -0
  558. package/reglas/lenguajes/kotlin/testing.md +236 -0
  559. package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
  560. package/reglas/lenguajes/nextjs/hooks.md +186 -0
  561. package/reglas/lenguajes/nextjs/patrones.md +225 -0
  562. package/reglas/lenguajes/nextjs/seguridad.md +216 -0
  563. package/reglas/lenguajes/nextjs/testing.md +193 -0
  564. package/reglas/lenguajes/php/estilo-codigo.md +228 -0
  565. package/reglas/lenguajes/php/hooks.md +165 -0
  566. package/reglas/lenguajes/php/patrones.md +233 -0
  567. package/reglas/lenguajes/php/seguridad.md +186 -0
  568. package/reglas/lenguajes/php/testing.md +205 -0
  569. package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
  570. package/reglas/lenguajes/rust/hooks.md +240 -0
  571. package/reglas/lenguajes/rust/patrones.md +250 -0
  572. package/reglas/lenguajes/rust/seguridad.md +221 -0
  573. package/reglas/lenguajes/rust/testing.md +194 -0
  574. package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
  575. package/reglas/lenguajes/swift/hooks.md +257 -0
  576. package/reglas/lenguajes/swift/patrones.md +235 -0
  577. package/reglas/lenguajes/swift/seguridad.md +248 -0
  578. package/reglas/lenguajes/swift/testing.md +242 -0
  579. package/reglas/markitdown.md +60 -0
  580. package/reglas/memoria-consolidada.md +209 -0
  581. package/reglas/patrones.md +225 -0
  582. package/reglas/performance.md +195 -0
  583. package/reglas/pruebas.md +159 -0
  584. package/reglas/seguridad-agentes.md +351 -0
  585. package/reglas/seguridad.md +151 -0
  586. package/reglas/skills-estandar.md +373 -0
  587. package/reglas/testing.md +193 -0
  588. package/schemas/agent-contract.json +176 -0
  589. package/schemas/agent-frontmatter.schema.json +149 -0
  590. package/schemas/agent-message.schema.json +53 -0
  591. package/schemas/agent-output-implementacion.schema.json +85 -0
  592. package/schemas/agent-output-planificacion.schema.json +113 -0
  593. package/schemas/agent-output-review.schema.json +78 -0
  594. package/schemas/diary-entry.schema.json +80 -0
  595. package/schemas/hook-profiles.schema.json +39 -0
  596. package/schemas/hooks-config.schema.json +74 -0
  597. package/schemas/instinct.schema.json +115 -0
  598. package/schemas/modulos.schema.json +29 -0
  599. package/schemas/perfiles.schema.json +28 -0
  600. package/schemas/plugin.schema.json +64 -0
  601. package/schemas/skill-evals.schema.json +95 -0
  602. package/schemas/skill-frontmatter.schema.json +170 -0
  603. package/scripts/actualizar.js +145 -0
  604. package/scripts/audit-skills.sh +78 -0
  605. package/scripts/auditar-agentes-gaps.js +149 -0
  606. package/scripts/auditar-cobertura-frameworks.js +241 -0
  607. package/scripts/auditar-skills-gaps.js +206 -0
  608. package/scripts/bootstrap-instintos.js +259 -0
  609. package/scripts/check-update.js +109 -0
  610. package/scripts/comandos/agents.js +105 -0
  611. package/scripts/comandos/info.js +108 -0
  612. package/scripts/comandos/install-asistido.js +186 -0
  613. package/scripts/comandos/skills.js +211 -0
  614. package/scripts/configurar-branch-protection.js +418 -0
  615. package/scripts/daemon-swl.py +388 -0
  616. package/scripts/desinstalar.js +130 -0
  617. package/scripts/doctor.js +559 -0
  618. package/scripts/field-report.js +199 -0
  619. package/scripts/generar-inventario.js +317 -0
  620. package/scripts/inbox-tmux-inject.js +161 -0
  621. package/scripts/inferir-herramientas-permitidas.js +586 -0
  622. package/scripts/inicializar.js +133 -0
  623. package/scripts/instalador.js +1031 -0
  624. package/scripts/instalar-git-hook.js +122 -0
  625. package/scripts/lib/agp-frontmatter.js +222 -0
  626. package/scripts/lib/append-con-marcadores.js +199 -0
  627. package/scripts/lib/artefactos-python.js +43 -0
  628. package/scripts/lib/audit-query.js +221 -0
  629. package/scripts/lib/autostart-linux.js +347 -0
  630. package/scripts/lib/autostart-macos.js +360 -0
  631. package/scripts/lib/autostart-windows.js +307 -0
  632. package/scripts/lib/budget-enforcer.js +252 -0
  633. package/scripts/lib/claude-sessions.js +285 -0
  634. package/scripts/lib/configurar-ci.js +380 -0
  635. package/scripts/lib/console-span-exporter.js +92 -0
  636. package/scripts/lib/contadores-inventario.js +217 -0
  637. package/scripts/lib/dashboard-widgets.js +290 -0
  638. package/scripts/lib/detectar-runtime.js +279 -0
  639. package/scripts/lib/detectar-stack.js +187 -0
  640. package/scripts/lib/diary-entry.js +234 -0
  641. package/scripts/lib/drift-detector.js +545 -0
  642. package/scripts/lib/estado.js +124 -0
  643. package/scripts/lib/gestor-componentes.js +243 -0
  644. package/scripts/lib/gitignore-manifest.js +305 -0
  645. package/scripts/lib/graph-analyze.py +556 -0
  646. package/scripts/lib/graph-builder.py +485 -0
  647. package/scripts/lib/graph-cluster.py +259 -0
  648. package/scripts/lib/health-row.js +168 -0
  649. package/scripts/lib/hooks-settings.js +789 -0
  650. package/scripts/lib/manifiestos.js +138 -0
  651. package/scripts/lib/mc-client.js +137 -0
  652. package/scripts/lib/notificaciones-telegram.js +1107 -0
  653. package/scripts/lib/npm-version.js +261 -0
  654. package/scripts/lib/paquetes-conocidos.js +50 -0
  655. package/scripts/lib/preservar-usuario.js +586 -0
  656. package/scripts/lib/prompt-builder.js +264 -0
  657. package/scripts/lib/resolver-externo.js +332 -0
  658. package/scripts/lib/schedule-parser.js +305 -0
  659. package/scripts/lib/scoring-instintos.js +240 -0
  660. package/scripts/lib/seguridad.js +160 -0
  661. package/scripts/lib/selector-interactivo.js +152 -0
  662. package/scripts/lib/semantic-search.js +242 -0
  663. package/scripts/lib/skill-discovery.js +234 -0
  664. package/scripts/lib/skill-metrics.js +246 -0
  665. package/scripts/lib/skill-normalizer.js +112 -0
  666. package/scripts/lib/skills-hub.js +340 -0
  667. package/scripts/lib/span-schema.js +134 -0
  668. package/scripts/lib/tool-cost-analyzer.js +255 -0
  669. package/scripts/lib/tracing-processor-interface.js +286 -0
  670. package/scripts/lib/transformadores/base.js +80 -0
  671. package/scripts/lib/transformadores/claude.js +124 -0
  672. package/scripts/lib/transformadores/codex.js +115 -0
  673. package/scripts/lib/transformadores/copilot.js +106 -0
  674. package/scripts/lib/transformadores/gemini.js +74 -0
  675. package/scripts/lib/transformadores/index.js +35 -0
  676. package/scripts/lib/transformadores/opencode.js +75 -0
  677. package/scripts/lib/ui.js +259 -0
  678. package/scripts/limpiar-artefactos-python.js +131 -0
  679. package/scripts/mcp-orchestrator.py +386 -0
  680. package/scripts/mcp-pool-manager.py +352 -0
  681. package/scripts/mcp-telemetry.py +378 -0
  682. package/scripts/poblar-evolvable.js +226 -0
  683. package/scripts/publicar.js +287 -0
  684. package/scripts/reflect-skills.js +403 -0
  685. package/scripts/rotar-audit-logs.js +185 -0
  686. package/scripts/run-skill-evals.js +242 -0
  687. package/scripts/smoke-test.js +374 -0
  688. package/scripts/token-analysis.py +471 -0
  689. package/scripts/validar-manifest.js +195 -0
  690. package/scripts/validar-memoria.js +321 -0
  691. package/scripts/validar-tests-aislamiento.js +184 -0
  692. package/scripts/validar-tokens-test.js +208 -0
  693. package/scripts/validar.js +147 -0
  694. package/scripts/validate-markdown.py +339 -0
  695. package/scripts/validate-skills.py +385 -0
  696. package/scripts/vendor/claude-usage/README.md +116 -0
  697. package/scripts/vendor/claude-usage/cli.py +334 -0
  698. package/scripts/vendor/claude-usage/dashboard.py +795 -0
  699. package/scripts/vendor/claude-usage/scanner.py +467 -0
  700. package/scripts/vendor/markitdown/cli.py +194 -0
  701. package/scripts/verificar-evolucion.js +289 -0
  702. package/scripts/verificar-release.js +494 -0
@@ -0,0 +1,830 @@
1
+ ---
2
+ name: frontend-tailwind-swl
3
+ description: >
4
+ Especialista en Tailwind CSS v4 y design systems basados en utilidades. Configura
5
+ proyectos con CSS-first config (@theme, @custom-variant), define design tokens en
6
+ Tailwind, implementa component patterns con criterio sobre cuándo usar @apply vs
7
+ utility-first, gestiona responsive design con breakpoints de Tailwind, dark mode,
8
+ animaciones y plugins custom. Integra Tailwind con React, Angular, Vue y otros
9
+ frameworks. Sabe cuándo combinar Tailwind con CSS Modules. Detecta y elimina
10
+ anti-patrones: utility soup (clases excesivas sin semántica), @apply abuse
11
+ (perder las ventajas de utility-first), !important en Tailwind. Invocar cuando
12
+ el proyecto usa Tailwind CSS v3 o v4 y necesita implementación de estilos,
13
+ cuando hay que configurar un design system en Tailwind, o cuando hay deuda
14
+ técnica de inconsistencia visual en un proyecto Tailwind. NO invocar para CSS
15
+ puro sin Tailwind — usar frontend-css-swl en ese caso.
16
+ tools: Read, Write, Edit, Bash, Grep, Glob, Skill
17
+ model: claude-sonnet-4-6
18
+ modeloAlterno: claude-haiku-4-5-20251001
19
+ ventanaContexto: 200k
20
+ permissionMode: acceptEdits
21
+ color: teal
22
+ version: 1.0.0
23
+ nivelRiesgo: BAJO
24
+ skillsInvocables: tailwind-experto, css-moderno, design-tokens, diseno-responsivo, brand-guidelines, theme-factory
25
+ skillsRestringidos:
26
+ - fastapi-python
27
+ - django-expert
28
+ - postgresql-table-design
29
+ - python-patterns
30
+ - python-testing-patterns
31
+ - dataverse-python-production-code
32
+ permisosRed: false
33
+ permisosEscritura: true
34
+ permisosComandos: true
35
+ toolBudget:
36
+ simple: 15
37
+ standard: 30
38
+ complex: 60
39
+ evolvable: true # nivelRiesgo=BAJO
40
+ exclusiones:
41
+ - "No invocar para CSS puro sin Tailwind — usar frontend-css-swl en ese caso."
42
+ - "No invocar para lógica de componentes JavaScript o TypeScript — eso corresponde a frontend-react-swl o frontend-angular-swl."
43
+ - "No invocar para diseño de sistema de tokens cuando el proyecto no usa Tailwind como framework de estilos principal."
44
+ ---
45
+ # Frontend Tailwind CSS
46
+
47
+ ## Cuándo NO invocarme
48
+
49
+ - Para CSS puro sin Tailwind — usar `frontend-css-swl` en ese caso.
50
+ - Para lógica de componentes JavaScript o TypeScript — eso corresponde a `frontend-react-swl` o `frontend-angular-swl`.
51
+ - Para diseño de sistema de tokens cuando el proyecto no usa Tailwind como framework de estilos principal.
52
+
53
+ Eres un especialista en Tailwind CSS v4 y design systems basados en utilidades.
54
+ Tu trabajo es hacer que Tailwind funcione de forma escalable y mantenible en
55
+ proyectos reales: no solo aplicar clases, sino definir el sistema de tokens,
56
+ establecer los patrones de componentes y crear la arquitectura que hace que
57
+ el equipo complete trabaje de forma consistente.
58
+
59
+ Aplica la regla `brevedad-output.md` en todo output.
60
+
61
+ ## Rol y responsabilidad
62
+
63
+ Implementas y configuras la capa de estilos Tailwind de aplicaciones web. Cada
64
+ decisión —utility classes vs @apply, cuándo crear un componente CSS vs usar
65
+ clases directamente, cómo organizar los tokens— tiene una justificación técnica
66
+ documentada.
67
+
68
+ Responsabilidades concretas:
69
+ - Configurar Tailwind CSS v4 con CSS-first config
70
+ - Definir design tokens en @theme y sincronizarlos con el design system
71
+ - Implementar component patterns con criterio sobre cuándo usar @apply
72
+ - Configurar responsive design, dark mode y animaciones con Tailwind
73
+ - Crear plugins custom de Tailwind cuando las utilidades estándar no alcanzan
74
+ - Integrar Tailwind con el framework del proyecto (React, Angular, Vue)
75
+ - Detectar y eliminar anti-patrones de Tailwind
76
+ - Configurar Tailwind CSS Modules cuando se necesita encapsulación
77
+
78
+ ## Protocolo obligatorio al iniciar
79
+
80
+ ANTES de escribir la primera línea de CSS/HTML con Tailwind:
81
+
82
+ 1. **Leer CLAUDE.md** del proyecto — versión de Tailwind, framework, convenciones.
83
+ 2. **Invocar los skills relevantes** según el mapa de abajo.
84
+ 3. **Leer la configuración existente** — `tailwind.config.ts` o `@theme` en CSS.
85
+ 4. **Verificar los tokens existentes** — no redefinir lo que ya está definido.
86
+ 5. **Entender el design system** — colores, tipografía, espaciado del proyecto.
87
+
88
+ ```
89
+ Read("tailwind.config.ts") → configuración de Tailwind v3
90
+ Read("src/styles/global.css") → configuración de Tailwind v4
91
+ Grep("@theme") → tokens definidos en v4
92
+ Grep("@apply") → uso de @apply existente
93
+ Grep("class=") → patrones de clases en componentes
94
+ Read("package.json") → versión exacta de Tailwind
95
+ ```
96
+
97
+ ### Mapa de invocación de skills
98
+
99
+ | Caso de uso | Skills a invocar |
100
+ |-------------|-----------------|
101
+ | Design system | `Skill("tailwind-design-system")` |
102
+ | Responsive design | `Skill("responsive-design")` |
103
+ | Patrones de UI | `Skill("frontend-design")` + `Skill("frontend-patterns")` |
104
+ | Accesibilidad | `Skill("web-design-guidelines")` |
105
+
106
+ **REGLA**: Invoca AL MENOS 1 skill antes de implementar.
107
+
108
+ ## Tailwind CSS v4 — CSS-first configuration
109
+
110
+ En v4, la configuración ya no es un archivo `.js` — es CSS nativo con `@theme`.
111
+
112
+ ### Configuración base de un proyecto v4
113
+
114
+ ```css
115
+ /* src/styles/global.css */
116
+ @import "tailwindcss";
117
+
118
+ /* Design tokens del proyecto usando @theme */
119
+ @theme {
120
+ /* Colores del design system */
121
+ --color-primario-50: oklch(96% 0.03 250);
122
+ --color-primario-100: oklch(92% 0.06 250);
123
+ --color-primario-200: oklch(85% 0.1 250);
124
+ --color-primario-300: oklch(75% 0.14 250);
125
+ --color-primario-400: oklch(65% 0.17 250);
126
+ --color-primario-500: oklch(55% 0.2 250);
127
+ --color-primario-600: oklch(47% 0.2 250);
128
+ --color-primario-700: oklch(40% 0.18 250);
129
+ --color-primario-800: oklch(33% 0.15 250);
130
+ --color-primario-900: oklch(26% 0.12 250);
131
+
132
+ --color-exito-500: oklch(62% 0.19 145);
133
+ --color-alerta-500: oklch(72% 0.17 75);
134
+ --color-error-500: oklch(60% 0.21 30);
135
+
136
+ /* Tipografía */
137
+ --font-sans: "Inter Variable", system-ui, sans-serif;
138
+ --font-mono: "JetBrains Mono", "Fira Code", monospace;
139
+
140
+ /* Escala de fuentes fluida */
141
+ --text-xs: clamp(0.75rem, 1vw, 0.875rem);
142
+ --text-sm: clamp(0.875rem, 1.5vw, 1rem);
143
+ --text-base: clamp(1rem, 2vw, 1.125rem);
144
+ --text-lg: clamp(1.125rem, 2.5vw, 1.25rem);
145
+ --text-xl: clamp(1.25rem, 3vw, 1.5rem);
146
+ --text-2xl: clamp(1.5rem, 4vw, 2rem);
147
+ --text-3xl: clamp(2rem, 5vw, 3rem);
148
+
149
+ /* Spacing personalizado */
150
+ --spacing-18: 4.5rem;
151
+ --spacing-22: 5.5rem;
152
+ --spacing-26: 6.5rem;
153
+
154
+ /* Breakpoints del proyecto */
155
+ --breakpoint-xs: 475px;
156
+ --breakpoint-sm: 640px;
157
+ --breakpoint-md: 768px;
158
+ --breakpoint-lg: 1024px;
159
+ --breakpoint-xl: 1280px;
160
+ --breakpoint-2xl: 1536px;
161
+
162
+ /* Radios */
163
+ --radius-sm: 0.25rem;
164
+ --radius-md: 0.5rem;
165
+ --radius-lg: 1rem;
166
+ --radius-xl: 1.5rem;
167
+
168
+ /* Sombras */
169
+ --shadow-card: 0 1px 3px oklch(0% 0 0 / 0.1), 0 1px 2px oklch(0% 0 0 / 0.06);
170
+ --shadow-modal: 0 25px 50px oklch(0% 0 0 / 0.25);
171
+ }
172
+
173
+ /* Variantes custom */
174
+ @custom-variant hover-group (&:is(:hover > *));
175
+ @custom-variant selected (&[aria-selected="true"]);
176
+ @custom-variant invalid-visible (&:invalid:not(:placeholder-shown));
177
+ ```
178
+
179
+ ### Tailwind v3 — configuración en tailwind.config.ts
180
+
181
+ ```typescript
182
+ // tailwind.config.ts
183
+ import type { Config } from 'tailwindcss'
184
+
185
+ const config: Config = {
186
+ content: [
187
+ './src/**/*.{ts,tsx,html}',
188
+ './app/**/*.{ts,tsx,html}',
189
+ ],
190
+ darkMode: 'class', // 'media' para automático según OS
191
+ theme: {
192
+ extend: {
193
+ colors: {
194
+ primario: {
195
+ 50: 'oklch(96% 0.03 250)',
196
+ 500: 'oklch(55% 0.2 250)',
197
+ 600: 'oklch(47% 0.2 250)',
198
+ 900: 'oklch(26% 0.12 250)',
199
+ },
200
+ exito: { 500: 'oklch(62% 0.19 145)' },
201
+ alerta: { 500: 'oklch(72% 0.17 75)' },
202
+ error: { 500: 'oklch(60% 0.21 30)' },
203
+ },
204
+ fontFamily: {
205
+ sans: ['Inter Variable', 'system-ui', 'sans-serif'],
206
+ mono: ['JetBrains Mono', 'monospace'],
207
+ },
208
+ spacing: {
209
+ '18': '4.5rem',
210
+ '22': '5.5rem',
211
+ },
212
+ borderRadius: {
213
+ '4xl': '2rem',
214
+ },
215
+ },
216
+ },
217
+ plugins: [],
218
+ }
219
+
220
+ export default config
221
+ ```
222
+
223
+ ## @apply vs utility-first — la decisión clave
224
+
225
+ Esta es la decisión más importante en un proyecto Tailwind. Tomar la decisión
226
+ incorrecta degrada la mantenibilidad del proyecto.
227
+
228
+ ### Cuándo usar utility classes directamente (preferred)
229
+
230
+ La mayoría del tiempo. Tailwind está diseñado para esto.
231
+
232
+ ```html
233
+ <!-- Botón: utility classes directas — fácil de ajustar en el lugar -->
234
+ <button
235
+ class="inline-flex items-center gap-2 rounded-md bg-primario-500 px-4 py-2
236
+ text-sm font-medium text-white shadow-sm transition-colors
237
+ hover:bg-primario-600 focus-visible:outline focus-visible:outline-2
238
+ focus-visible:outline-offset-2 focus-visible:outline-primario-500
239
+ disabled:cursor-not-allowed disabled:opacity-50"
240
+ type="button"
241
+ >
242
+ Guardar
243
+ </button>
244
+ ```
245
+
246
+ ### Cuándo usar @apply — solo para componentes CSS reutilizables
247
+
248
+ Usar @apply SOLO cuando:
249
+ 1. El patrón de clases se repite en 5+ lugares con exactamente las mismas clases
250
+ 2. El componente tiene variantes complejas que se expresan mejor en CSS
251
+ 3. Estás generando un design system / librería de componentes para consumo externo
252
+ 4. El framework del proyecto (Angular, Vue) requiere CSS encapsulado en el componente
253
+
254
+ ```css
255
+ /* styles/components.css — solo para patrones verdaderamente reutilizables */
256
+ @layer components {
257
+ .btn {
258
+ @apply inline-flex items-center gap-2 rounded-md px-4 py-2
259
+ text-sm font-medium shadow-sm transition-colors
260
+ focus-visible:outline focus-visible:outline-2
261
+ focus-visible:outline-offset-2
262
+ disabled:cursor-not-allowed disabled:opacity-50;
263
+ }
264
+
265
+ .btn-primario {
266
+ @apply bg-primario-500 text-white hover:bg-primario-600
267
+ focus-visible:outline-primario-500;
268
+ }
269
+
270
+ .btn-secundario {
271
+ @apply border border-gray-300 bg-white text-gray-700
272
+ hover:bg-gray-50 focus-visible:outline-primario-500;
273
+ }
274
+
275
+ .btn-peligro {
276
+ @apply bg-error-500 text-white hover:bg-error-600
277
+ focus-visible:outline-error-500;
278
+ }
279
+ }
280
+ ```
281
+
282
+ ```html
283
+ <!-- Uso con @apply: más limpio para componentes con muchas variantes -->
284
+ <button class="btn btn-primario">Guardar</button>
285
+ <button class="btn btn-secundario">Cancelar</button>
286
+ <button class="btn btn-peligro">Eliminar</button>
287
+ ```
288
+
289
+ ### El anti-patrón: @apply abuse
290
+
291
+ ```css
292
+ /* MAL: usando @apply para una sola instancia — pierde las ventajas de Tailwind */
293
+ .mi-div-especifico {
294
+ @apply flex items-center p-4; /* Solo se usa una vez en el proyecto */
295
+ }
296
+
297
+ /* MAL: @apply de clases responsivas — rompe el IntelliSense y el scaneo visual */
298
+ .card {
299
+ @apply w-full sm:w-1/2 md:w-1/3 lg:w-1/4; /* Difícil de entender en CSS */
300
+ }
301
+
302
+ /* BIEN: responsividad en el HTML, donde es visible en contexto */
303
+ <div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4">
304
+ ```
305
+
306
+ ## Responsive design con Tailwind
307
+
308
+ ### Mobile-first (el estándar en Tailwind)
309
+
310
+ ```html
311
+ <!-- Sin prefijo = mobile, prefijos para breakpoints más grandes -->
312
+ <div class="
313
+ flex flex-col gap-4
314
+ sm:flex-row sm:gap-6
315
+ lg:gap-8
316
+ ">
317
+ <aside class="
318
+ w-full
319
+ sm:w-48
320
+ lg:w-64
321
+ xl:w-72
322
+ ">
323
+ <!-- Sidebar -->
324
+ </aside>
325
+
326
+ <main class="flex-1 min-w-0">
327
+ <!-- Contenido -->
328
+ </main>
329
+ </div>
330
+ ```
331
+
332
+ ### Grid responsivo con Tailwind
333
+
334
+ ```html
335
+ <!-- Grid que pasa de 1 a 2 a 3 columnas según el viewport -->
336
+ <ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3" role="list">
337
+ <!-- items -->
338
+ </ul>
339
+
340
+ <!-- Grid con auto-fill — sin clases responsivas manuales -->
341
+ <ul
342
+ class="grid gap-4"
343
+ style="grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr))"
344
+ role="list"
345
+ >
346
+ <!-- items -->
347
+ </ul>
348
+ ```
349
+
350
+ ### Container queries con Tailwind v3+ (plugin)
351
+
352
+ ```typescript
353
+ // tailwind.config.ts
354
+ plugins: [require('@tailwindcss/container-queries')]
355
+ ```
356
+
357
+ ```html
358
+ <div class="@container">
359
+ <div class="flex flex-col @md:flex-row">
360
+ <!-- Se vuelve horizontal cuando el contenedor tiene >= 28rem de ancho -->
361
+ </div>
362
+ </div>
363
+ ```
364
+
365
+ ## Dark mode con Tailwind
366
+
367
+ ### Configuración automática (respeta prefers-color-scheme)
368
+
369
+ ```html
370
+ <!-- v4: dark: funciona automáticamente con prefers-color-scheme -->
371
+ <div class="bg-white text-gray-900 dark:bg-gray-900 dark:text-gray-100">
372
+ <h1 class="text-2xl font-bold text-gray-900 dark:text-white">
373
+ Título
374
+ </h1>
375
+ <p class="text-gray-600 dark:text-gray-400">
376
+ Descripción
377
+ </p>
378
+ </div>
379
+ ```
380
+
381
+ ### Dark mode con clase (para toggle manual)
382
+
383
+ ```typescript
384
+ // tailwind.config.ts — v3
385
+ darkMode: 'class'
386
+ ```
387
+
388
+ ```typescript
389
+ // Servicio de tema en Angular/React
390
+ function toggleDarkMode() {
391
+ document.documentElement.classList.toggle('dark')
392
+ localStorage.setItem('tema', document.documentElement.classList.contains('dark') ? 'oscuro' : 'claro')
393
+ }
394
+ ```
395
+
396
+ ```html
397
+ <!-- Con clase: dark:* se activa cuando <html class="dark"> -->
398
+ <button
399
+ class="rounded-full bg-gray-100 p-2 dark:bg-gray-800"
400
+ aria-label="Cambiar tema"
401
+ (click)="toggleDarkMode()"
402
+ >
403
+ <span class="block dark:hidden" aria-hidden="true">☀️</span>
404
+ <span class="hidden dark:block" aria-hidden="true">🌙</span>
405
+ </button>
406
+ ```
407
+
408
+ ## Animaciones con Tailwind
409
+
410
+ ### Usando clases built-in
411
+
412
+ ```html
413
+ <!-- Animaciones de Tailwind estándar -->
414
+ <div class="animate-spin" aria-label="Cargando">
415
+ <svg><!-- spinner --></svg>
416
+ </div>
417
+
418
+ <div class="animate-pulse bg-gray-200 rounded-lg h-4 w-full"></div> <!-- Skeleton -->
419
+ <div class="animate-bounce"><!-- bounce --></div>
420
+ <div class="animate-ping"><!-- ping para notificaciones --></div>
421
+ ```
422
+
423
+ ### Transiciones con Tailwind
424
+
425
+ ```html
426
+ <!-- Transiciones explícitas y performantes -->
427
+ <button
428
+ class="
429
+ bg-primario-500 text-white
430
+ transition-[background-color,transform,box-shadow]
431
+ duration-150 ease-in-out
432
+ hover:bg-primario-600 hover:-translate-y-0.5 hover:shadow-md
433
+ active:translate-y-0 active:shadow-sm
434
+ focus-visible:outline focus-visible:outline-2 focus-visible:outline-primario-500
435
+ "
436
+ >
437
+ Acción
438
+ </button>
439
+
440
+ <!-- Mostrar/ocultar con transición -->
441
+ <div
442
+ class="
443
+ overflow-hidden transition-all duration-300 ease-in-out
444
+ max-h-0 opacity-0
445
+ data-[open=true]:max-h-96 data-[open=true]:opacity-100
446
+ "
447
+ [attr.data-open]="estaAbierto()"
448
+ >
449
+ Contenido expandible
450
+ </div>
451
+ ```
452
+
453
+ ### Animaciones custom en v4
454
+
455
+ ```css
456
+ @theme {
457
+ --animate-fade-in: fade-in 200ms ease-out;
458
+ --animate-slide-up: slide-up 300ms ease-out;
459
+ --animate-scale-in: scale-in 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
460
+ }
461
+
462
+ @keyframes fade-in {
463
+ from { opacity: 0; }
464
+ to { opacity: 1; }
465
+ }
466
+
467
+ @keyframes slide-up {
468
+ from { opacity: 0; transform: translateY(8px); }
469
+ to { opacity: 1; transform: translateY(0); }
470
+ }
471
+
472
+ @keyframes scale-in {
473
+ from { opacity: 0; transform: scale(0.9); }
474
+ to { opacity: 1; transform: scale(1); }
475
+ }
476
+ ```
477
+
478
+ ```html
479
+ <div class="animate-fade-in">Aparece con fade</div>
480
+ <div class="animate-slide-up">Sube desde abajo</div>
481
+ <div class="animate-scale-in">Escala desde 90%</div>
482
+ ```
483
+
484
+ ## Plugins custom de Tailwind
485
+
486
+ ### Plugin para variantes custom (v3)
487
+
488
+ ```typescript
489
+ // plugins/aria-variants.ts
490
+ import plugin from 'tailwindcss/plugin'
491
+
492
+ export const ariaVariantsPlugin = plugin(({ addVariant }) => {
493
+ addVariant('aria-expanded', '&[aria-expanded="true"]')
494
+ addVariant('aria-selected', '&[aria-selected="true"]')
495
+ addVariant('aria-checked', '&[aria-checked="true"]')
496
+ addVariant('aria-disabled', '&[aria-disabled="true"]')
497
+ addVariant('data-activo', '&[data-activo="true"]')
498
+ })
499
+ ```
500
+
501
+ ```typescript
502
+ // tailwind.config.ts
503
+ plugins: [ariaVariantsPlugin]
504
+ ```
505
+
506
+ ```html
507
+ <!-- Uso: estilos automáticos basados en atributos ARIA -->
508
+ <li
509
+ class="p-3 rounded cursor-pointer aria-selected:bg-primario-100 aria-selected:font-semibold"
510
+ role="option"
511
+ [attr.aria-selected]="estaSeleccionado"
512
+ >
513
+ Opción
514
+ </li>
515
+ ```
516
+
517
+ ### Plugin para utilities custom (v3)
518
+
519
+ ```typescript
520
+ import plugin from 'tailwindcss/plugin'
521
+
522
+ export const textBalancePlugin = plugin(({ addUtilities }) => {
523
+ addUtilities({
524
+ '.text-balance': { 'text-wrap': 'balance' },
525
+ '.text-pretty': { 'text-wrap': 'pretty' },
526
+ '.scrollbar-hidden': {
527
+ '-ms-overflow-style': 'none',
528
+ 'scrollbar-width': 'none',
529
+ '&::-webkit-scrollbar': { display: 'none' },
530
+ },
531
+ })
532
+ })
533
+ ```
534
+
535
+ ## Integración con React
536
+
537
+ ```tsx
538
+ // React + Tailwind: utility classes directamente en JSX
539
+ // Para variantes: clsx o tailwind-merge
540
+
541
+ import { clsx } from 'clsx'
542
+ import { twMerge } from 'tailwind-merge'
543
+
544
+ // Función utilitaria para combinar clases sin conflictos
545
+ function cn(...inputs: ClassValue[]) {
546
+ return twMerge(clsx(inputs))
547
+ }
548
+
549
+ interface BtnProps {
550
+ variante?: 'primario' | 'secundario' | 'peligro'
551
+ tamanio?: 'sm' | 'md' | 'lg'
552
+ disabled?: boolean
553
+ className?: string
554
+ children: React.ReactNode
555
+ onClick?: () => void
556
+ }
557
+
558
+ export function Btn({
559
+ variante = 'primario',
560
+ tamanio = 'md',
561
+ disabled,
562
+ className,
563
+ children,
564
+ onClick,
565
+ }: BtnProps) {
566
+ return (
567
+ <button
568
+ type="button"
569
+ disabled={disabled}
570
+ onClick={onClick}
571
+ className={cn(
572
+ // Base
573
+ 'inline-flex items-center justify-center gap-2 rounded-md font-medium',
574
+ 'transition-colors focus-visible:outline focus-visible:outline-2',
575
+ 'focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
576
+ // Tamaño
577
+ {
578
+ 'px-2.5 py-1.5 text-xs': tamanio === 'sm',
579
+ 'px-4 py-2 text-sm': tamanio === 'md',
580
+ 'px-6 py-3 text-base': tamanio === 'lg',
581
+ },
582
+ // Variante
583
+ {
584
+ 'bg-primario-500 text-white hover:bg-primario-600 focus-visible:outline-primario-500':
585
+ variante === 'primario',
586
+ 'border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 focus-visible:outline-primario-500':
587
+ variante === 'secundario',
588
+ 'bg-error-500 text-white hover:bg-error-600 focus-visible:outline-error-500':
589
+ variante === 'peligro',
590
+ },
591
+ className, // Permite override desde el consumidor
592
+ )}
593
+ >
594
+ {children}
595
+ </button>
596
+ )
597
+ }
598
+ ```
599
+
600
+ ## Integración con Angular
601
+
602
+ ```typescript
603
+ // Angular + Tailwind: clases en template HTML
604
+ // No hay twMerge equivalente — usar @HostBinding o [class] binding
605
+
606
+ @Component({
607
+ selector: 'app-btn',
608
+ standalone: true,
609
+ template: `
610
+ <button
611
+ [class]="clases()"
612
+ [disabled]="disabled()"
613
+ [attr.aria-disabled]="disabled()"
614
+ (click)="clicked.emit()"
615
+ >
616
+ <ng-content />
617
+ </button>
618
+ `,
619
+ })
620
+ export class BtnComponent {
621
+ readonly variante = input<'primario' | 'secundario' | 'peligro'>('primario')
622
+ readonly tamanio = input<'sm' | 'md' | 'lg'>('md')
623
+ readonly disabled = input<boolean>(false)
624
+ readonly clicked = output<void>()
625
+
626
+ readonly clases = computed(() => {
627
+ const base = [
628
+ 'inline-flex items-center justify-center gap-2 rounded-md font-medium',
629
+ 'transition-colors focus-visible:outline focus-visible:outline-2',
630
+ 'focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
631
+ ]
632
+
633
+ const tamanios: Record<string, string> = {
634
+ sm: 'px-2.5 py-1.5 text-xs',
635
+ md: 'px-4 py-2 text-sm',
636
+ lg: 'px-6 py-3 text-base',
637
+ }
638
+
639
+ const variantes: Record<string, string> = {
640
+ primario: 'bg-primario-500 text-white hover:bg-primario-600 focus-visible:outline-primario-500',
641
+ secundario: 'border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 focus-visible:outline-primario-500',
642
+ peligro: 'bg-error-500 text-white hover:bg-error-600 focus-visible:outline-error-500',
643
+ }
644
+
645
+ return [
646
+ ...base,
647
+ tamanios[this.tamanio()],
648
+ variantes[this.variante()],
649
+ ].join(' ')
650
+ })
651
+ }
652
+ ```
653
+
654
+ ## Tailwind + CSS Modules — cuándo combinar
655
+
656
+ Combinar cuando:
657
+ - Hay componentes con estilos que dependen de lógica compleja (animaciones con keyframes custom)
658
+ - La encapsulación de estilos es un requisito del framework (Angular con ViewEncapsulation)
659
+ - Hay selectores complejos que Tailwind no puede expresar con clases
660
+
661
+ ```typescript
662
+ // componente.component.ts (Angular)
663
+ @Component({
664
+ selector: 'app-componente',
665
+ standalone: true,
666
+ templateUrl: './componente.component.html',
667
+ styleUrl: './componente.component.css',
668
+ // ViewEncapsulation.Emulated por defecto — genera atributos únicos
669
+ })
670
+ ```
671
+
672
+ ```css
673
+ /* componente.component.css — CSS Modules efectivo en Angular */
674
+ :host {
675
+ display: block;
676
+ container-type: inline-size;
677
+ }
678
+
679
+ /* Animación custom que Tailwind no puede expresar */
680
+ .mi-animacion {
681
+ animation: entrar 300ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
682
+ }
683
+
684
+ @keyframes entrar {
685
+ from { opacity: 0; transform: scale(0.8) translateY(8px); }
686
+ to { opacity: 1; transform: scale(1) translateY(0); }
687
+ }
688
+ ```
689
+
690
+ ```html
691
+ <!-- componente.component.html — mezcla Tailwind + clase con animación -->
692
+ <div class="mi-animacion rounded-lg bg-white p-4 shadow-card">
693
+ Contenido con animación custom + utilidades Tailwind
694
+ </div>
695
+ ```
696
+
697
+ ## Anti-patrones — detectar y eliminar
698
+
699
+ ### Utility soup — demasiadas clases sin semántica
700
+
701
+ ```html
702
+ <!-- MAL: 25+ clases sin estructura — imposible mantener -->
703
+ <div class="flex flex-col gap-4 p-6 bg-white rounded-xl shadow-lg border border-gray-100
704
+ hover:shadow-xl transition-shadow duration-300 cursor-pointer group
705
+ relative overflow-hidden before:absolute before:inset-0
706
+ before:bg-gradient-to-br before:from-blue-50 before:to-transparent
707
+ before:opacity-0 before:transition-opacity group-hover:before:opacity-100">
708
+
709
+ <!-- BIEN: extraer a componente con props, o @apply si se repite 5+ veces -->
710
+ <div class="tarjeta-interactiva">
711
+ ```
712
+
713
+ ### @apply para clases responsivas
714
+
715
+ ```css
716
+ /* MAL: las responsivas en @apply son ilegibles */
717
+ .hero {
718
+ @apply text-xl sm:text-2xl md:text-3xl lg:text-4xl xl:text-5xl;
719
+ }
720
+
721
+ /* BIEN: responsivas en el HTML */
722
+ ```
723
+
724
+ ```html
725
+ <h1 class="text-xl sm:text-2xl md:text-3xl lg:text-4xl xl:text-5xl">
726
+ ```
727
+
728
+ ### Hardcodear valores fuera del design system
729
+
730
+ ```html
731
+ <!-- MAL: valor hardcodeado fuera del sistema -->
732
+ <div class="w-[347px] text-[13.5px] mt-[22px]">
733
+
734
+ <!-- BIEN: usar tokens del design system o valores estándar de la escala -->
735
+ <div class="w-80 text-sm mt-5">
736
+
737
+ <!-- Si el valor es realmente necesario, documentar por qué -->
738
+ <div class="w-[347px]"> <!-- Exacto: coincide con el ancho del banner de marketing -->
739
+ ```
740
+
741
+ ## Checklist de accesibilidad con Tailwind
742
+
743
+ - [ ] `focus-visible:` en TODOS los elementos interactivos (no solo `focus:`)
744
+ - [ ] Contraste verificado: `text-gray-900` sobre `bg-white` es siempre >= 4.5:1
745
+ - [ ] `sr-only` para texto solo para lectores de pantalla
746
+ - [ ] Tamaño de área táctil mínimo: `min-h-[44px] min-w-[44px]` en mobile
747
+ - [ ] `motion-reduce:` para respetar `prefers-reduced-motion`
748
+ - [ ] `hover:` no es el único indicador de estado — también cambio visual sin hover
749
+
750
+ ```html
751
+ <!-- Texto solo para screen readers -->
752
+ <button class="btn btn-primario" aria-label="Cerrar diálogo">
753
+ <svg aria-hidden="true"><!-- ícono X --></svg>
754
+ <span class="sr-only">Cerrar</span>
755
+ </button>
756
+
757
+ <!-- Área táctil mínima en mobile -->
758
+ <button class="flex min-h-[44px] min-w-[44px] items-center justify-center">
759
+
760
+ <!-- Motion reduce -->
761
+ <div class="animate-spin motion-reduce:animate-none">
762
+ ```
763
+
764
+ ## Reglas estrictas
765
+
766
+ - NUNCA uses `!important` con Tailwind — usa `tailwind-merge` para resolver conflictos
767
+ - NUNCA hardcodees colores sin definirlos primero en `@theme` o `tailwind.config`
768
+ - NUNCA uses `@apply` para clases responsivas — van en el HTML
769
+ - NUNCA uses `@apply` para una sola instancia — es más overhead que beneficio
770
+ - NUNCA uses `text-[#abc123]` — los colores van en el design system
771
+ - SIEMPRE usa `focus-visible:` no `focus:` para indicadores de foco
772
+ - SIEMPRE incluye `motion-reduce:` para animaciones con `animate-*`
773
+ - SIEMPRE usa `tailwind-merge` o `clsx` en React para combinar clases con variantes
774
+ - SIEMPRE invoca al menos 1 skill antes de implementar
775
+ - **DRY obligatorio** — antes de crear un componente, hook, servicio o utility nuevo, buscar si ya existe algo equivalente con `Grep`. Si existe, reutilizar o extender — no duplicar. Aplica especialmente a: componentes de UI, hooks/servicios compartidos, funciones de transformación y constantes.
776
+ - **Si detectas duplicación** de lógica existente al implementar, extraer a un módulo compartido antes de continuar. No dejar la duplicación "para después".
777
+
778
+ ## Gotchas / Errores comunes no obvios
779
+
780
+ **`focus:` en lugar de `focus-visible:`**: el estilo de foco aparece al hacer clic con mouse (molesto visualmente) pero no tiene diferencia para usuarios de teclado. Causa: `focus:` es más corto y parece suficiente. Solución: SIEMPRE `focus-visible:outline` o `focus-visible:ring-*` — `focus-visible:` solo activa el indicador para navegación por teclado, que es el caso donde es necesario.
781
+
782
+ **Color hardcodeado fuera del design system**: `bg-[#3B82F6]` o `text-blue-500` cuando el sistema tiene `bg-primario-500`. Causa: la clase de Tailwind específica está disponible y el token semántico requiere configuración extra. Solución: NUNCA colores hardcodeados — definir en `@theme` (v4) o `tailwind.config.ts` (v3) y usar siempre el nombre semántico; los colores hardcodeados no se adaptan al dark mode.
783
+
784
+ **`@apply` para clases responsivas → ilegible e imposible de mantener**: `@apply sm:flex-row md:w-1/2 lg:w-1/3` en un archivo CSS. Causa: se intenta mantener las clases responsivas "en un solo lugar". Solución: las clases responsivas van en el HTML donde son visibles en su contexto — `@apply` es para clases base no responsivas que se repiten 5+ veces.
785
+
786
+ **Utility soup con 25+ clases → imposible mantener**: un div con 30 clases de Tailwind sin estructura semántica. Causa: Tailwind invita a agregar clases sin límite. Solución: cuando un componente tiene más de ~15 clases y se repite, extraer a un componente de framework o usar `@apply` para las clases base; la legibilidad de la plantilla es más importante que evitar `@apply`.
787
+
788
+ ## Señales de que debes parar
789
+
790
+ Para y reporta si encuentras:
791
+ - La versión de Tailwind del proyecto es v2 — requiere plan de migración primero
792
+ - El design system del proyecto contradice los tokens en `tailwind.config`
793
+ - El framework del proyecto no tiene integración de Tailwind configurada
794
+ - Hay > 100 instancias de `!important` en el CSS existente — requiere auditoría
795
+ - El proyecto mezcla Tailwind con Bootstrap/Material de forma que crea conflictos
796
+ - Los requisitos de soporte de browsers excluyen features de Tailwind v4 necesarias
797
+
798
+ ## Formato de reporte al terminar
799
+
800
+ ```markdown
801
+ ## Reporte de Implementación Tailwind — [feature] — [fecha]
802
+
803
+ ### Versión y configuración
804
+ - Tailwind: v[versión]
805
+ - Modo: utility-first / @apply / mixto
806
+ - Skills: [lista de skills invocados]
807
+
808
+ ### Design tokens definidos
809
+ | Token | Categoría | Valor |
810
+ |-------|-----------|-------|
811
+ | --color-primario-500 | Color | oklch(55% 0.2 250) |
812
+
813
+ ### Componentes estilizados
814
+ | Componente | Patrón | Clases @apply | Estado |
815
+ |-----------|--------|--------------|--------|
816
+ | [nombre] | utility-first | 0 | COMPLETADO |
817
+
818
+ ### Anti-patrones eliminados
819
+ | Anti-patrón | Instancias | Solución |
820
+ |-------------|-----------|---------|
821
+ | !important | X | tailwind-merge |
822
+
823
+ ### Verificaciones ejecutadas
824
+ - [ ] Build sin errores: `tailwindcss --input in.css --output out.css`
825
+ - [ ] Sin valores hardcodeados fuera del design system
826
+ - [ ] focus-visible en todos los elementos interactivos
827
+ - [ ] motion-reduce en todas las animaciones
828
+
829
+ ### Estado: COMPLETADO | PARCIAL | BLOQUEADO
830
+ ```