voodoo-framework 2.7.2__tar.gz → 2.8.0__tar.gz

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 (343) hide show
  1. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/PKG-INFO +1 -1
  2. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/__init__.py +1 -1
  3. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/rendering.py +7 -1
  4. voodoo_framework-2.8.0/src/voodoo/ui/styles/system.py +530 -0
  5. voodoo_framework-2.8.0/src/voodoo/ui/styles/theme_contract.py +156 -0
  6. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo_framework.egg-info/PKG-INFO +1 -1
  7. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo_framework.egg-info/SOURCES.txt +3 -0
  8. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_design_system2.py +2 -1
  9. voodoo_framework-2.8.0/tests/test_design_system_premium.py +101 -0
  10. voodoo_framework-2.8.0/tests/test_design_system_theme_contract.py +53 -0
  11. voodoo_framework-2.7.2/src/voodoo/ui/styles/system.py +0 -273
  12. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/LICENSE +0 -0
  13. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/README.md +0 -0
  14. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/pyproject.toml +0 -0
  15. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/setup.cfg +0 -0
  16. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/adapters/__init__.py +0 -0
  17. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/adapters/capabilities.py +0 -0
  18. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/adapters/registry.py +0 -0
  19. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/adapters/tailwind.py +0 -0
  20. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/adapters/voodoo_css.py +0 -0
  21. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/agent.py +0 -0
  22. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/agents/__init__.py +0 -0
  23. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/agents/models.py +0 -0
  24. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/agents/registry.py +0 -0
  25. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/__init__.py +0 -0
  26. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/agent.py +0 -0
  27. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/agent_legacy.py +0 -0
  28. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/agent_runtime_truth.py +0 -0
  29. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/providers/__init__.py +0 -0
  30. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/providers/anthropic.py +0 -0
  31. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/providers/gemini.py +0 -0
  32. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/providers/mock.py +0 -0
  33. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/providers/ollama.py +0 -0
  34. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/providers/openai.py +0 -0
  35. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/tools/__init__.py +0 -0
  36. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ai/tools/registry.py +0 -0
  37. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/api.py +0 -0
  38. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/auth/__init__.py +0 -0
  39. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/auth/cookies.py +0 -0
  40. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/auth/guards.py +0 -0
  41. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/auth/jwt.py +0 -0
  42. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/auth/middleware.py +0 -0
  43. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/auth/passwords.py +0 -0
  44. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/auth/user.py +0 -0
  45. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/__init__.py +0 -0
  46. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/__main__.py +0 -0
  47. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/agents.py +0 -0
  48. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/ai.py +0 -0
  49. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/approvals.py +0 -0
  50. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/auth.py +0 -0
  51. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/create.py +0 -0
  52. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/dev.py +0 -0
  53. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/doctor.py +0 -0
  54. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/executions.py +0 -0
  55. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/fabric.py +0 -0
  56. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/generate.py +0 -0
  57. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/inspect.py +0 -0
  58. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/new.py +0 -0
  59. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/objects.py +0 -0
  60. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/protocol.py +0 -0
  61. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/recover.py +0 -0
  62. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/routes.py +0 -0
  63. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/scaffolding.py +0 -0
  64. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/schedules.py +0 -0
  65. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/status.py +0 -0
  66. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/tasks.py +0 -0
  67. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/terminal.py +0 -0
  68. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/theme.py +0 -0
  69. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/version.py +0 -0
  70. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/cli/workers_cmd.py +0 -0
  71. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/components.py +0 -0
  72. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/config.py +0 -0
  73. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/core/__init__.py +0 -0
  74. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/core/app.py +0 -0
  75. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/core/errors.py +0 -0
  76. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/core/events.py +0 -0
  77. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/core/render.py +0 -0
  78. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/core/routing.py +0 -0
  79. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/core/sitemap.py +0 -0
  80. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/core/state.py +0 -0
  81. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/data/__init__.py +0 -0
  82. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/data/base.py +0 -0
  83. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/data/model.py +0 -0
  84. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/data/store_backend.py +0 -0
  85. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/data/store_facade.py +0 -0
  86. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/data/store_model.py +0 -0
  87. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/__init__.py +0 -0
  88. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/auth.py +0 -0
  89. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/errors.py +0 -0
  90. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/gateway.py +0 -0
  91. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/http.py +0 -0
  92. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/models.py +0 -0
  93. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/mqtt.py +0 -0
  94. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/protocol.py +0 -0
  95. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/simulator.py +0 -0
  96. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/store.py +0 -0
  97. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/store_voodoo.py +0 -0
  98. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/edge/world.py +0 -0
  99. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/i18n.py +0 -0
  100. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/mcp/__init__.py +0 -0
  101. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/mcp/client.py +0 -0
  102. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/memory/__init__.py +0 -0
  103. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/memory/interfaces.py +0 -0
  104. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/memory/sqlite.py +0 -0
  105. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/mesh/__init__.py +0 -0
  106. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/mesh/auth.py +0 -0
  107. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/mesh/client.py +0 -0
  108. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/mesh/event_bus.py +0 -0
  109. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/mesh/remote.py +0 -0
  110. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/mesh/replay.py +0 -0
  111. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/__init__.py +0 -0
  112. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/capability.py +0 -0
  113. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/compute.py +0 -0
  114. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/constraint.py +0 -0
  115. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/effect.py +0 -0
  116. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/intent.py +0 -0
  117. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/resource.py +0 -0
  118. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/state.py +0 -0
  119. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/primitives/time.py +0 -0
  120. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/protocol/__init__.py +0 -0
  121. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/protocol/export.py +0 -0
  122. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/protocol/fabric.py +0 -0
  123. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/protocol/operational.py +0 -0
  124. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/protocol/schemas.py +0 -0
  125. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/py.typed +0 -0
  126. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/queue.py +0 -0
  127. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/routing/api.py +0 -0
  128. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/routing/pages.py +0 -0
  129. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/__init__.py +0 -0
  130. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/adaptive.py +0 -0
  131. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/capability.py +0 -0
  132. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/constraint.py +0 -0
  133. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/context.py +0 -0
  134. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/dashboard.py +0 -0
  135. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/engine.py +0 -0
  136. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/errors.py +0 -0
  137. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/execution.py +0 -0
  138. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/fabric.py +0 -0
  139. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/goal.py +0 -0
  140. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/goal_store.py +0 -0
  141. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/graph.py +0 -0
  142. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/human.py +0 -0
  143. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/identity.py +0 -0
  144. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/identity_store.py +0 -0
  145. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/membership.py +0 -0
  146. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/operations.py +0 -0
  147. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/persistence.py +0 -0
  148. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/planner.py +0 -0
  149. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/policy.py +0 -0
  150. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/scheduler.py +0 -0
  151. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/store.py +0 -0
  152. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/task.py +0 -0
  153. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/transaction.py +0 -0
  154. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/workflow.py +0 -0
  155. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/workflow_store.py +0 -0
  156. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/runtime/world_execution.py +0 -0
  157. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/schedule.py +0 -0
  158. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/security/__init__.py +0 -0
  159. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/security/cors.py +0 -0
  160. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/security/csrf.py +0 -0
  161. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/security/headers.py +0 -0
  162. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/security/passwords.py +0 -0
  163. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/security/rate_limit.py +0 -0
  164. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/security/redaction.py +0 -0
  165. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/security/secrets.py +0 -0
  166. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/seo.py +0 -0
  167. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/static/client.js +0 -0
  168. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/status.py +0 -0
  169. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/__init__.py +0 -0
  170. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/cache/__init__.py +0 -0
  171. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/cache/interfaces.py +0 -0
  172. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/cache/memory.py +0 -0
  173. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/cache/redis.py +0 -0
  174. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/database/__init__.py +0 -0
  175. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/database/interfaces.py +0 -0
  176. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/database/postgres.py +0 -0
  177. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/database/sqlite.py +0 -0
  178. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/events/__init__.py +0 -0
  179. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/events/interfaces.py +0 -0
  180. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/events/local.py +0 -0
  181. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/events/postgres.py +0 -0
  182. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/events/sqlite.py +0 -0
  183. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/events/store.py +0 -0
  184. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/execution/__init__.py +0 -0
  185. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/execution/migrations.py +0 -0
  186. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/execution/postgres.py +0 -0
  187. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/execution/sqlite.py +0 -0
  188. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/execution/store.py +0 -0
  189. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/manager.py +0 -0
  190. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/objects/__init__.py +0 -0
  191. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/objects/interfaces.py +0 -0
  192. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/objects/local.py +0 -0
  193. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/objects/s3.py +0 -0
  194. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/objects/store.py +0 -0
  195. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/queue/__init__.py +0 -0
  196. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/queue/interfaces.py +0 -0
  197. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/queue/memory.py +0 -0
  198. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/queue/postgres.py +0 -0
  199. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/queue/redis.py +0 -0
  200. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/queue/sqlite.py +0 -0
  201. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/queue/store.py +0 -0
  202. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/scheduler/__init__.py +0 -0
  203. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/scheduler/sqlite.py +0 -0
  204. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/storage/scheduler/store.py +0 -0
  205. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/telemetry/__init__.py +0 -0
  206. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/telemetry/api.py +0 -0
  207. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/telemetry/middleware.py +0 -0
  208. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/telemetry/otlp.py +0 -0
  209. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/telemetry/store.py +0 -0
  210. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/theme.py +0 -0
  211. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/tools/__init__.py +0 -0
  212. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/tools/registry.py +0 -0
  213. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/__init__.py +0 -0
  214. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/component.py +0 -0
  215. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/events.py +0 -0
  216. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/interactive.py +0 -0
  217. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/layout.py +0 -0
  218. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/library.py +0 -0
  219. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/markdown.py +0 -0
  220. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/primitives.py +0 -0
  221. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/product.py +0 -0
  222. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/state.py +0 -0
  223. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/styles/__init__.py +0 -0
  224. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/styles/presets.py +0 -0
  225. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/styles/product.py +0 -0
  226. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/styles/theme.py +0 -0
  227. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/styles/voodoo_system.py +0 -0
  228. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/ui/voodoo_system.py +0 -0
  229. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/workers/__init__.py +0 -0
  230. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/workers/queue.py +0 -0
  231. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/world/__init__.py +0 -0
  232. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/world/model.py +0 -0
  233. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/world/models.py +0 -0
  234. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/world/sqlite.py +0 -0
  235. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo/world/store.py +0 -0
  236. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo_framework.egg-info/dependency_links.txt +0 -0
  237. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo_framework.egg-info/entry_points.txt +0 -0
  238. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo_framework.egg-info/requires.txt +0 -0
  239. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/src/voodoo_framework.egg-info/top_level.txt +0 -0
  240. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_adaptive_agency_correctness.py +0 -0
  241. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_agency_runtime_truth.py +0 -0
  242. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_agent.py +0 -0
  243. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_agent_registry.py +0 -0
  244. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_agent_runtime.py +0 -0
  245. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_app.py +0 -0
  246. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_auth.py +0 -0
  247. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_capability_security.py +0 -0
  248. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_checkpoint_resume.py +0 -0
  249. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_chrome.py +0 -0
  250. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_cli.py +0 -0
  251. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_cli_fabric.py +0 -0
  252. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_cli_inspect.py +0 -0
  253. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_components.py +0 -0
  254. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_config.py +0 -0
  255. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_contract_api.py +0 -0
  256. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_create.py +0 -0
  257. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_create_store_smoke.py +0 -0
  258. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_data.py +0 -0
  259. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_design_system.py +0 -0
  260. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_durable_goal_runtime.py +0 -0
  261. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_durable_hitl.py +0 -0
  262. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_durable_workflow_runtime.py +0 -0
  263. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_edge_device.py +0 -0
  264. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_edge_e2e.py +0 -0
  265. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_edge_gateway.py +0 -0
  266. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_edge_http.py +0 -0
  267. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_edge_protocol.py +0 -0
  268. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_edge_security.py +0 -0
  269. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_edge_voodoo_store.py +0 -0
  270. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_edge_world.py +0 -0
  271. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_events.py +0 -0
  272. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_execution_sqlite_store.py +0 -0
  273. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_goal_runtime.py +0 -0
  274. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_hitl_persistence_correctness.py +0 -0
  275. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_http_runtime.py +0 -0
  276. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_human.py +0 -0
  277. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_i18n.py +0 -0
  278. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_identity_execution.py +0 -0
  279. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_identity_foundation.py +0 -0
  280. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_integration.py +0 -0
  281. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mcp.py +0 -0
  282. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mcp_runtime.py +0 -0
  283. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_memory.py +0 -0
  284. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mesh.py +0 -0
  285. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mesh_event_bus.py +0 -0
  286. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mesh_remote_auth.py +0 -0
  287. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mesh_remote_authority.py +0 -0
  288. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mesh_remote_execution.py +0 -0
  289. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mesh_remote_outcomes.py +0 -0
  290. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mesh_remote_replay.py +0 -0
  291. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_mesh_two_node_acceptance.py +0 -0
  292. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_model.py +0 -0
  293. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_node_membership.py +0 -0
  294. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_object_store.py +0 -0
  295. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_observability.py +0 -0
  296. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_operational_policy.py +0 -0
  297. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_operational_runtime_ui.py +0 -0
  298. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_persistence.py +0 -0
  299. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_planner_adaptive.py +0 -0
  300. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_primitives.py +0 -0
  301. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_product_components.py +0 -0
  302. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_protocol.py +0 -0
  303. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_protocol_fabric.py +0 -0
  304. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_protocol_operational.py +0 -0
  305. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_provider_switching.py +0 -0
  306. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_providers.py +0 -0
  307. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_public_api_3.py +0 -0
  308. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_queue.py +0 -0
  309. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_reactive.py +0 -0
  310. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_runtime.py +0 -0
  311. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_runtime_correctness.py +0 -0
  312. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_runtime_fabric.py +0 -0
  313. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_runtime_store_app_lifecycle.py +0 -0
  314. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_runtime_store_lifecycle.py +0 -0
  315. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_runtime_store_provider.py +0 -0
  316. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_runtime_transaction.py +0 -0
  317. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_scheduler.py +0 -0
  318. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_security.py +0 -0
  319. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_seo.py +0 -0
  320. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_sprint27_convergence.py +0 -0
  321. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_sprint28_acceptance.py +0 -0
  322. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_state.py +0 -0
  323. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_store_first_user_journey.py +0 -0
  324. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_store_model_backend.py +0 -0
  325. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_store_only_core_import.py +0 -0
  326. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_theme.py +0 -0
  327. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_theme_presets.py +0 -0
  328. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_tools.py +0 -0
  329. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_ui.py +0 -0
  330. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_ui_magic.py +0 -0
  331. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_ui_magic_acceptance.py +0 -0
  332. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_voodoo_store_events.py +0 -0
  333. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_voodoo_store_execution.py +0 -0
  334. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_voodoo_store_hitl_restart.py +0 -0
  335. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_voodoo_store_queue.py +0 -0
  336. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_voodoo_store_scheduler.py +0 -0
  337. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_voodoo_system_components.py +0 -0
  338. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_websocket.py +0 -0
  339. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_worker_retry_semantics.py +0 -0
  340. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_workers.py +0 -0
  341. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_world_aware_execution.py +0 -0
  342. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_world_model.py +0 -0
  343. {voodoo_framework-2.7.2 → voodoo_framework-2.8.0}/tests/test_world_sqlite.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voodoo-framework
3
- Version: 2.7.2
3
+ Version: 2.8.0
4
4
  Summary: The programmable runtime for adaptive applications and operational systems — web, APIs, agents, workers, human workflows, distributed systems, and physical systems in one runtime.
5
5
  Author-email: Helder Perez <contact@helderperez.com>
6
6
  Maintainer-email: Helder Perez <contact@helderperez.com>
@@ -105,7 +105,7 @@ from .ui.styles import (
105
105
  from .ui.styles.theme import Theme, ThemeColors, create_theme
106
106
  from .workers import task
107
107
 
108
- __version__ = "2.7.2"
108
+ __version__ = "2.8.0"
109
109
 
110
110
  __all__ = [
111
111
  # Core runtime
@@ -68,6 +68,7 @@ def render_page(component: Any, seo: Any = None) -> str:
68
68
  from voodoo.ui.styles import current_adapter
69
69
  from voodoo.ui.styles.product import generate_product_css
70
70
  from voodoo.ui.styles.system import generate_design_system_css
71
+ from voodoo.ui.styles.theme_contract import generate_design_system_theme_css
71
72
  from voodoo.ui.styles.voodoo_system import generate_voodoo_system_css
72
73
 
73
74
  adapter = current_adapter()
@@ -76,6 +77,7 @@ def render_page(component: Any, seo: Any = None) -> str:
76
77
  if is_voodoo_css:
77
78
  component_css = generate_component_css(default_theme)
78
79
  design_system_css = generate_design_system_css(default_theme)
80
+ design_system_theme_css = generate_design_system_theme_css(default_theme)
79
81
  product_css = generate_product_css(default_theme)
80
82
  voodoo_system_css = generate_voodoo_system_css(default_theme)
81
83
  head_scripts = ""
@@ -84,6 +86,7 @@ def render_page(component: Any, seo: Any = None) -> str:
84
86
  tailwind_config = default_theme.to_tailwind_config()
85
87
  component_css = ""
86
88
  design_system_css = ""
89
+ design_system_theme_css = ""
87
90
  product_css = ""
88
91
  voodoo_system_css = ""
89
92
  head_scripts = f"""
@@ -159,9 +162,12 @@ def render_page(component: Any, seo: Any = None) -> str:
159
162
  /* Stable primitive component layer */
160
163
  {component_css}
161
164
 
162
- /* Voodoo Design System 2 */
165
+ /* Voodoo Design System 3 */
163
166
  {design_system_css}
164
167
 
168
+ /* Theme-authoritative DS3 visual tokens */
169
+ {design_system_theme_css}
170
+
165
171
  /* Reusable product patterns */
166
172
  {product_css}
167
173
 
@@ -0,0 +1,530 @@
1
+ """Voodoo native design-system override layer.
2
+
3
+ The native component stylesheet provides the structural baseline. This module
4
+ owns the opinionated visual language that makes a zero-custom-CSS Voodoo app
5
+ look intentional in both light and dark themes.
6
+ """
7
+
8
+ from voodoo.ui.styles.theme import Theme
9
+
10
+
11
+ def generate_design_system_css(theme: Theme) -> str:
12
+ """Return the premium Voodoo design-system layer.
13
+
14
+ The layer is deliberately token-driven. Applications can still replace
15
+ colors and typography through Theme while keeping Voodoo's spacing,
16
+ hierarchy, focus, motion and component ergonomics coherent.
17
+ """
18
+
19
+ return """
20
+ /* ── Voodoo Design System 3 ───────────────────────────────────────── */
21
+
22
+ :root {
23
+ --vd-brand: #7c3aed;
24
+ --vd-brand-hover: #6d28d9;
25
+ --vd-brand-strong: #5b21b6;
26
+ --vd-brand-soft: color-mix(in srgb, var(--vd-brand) 10%, transparent);
27
+ --vd-brand-softer: color-mix(in srgb, var(--vd-brand) 5%, transparent);
28
+ --vd-brand-line: color-mix(in srgb, var(--vd-brand) 22%, transparent);
29
+ --vd-brand-glow: color-mix(in srgb, var(--vd-brand) 20%, transparent);
30
+
31
+ --vd-control-height-sm: 2rem;
32
+ --vd-control-height-md: 2.5rem;
33
+ --vd-control-height-lg: 2.875rem;
34
+ --vd-control-pad-x: 0.95rem;
35
+ --vd-focus-ring: color-mix(in srgb, var(--vd-brand) 28%, transparent);
36
+
37
+ --vd-canvas: #ffffff;
38
+ --vd-panel: #ffffff;
39
+ --vd-panel-subtle: #fafafa;
40
+ --vd-panel-muted: #f6f6f8;
41
+ --vd-line: #e8e8ed;
42
+ --vd-line-strong: #d9d9e2;
43
+ --vd-ink: #111118;
44
+ --vd-ink-muted: #6f6f7b;
45
+ --vd-ink-faint: #9797a3;
46
+ --vd-surface-hover: #f7f7f9;
47
+ --vd-surface-pressed: #f1f1f5;
48
+ --vd-overlay: rgb(255 255 255 / 0.82);
49
+
50
+ --vd-shadow-card: 0 1px 2px rgb(15 15 25 / 0.03), 0 8px 30px rgb(15 15 25 / 0.035);
51
+ --vd-shadow-float: 0 18px 50px rgb(15 15 25 / 0.13), 0 2px 8px rgb(15 15 25 / 0.05);
52
+ --vd-shadow-brand: 0 8px 24px color-mix(in srgb, var(--vd-brand) 20%, transparent);
53
+
54
+ --vd-content-sm: 42rem;
55
+ --vd-content-md: 56rem;
56
+ --vd-content-lg: 72rem;
57
+ --vd-content-xl: 88rem;
58
+ }
59
+
60
+ .dark {
61
+ --vd-canvas: #09090f;
62
+ --vd-panel: #101017;
63
+ --vd-panel-subtle: #0d0d13;
64
+ --vd-panel-muted: #171720;
65
+ --vd-line: #252532;
66
+ --vd-line-strong: #343444;
67
+ --vd-ink: #f7f7fb;
68
+ --vd-ink-muted: #aaaab7;
69
+ --vd-ink-faint: #777784;
70
+ --vd-surface-hover: #171720;
71
+ --vd-surface-pressed: #20202a;
72
+ --vd-overlay: rgb(9 9 15 / 0.82);
73
+
74
+ --vd-shadow-card: 0 1px 1px rgb(0 0 0 / 0.35), 0 14px 44px rgb(0 0 0 / 0.18);
75
+ --vd-shadow-float: 0 22px 64px rgb(0 0 0 / 0.5), 0 2px 12px rgb(0 0 0 / 0.25);
76
+ }
77
+
78
+ html {
79
+ background: var(--vd-canvas);
80
+ color-scheme: light;
81
+ }
82
+ html.dark { color-scheme: dark; }
83
+
84
+ body {
85
+ margin: 0;
86
+ background: var(--vd-canvas);
87
+ color: var(--vd-ink);
88
+ letter-spacing: -0.008em;
89
+ font-feature-settings: "ss01" 1, "cv01" 1, "cv02" 1;
90
+ }
91
+
92
+ #root { min-height: 100vh; }
93
+
94
+ ::selection {
95
+ background: color-mix(in srgb, var(--vd-brand) 24%, transparent);
96
+ color: var(--vd-ink);
97
+ }
98
+
99
+ :focus-visible {
100
+ outline: 2px solid var(--vd-brand);
101
+ outline-offset: 2px;
102
+ }
103
+
104
+ /* ── Typography ───────────────────────────────────────────────────── */
105
+ .vd-heading {
106
+ color: var(--vd-ink);
107
+ font-family: var(--vd-font-display);
108
+ letter-spacing: -0.032em;
109
+ text-wrap: balance;
110
+ }
111
+ .vd-heading--h1 {
112
+ font-size: clamp(2.15rem, 4vw, 3.5rem);
113
+ line-height: 1.02;
114
+ letter-spacing: -0.045em;
115
+ }
116
+ .vd-heading--h2 {
117
+ font-size: clamp(1.65rem, 2.6vw, 2.35rem);
118
+ line-height: 1.08;
119
+ }
120
+ .vd-heading--h3 { font-size: 1.35rem; line-height: 1.18; }
121
+ .vd-heading--h4 { font-size: 1.05rem; line-height: 1.25; }
122
+ .vd-paragraph {
123
+ color: var(--vd-ink-muted);
124
+ line-height: 1.7;
125
+ letter-spacing: -0.004em;
126
+ }
127
+ .vd-text { color: var(--vd-ink); }
128
+ .vd-text--muted { color: var(--vd-ink-muted); }
129
+ .vd-link,
130
+ a:not([class]) {
131
+ color: var(--vd-brand);
132
+ text-decoration: none;
133
+ text-underline-offset: 0.18em;
134
+ }
135
+ .vd-link:hover,
136
+ a:not([class]):hover { color: var(--vd-brand-hover); text-decoration: underline; }
137
+
138
+ /* ── Page geometry ───────────────────────────────────────────────── */
139
+ .vd-page {
140
+ width: 100%;
141
+ max-width: none;
142
+ margin: 0;
143
+ color: var(--vd-ink);
144
+ }
145
+ .vd-page--pad { padding: clamp(1.25rem, 3vw, 2.5rem); }
146
+ .vd-page--sm { max-width: var(--vd-content-sm); margin-inline: auto; }
147
+ .vd-page--md { max-width: var(--vd-content-md); margin-inline: auto; }
148
+ .vd-page--lg { max-width: var(--vd-content-lg); margin-inline: auto; }
149
+ .vd-page--xl { max-width: var(--vd-content-xl); margin-inline: auto; }
150
+
151
+ .vd-container { width: min(100%, var(--vd-content-xl)); }
152
+ .vd-container--centered { margin-inline: auto; }
153
+ .vd-container--sm { max-width: var(--vd-content-sm); }
154
+ .vd-container--md { max-width: var(--vd-content-md); }
155
+ .vd-container--lg { max-width: var(--vd-content-lg); }
156
+ .vd-container--xl { max-width: var(--vd-content-xl); }
157
+
158
+ .vd-grid { min-width: 0; }
159
+ .vd-flex { min-width: 0; }
160
+
161
+ /* ── Buttons ─────────────────────────────────────────────────────── */
162
+ .vd-button {
163
+ min-height: var(--vd-control-height-md);
164
+ height: var(--vd-control-height-md);
165
+ padding-inline: var(--vd-control-pad-x);
166
+ border: 1px solid var(--vd-line);
167
+ border-radius: 0.625rem;
168
+ background: var(--vd-panel);
169
+ color: var(--vd-ink);
170
+ box-shadow: 0 1px 1px rgb(15 15 25 / 0.025);
171
+ font-size: 0.875rem;
172
+ font-weight: 600;
173
+ letter-spacing: -0.01em;
174
+ transition:
175
+ background-color 140ms ease,
176
+ border-color 140ms ease,
177
+ color 140ms ease,
178
+ transform 140ms ease,
179
+ box-shadow 140ms ease,
180
+ opacity 140ms ease;
181
+ }
182
+ .vd-button:hover:not(:disabled) {
183
+ background: var(--vd-surface-hover);
184
+ border-color: var(--vd-line-strong);
185
+ }
186
+ .vd-button:active:not(:disabled) { transform: translateY(1px); }
187
+ .vd-button:focus-visible { box-shadow: 0 0 0 3px var(--vd-focus-ring); }
188
+ .vd-button:disabled { opacity: 0.42; cursor: not-allowed; }
189
+
190
+ .vd-button--primary,
191
+ .vd-button--secondary {
192
+ border-color: var(--vd-brand);
193
+ background: linear-gradient(180deg, #8b5cf6 0%, var(--vd-brand) 100%);
194
+ color: white;
195
+ box-shadow: var(--vd-shadow-brand), inset 0 1px 0 rgb(255 255 255 / 0.18);
196
+ }
197
+ .vd-button--primary:hover:not(:disabled),
198
+ .vd-button--secondary:hover:not(:disabled) {
199
+ background: linear-gradient(180deg, #8250ee 0%, var(--vd-brand-hover) 100%);
200
+ border-color: var(--vd-brand-hover);
201
+ }
202
+ .vd-button--outline { background: transparent; border-color: var(--vd-line-strong); }
203
+ .vd-button--ghost { background: transparent; border-color: transparent; color: var(--vd-ink-muted); }
204
+ .vd-button--ghost:hover:not(:disabled) { color: var(--vd-ink); background: var(--vd-brand-softer); }
205
+ .vd-button--danger { border-color: #ef4444; background: #ef4444; color: white; }
206
+ .vd-button--sm { min-height: var(--vd-control-height-sm); height: var(--vd-control-height-sm); padding-inline: 0.75rem; }
207
+ .vd-button--lg { min-height: var(--vd-control-height-lg); height: var(--vd-control-height-lg); padding-inline: 1.2rem; }
208
+ .vd-button[data-vd-loading="true"] { cursor: progress; }
209
+ .vd-button[data-vd-loading="true"]::before {
210
+ content: "";
211
+ width: 0.9em;
212
+ height: 0.9em;
213
+ border: 1.5px solid currentColor;
214
+ border-right-color: transparent;
215
+ border-radius: 50%;
216
+ animation: vd-spin 700ms linear infinite;
217
+ }
218
+
219
+ /* ── Surfaces and cards ──────────────────────────────────────────── */
220
+ .vd-card {
221
+ overflow: hidden;
222
+ background: var(--vd-panel);
223
+ border: 1px solid var(--vd-line);
224
+ border-radius: 0.875rem;
225
+ padding: clamp(1rem, 2vw, 1.35rem);
226
+ box-shadow: var(--vd-shadow-card);
227
+ }
228
+ .vd-card:hover { border-color: var(--vd-line-strong); }
229
+
230
+ .vd-divider { border-color: var(--vd-line); }
231
+
232
+ /* ── Inputs and forms ─────────────────────────────────────────────── */
233
+ .vd-form { display: grid; gap: 1rem; }
234
+ .vd-field { display: grid; gap: 0.45rem; }
235
+ .vd-field-label,
236
+ .vd-label {
237
+ color: var(--vd-ink);
238
+ font-size: 0.78rem;
239
+ font-weight: 600;
240
+ letter-spacing: -0.004em;
241
+ }
242
+ .vd-field-hint,
243
+ .vd-field-error { font-size: 0.75rem; line-height: 1.45; }
244
+ .vd-field-hint { color: var(--vd-ink-muted); }
245
+ .vd-field-error { color: #dc2626; }
246
+
247
+ .vd-input,
248
+ .vd-select,
249
+ .vd-textarea {
250
+ width: 100%;
251
+ min-height: var(--vd-control-height-md);
252
+ border: 1px solid var(--vd-line-strong);
253
+ border-radius: 0.625rem;
254
+ background: var(--vd-panel);
255
+ color: var(--vd-ink);
256
+ box-shadow: 0 1px 1px rgb(15 15 25 / 0.02);
257
+ transition: border-color 140ms ease, box-shadow 140ms ease, background-color 140ms ease;
258
+ }
259
+ .vd-input,
260
+ .vd-select { height: var(--vd-control-height-md); }
261
+ .vd-textarea { min-height: 6.5rem; resize: vertical; }
262
+ .vd-input::placeholder,
263
+ .vd-textarea::placeholder { color: var(--vd-ink-faint); }
264
+ .vd-input:hover:not(:disabled),
265
+ .vd-select:hover:not(:disabled),
266
+ .vd-textarea:hover:not(:disabled) { border-color: color-mix(in srgb, var(--vd-brand) 35%, var(--vd-line-strong)); }
267
+ .vd-input:focus-visible,
268
+ .vd-select:focus-visible,
269
+ .vd-textarea:focus-visible {
270
+ outline: none;
271
+ border-color: var(--vd-brand);
272
+ box-shadow: 0 0 0 3px var(--vd-focus-ring);
273
+ }
274
+ [aria-invalid="true"] { border-color: #ef4444 !important; }
275
+ [aria-invalid="true"]:focus-visible { box-shadow: 0 0 0 3px rgb(239 68 68 / 0.18); }
276
+
277
+ .vd-checkbox,
278
+ .vd-radio { accent-color: var(--vd-brand); }
279
+
280
+ /* ── Badges ──────────────────────────────────────────────────────── */
281
+ .vd-badge {
282
+ min-height: 1.45rem;
283
+ padding: 0.18rem 0.55rem;
284
+ border-radius: 999px;
285
+ border: 1px solid transparent;
286
+ font-size: 0.7rem;
287
+ font-weight: 650;
288
+ letter-spacing: -0.005em;
289
+ }
290
+ .vd-badge--default,
291
+ .vd-badge--primary {
292
+ background: var(--vd-brand-soft);
293
+ color: var(--vd-brand);
294
+ border-color: var(--vd-brand-line);
295
+ }
296
+ .vd-badge--secondary {
297
+ background: var(--vd-panel-muted);
298
+ color: var(--vd-ink-muted);
299
+ border-color: var(--vd-line);
300
+ }
301
+ .vd-badge--outline { background: transparent; color: var(--vd-ink); border-color: var(--vd-line-strong); }
302
+ .vd-badge--success { background: rgb(16 185 129 / 0.1); color: #059669; border-color: rgb(16 185 129 / 0.2); }
303
+ .vd-badge--warning { background: rgb(245 158 11 / 0.11); color: #b45309; border-color: rgb(245 158 11 / 0.22); }
304
+ .vd-badge--danger { background: rgb(239 68 68 / 0.1); color: #dc2626; border-color: rgb(239 68 68 / 0.2); }
305
+ .dark .vd-badge--success { color: #6ee7b7; }
306
+ .dark .vd-badge--warning { color: #fbbf24; }
307
+ .dark .vd-badge--danger { color: #fca5a5; }
308
+
309
+ /* ── Navigation ──────────────────────────────────────────────────── */
310
+ .vd-navbar {
311
+ min-height: 4rem;
312
+ padding: 0.65rem clamp(1rem, 3vw, 2rem);
313
+ background: var(--vd-overlay);
314
+ border-bottom: 1px solid var(--vd-line);
315
+ backdrop-filter: blur(18px) saturate(140%);
316
+ -webkit-backdrop-filter: blur(18px) saturate(140%);
317
+ }
318
+ .vd-navbar--sticky { position: sticky; top: 0; z-index: 60; }
319
+ .vd-brand { color: var(--vd-ink); font-weight: 720; letter-spacing: -0.025em; }
320
+ .vd-nav-link {
321
+ border-radius: 0.5rem;
322
+ color: var(--vd-ink-muted);
323
+ font-size: 0.84rem;
324
+ font-weight: 540;
325
+ text-decoration: none;
326
+ transition: background-color 140ms ease, color 140ms ease;
327
+ }
328
+ .vd-nav-link:hover { color: var(--vd-ink); background: var(--vd-surface-hover); }
329
+ .vd-nav-link--active { color: var(--vd-brand); background: var(--vd-brand-soft); }
330
+
331
+ .vd-sidebar {
332
+ background: var(--vd-panel-subtle);
333
+ border-right: 1px solid var(--vd-line);
334
+ }
335
+
336
+ /* ── Theme toggle ────────────────────────────────────────────────── */
337
+ .vd-theme-toggle {
338
+ display: inline-flex;
339
+ align-items: center;
340
+ justify-content: center;
341
+ width: 2.35rem;
342
+ height: 2.35rem;
343
+ padding: 0;
344
+ border: 1px solid var(--vd-line);
345
+ border-radius: 0.625rem;
346
+ background: var(--vd-panel);
347
+ color: var(--vd-ink-muted);
348
+ cursor: pointer;
349
+ }
350
+ .vd-theme-toggle:hover { background: var(--vd-surface-hover); color: var(--vd-ink); }
351
+
352
+ /* ── Tables ──────────────────────────────────────────────────────── */
353
+ .vd-table {
354
+ width: 100%;
355
+ overflow: hidden;
356
+ border: 1px solid var(--vd-line);
357
+ border-radius: 0.8rem;
358
+ background: var(--vd-panel);
359
+ border-collapse: separate;
360
+ border-spacing: 0;
361
+ }
362
+ .vd-table th {
363
+ color: var(--vd-ink-muted);
364
+ background: var(--vd-panel-subtle);
365
+ font-size: 0.72rem;
366
+ font-weight: 650;
367
+ text-align: left;
368
+ letter-spacing: 0.015em;
369
+ text-transform: uppercase;
370
+ }
371
+ .vd-table th,
372
+ .vd-table td { padding: 0.8rem 0.95rem; border-bottom: 1px solid var(--vd-line); }
373
+ .vd-table tr:last-child td { border-bottom: 0; }
374
+ .vd-table tbody tr:hover td { background: var(--vd-surface-hover); }
375
+
376
+ /* ── Modal / dialog / popover ────────────────────────────────────── */
377
+ .vd-modal,
378
+ .vd-dialog,
379
+ .vd-popover {
380
+ border: 1px solid var(--vd-line);
381
+ border-radius: 0.95rem;
382
+ background: var(--vd-panel);
383
+ color: var(--vd-ink);
384
+ box-shadow: var(--vd-shadow-float);
385
+ }
386
+ .vd-popover { max-inline-size: min(24rem, calc(100vw - 2rem)); padding: 1rem; }
387
+ .vd-popover::backdrop { background: transparent; }
388
+
389
+ /* ── Tooltip ─────────────────────────────────────────────────────── */
390
+ .vd-tooltip { position: relative; display: inline-flex; }
391
+ .vd-tooltip-content {
392
+ position: absolute;
393
+ z-index: 80;
394
+ inset-block-end: calc(100% + 0.5rem);
395
+ inset-inline-start: 50%;
396
+ transform: translate(-50%, 2px);
397
+ max-inline-size: 18rem;
398
+ inline-size: max-content;
399
+ padding: 0.45rem 0.65rem;
400
+ border: 1px solid var(--vd-line-strong);
401
+ border-radius: 0.45rem;
402
+ background: var(--vd-ink);
403
+ color: var(--vd-canvas);
404
+ box-shadow: var(--vd-shadow-card);
405
+ font-size: 0.72rem;
406
+ line-height: 1.4;
407
+ opacity: 0;
408
+ visibility: hidden;
409
+ pointer-events: none;
410
+ transition: opacity 120ms ease, transform 120ms ease;
411
+ }
412
+ .vd-tooltip:hover .vd-tooltip-content,
413
+ .vd-tooltip:focus-within .vd-tooltip-content {
414
+ opacity: 1;
415
+ visibility: visible;
416
+ transform: translate(-50%, 0);
417
+ }
418
+
419
+ /* ── Switch ──────────────────────────────────────────────────────── */
420
+ .vd-switch { display: inline-flex; align-items: center; gap: 0.75rem; position: relative; }
421
+ .vd-switch-input {
422
+ position: absolute;
423
+ inline-size: 1px;
424
+ block-size: 1px;
425
+ opacity: 0;
426
+ pointer-events: none;
427
+ }
428
+ .vd-switch-track {
429
+ inline-size: 2.25rem;
430
+ block-size: 1.25rem;
431
+ padding: 2px;
432
+ border-radius: 999px;
433
+ background: var(--vd-panel-muted);
434
+ border: 1px solid var(--vd-line-strong);
435
+ transition: background 140ms ease, border-color 140ms ease;
436
+ cursor: pointer;
437
+ }
438
+ .vd-switch-thumb {
439
+ display: block;
440
+ inline-size: 0.875rem;
441
+ block-size: 0.875rem;
442
+ border-radius: 50%;
443
+ background: var(--vd-ink-muted);
444
+ box-shadow: 0 1px 2px rgb(0 0 0 / 0.16);
445
+ transition: transform 140ms ease, background 140ms ease;
446
+ }
447
+ .vd-switch-input:checked + .vd-switch-track { background: var(--vd-brand); border-color: var(--vd-brand); }
448
+ .vd-switch-input:checked + .vd-switch-track .vd-switch-thumb { transform: translateX(1rem); background: white; }
449
+ .vd-switch-input:focus-visible + .vd-switch-track { box-shadow: 0 0 0 3px var(--vd-focus-ring); }
450
+ .vd-switch-copy { display: grid; gap: 0.125rem; cursor: pointer; }
451
+ .vd-switch-label { font-size: 0.84rem; font-weight: 600; }
452
+ .vd-switch-description { color: var(--vd-ink-muted); font-size: 0.74rem; }
453
+
454
+ /* ── Skeleton ────────────────────────────────────────────────────── */
455
+ .vd-skeleton { display: grid; gap: 0.5rem; min-inline-size: 4rem; }
456
+ .vd-skeleton-line {
457
+ display: block;
458
+ min-block-size: 0.8rem;
459
+ border-radius: 0.35rem;
460
+ background: linear-gradient(90deg, var(--vd-panel-muted), var(--vd-surface-hover), var(--vd-panel-muted));
461
+ background-size: 220% 100%;
462
+ animation: vd-skeleton 1.35s ease-in-out infinite;
463
+ }
464
+ .vd-skeleton-line--2 { inline-size: 86%; }
465
+ .vd-skeleton-line--3 { inline-size: 68%; }
466
+
467
+ /* ── Product/system surfaces ─────────────────────────────────────── */
468
+ .vd-metric,
469
+ .vd-status-badge,
470
+ .vd-inspector-panel,
471
+ .vd-command-bar,
472
+ .vd-runtime-status,
473
+ .vd-agent-status,
474
+ .vd-device-card,
475
+ .vd-execution-status,
476
+ .vd-telemetry-panel {
477
+ --vd-local-border: var(--vd-line);
478
+ }
479
+
480
+ .vd-metric,
481
+ .vd-inspector-panel,
482
+ .vd-runtime-status,
483
+ .vd-agent-status,
484
+ .vd-device-card,
485
+ .vd-telemetry-panel {
486
+ background: var(--vd-panel);
487
+ border-color: var(--vd-line);
488
+ box-shadow: var(--vd-shadow-card);
489
+ }
490
+
491
+ /* ── App-shell helpers ────────────────────────────────────────────── */
492
+ .vd-header,
493
+ .vd-footer { border-color: var(--vd-line); }
494
+ .vd-main { min-width: 0; }
495
+ .vd-section { min-width: 0; }
496
+
497
+ /* Density remains an application choice, not a second component set. */
498
+ [data-vd-density="compact"] {
499
+ --vd-control-height-md: 2.125rem;
500
+ --vd-control-pad-x: 0.75rem;
501
+ }
502
+ [data-vd-density="compact"] .vd-page { font-size: 0.875rem; }
503
+
504
+ @keyframes vd-spin { to { transform: rotate(360deg); } }
505
+ @keyframes vd-skeleton {
506
+ 0% { background-position: 100% 0; }
507
+ 100% { background-position: -100% 0; }
508
+ }
509
+
510
+ @media (max-width: 760px) {
511
+ .vd-page--pad { padding: 1rem; }
512
+ .vd-card { border-radius: 0.75rem; padding: 1rem; }
513
+ .vd-navbar { min-height: 3.5rem; padding-inline: 1rem; }
514
+ }
515
+
516
+ @media (prefers-reduced-motion: reduce) {
517
+ *, *::before, *::after {
518
+ scroll-behavior: auto !important;
519
+ animation-duration: 0.01ms !important;
520
+ animation-iteration-count: 1 !important;
521
+ transition-duration: 0.01ms !important;
522
+ }
523
+ }
524
+
525
+ @media (pointer: coarse) {
526
+ .vd-button,
527
+ .vd-input,
528
+ .vd-select { min-height: 2.75rem; }
529
+ }
530
+ """