create-yss-spec 1.1.2 → 1.1.4

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 (278) hide show
  1. package/package.json +1 -1
  2. package/template/.agents/skills/excalidraw-diagram-generator/SKILL.md +3 -3
  3. package/template/.agents/skills/grill-me/SKILL.md +7 -0
  4. package/template/.agents/skills/grilling/SKILL.md +12 -0
  5. package/template/.agents/skills/handoff/SKILL.md +16 -0
  6. package/template/.agents/skills/to-issues/SKILL.md +2 -2
  7. package/template/.claude/skills/grill-me/SKILL.md +7 -0
  8. package/template/.claude/skills/grilling/SKILL.md +12 -0
  9. package/template/.claude/skills/handoff/SKILL.md +16 -0
  10. package/template/.claude/skills/to-issues/SKILL.md +2 -2
  11. package/template/.codex/skills/cross-repo-implementation-routing/SKILL.md +1 -1
  12. package/template/.codex/skills/data-analytics/.app.json +84 -0
  13. package/template/.codex/skills/data-analytics/.codex-plugin/plugin.json +66 -0
  14. package/template/.codex/skills/data-analytics/.mcp.json +30 -0
  15. package/template/.codex/skills/data-analytics/AGENTS.md +20 -0
  16. package/template/.codex/skills/data-analytics/DEPENDENCIES.MD +27 -0
  17. package/template/.codex/skills/data-analytics/README.md +60 -0
  18. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html +16 -0
  19. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part001 +1 -0
  20. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part002 +1 -0
  21. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part003 +1 -0
  22. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part004 +1 -0
  23. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part005 +1 -0
  24. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part006 +1 -0
  25. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html +16 -0
  26. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part001 +1 -0
  27. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part002 +1 -0
  28. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part003 +1 -0
  29. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part004 +1 -0
  30. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part005 +1 -0
  31. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part006 +1 -0
  32. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part007 +1 -0
  33. package/template/.codex/skills/data-analytics/assets/datascience-small.svg +5 -0
  34. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html +16 -0
  35. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part001 +1 -0
  36. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part002 +1 -0
  37. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part003 +1 -0
  38. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part004 +1 -0
  39. package/template/.codex/skills/data-analytics/assets/datascience.png +0 -0
  40. package/template/.codex/skills/data-analytics/assets/datascience.svg +10 -0
  41. package/template/.codex/skills/data-analytics/mcp/server.cjs +2963 -0
  42. package/template/.codex/skills/data-analytics/package-lock.json +3048 -0
  43. package/template/.codex/skills/data-analytics/package.json +43 -0
  44. package/template/.codex/skills/data-analytics/scripts/normalize-widget-assets.mjs +75 -0
  45. package/template/.codex/skills/data-analytics/skills/analyze-data-quality/SKILL.md +160 -0
  46. package/template/.codex/skills/data-analytics/skills/analyze-data-quality/agents/openai.yaml +6 -0
  47. package/template/.codex/skills/data-analytics/skills/build-dashboard/SKILL.md +148 -0
  48. package/template/.codex/skills/data-analytics/skills/build-dashboard/agents/openai.yaml +6 -0
  49. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/bi-platform-dashboard.md +18 -0
  50. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/html-dashboard.md +24 -0
  51. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/mcp-artifact-dashboard.md +71 -0
  52. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/streamlit-dashboard.md +85 -0
  53. package/template/.codex/skills/data-analytics/skills/build-report/SKILL.md +207 -0
  54. package/template/.codex/skills/data-analytics/skills/build-report/agents/openai.yaml +6 -0
  55. package/template/.codex/skills/data-analytics/skills/build-report/assets/executive-report-shell.html +70 -0
  56. package/template/.codex/skills/data-analytics/skills/build-report/assets/technical-report-shell.html +66 -0
  57. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/SKILL.md +118 -0
  58. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/agents/openai.yaml +6 -0
  59. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/__init__.py +1 -0
  60. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/cli.py +57 -0
  61. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/constants.py +61 -0
  62. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/docx_writer.py +362 -0
  63. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/html_parser.py +829 -0
  64. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/model.py +30 -0
  65. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/plan.py +129 -0
  66. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/quality.py +374 -0
  67. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/rendering.py +613 -0
  68. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/table_utils.py +54 -0
  69. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/utils.py +16 -0
  70. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc_plan.py +9 -0
  71. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/SKILL.md +78 -0
  72. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/agents/openai.yaml +6 -0
  73. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/scripts/report_to_google_slides.py +2379 -0
  74. package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/SKILL.md +88 -0
  75. package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/agents/openai.yaml +6 -0
  76. package/template/.codex/skills/data-analytics/skills/build-report/specifications/executive-report.md +97 -0
  77. package/template/.codex/skills/data-analytics/skills/build-report/specifications/mcp-app-report.md +59 -0
  78. package/template/.codex/skills/data-analytics/skills/build-report/specifications/technical-report.md +75 -0
  79. package/template/.codex/skills/data-analytics/skills/design-kpis/SKILL.md +103 -0
  80. package/template/.codex/skills/data-analytics/skills/design-kpis/agents/openai.yaml +6 -0
  81. package/template/.codex/skills/data-analytics/skills/gather-business-context/SKILL.md +68 -0
  82. package/template/.codex/skills/data-analytics/skills/gather-business-context/agents/openai.yaml +6 -0
  83. package/template/.codex/skills/data-analytics/skills/index/SKILL.md +251 -0
  84. package/template/.codex/skills/data-analytics/skills/index/agents/openai.yaml +6 -0
  85. package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/SKILL.md +131 -0
  86. package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/agents/openai.yaml +6 -0
  87. package/template/.codex/skills/data-analytics/skills/kpi-reporting/SKILL.md +141 -0
  88. package/template/.codex/skills/data-analytics/skills/kpi-reporting/agents/openai.yaml +6 -0
  89. package/template/.codex/skills/data-analytics/skills/kpi-reporting/references/report-templates.md +32 -0
  90. package/template/.codex/skills/data-analytics/skills/market-sizing/SKILL.md +106 -0
  91. package/template/.codex/skills/data-analytics/skills/market-sizing/agents/openai.yaml +6 -0
  92. package/template/.codex/skills/data-analytics/skills/metric-diagnostics/SKILL.md +130 -0
  93. package/template/.codex/skills/data-analytics/skills/metric-diagnostics/agents/openai.yaml +6 -0
  94. package/template/.codex/skills/data-analytics/skills/product-business-analysis/SKILL.md +141 -0
  95. package/template/.codex/skills/data-analytics/skills/product-business-analysis/agents/openai.yaml +6 -0
  96. package/template/.codex/skills/data-analytics/skills/spreadsheets/SKILL.md +178 -0
  97. package/template/.codex/skills/data-analytics/skills/spreadsheets/agents/openai.yaml +9 -0
  98. package/template/.codex/skills/data-analytics/skills/spreadsheets/assets/file-spreadsheet.png +0 -0
  99. package/template/.codex/skills/data-analytics/skills/spreadsheets/charts.md +31 -0
  100. package/template/.codex/skills/data-analytics/skills/spreadsheets/references/artifact_tool_api.md +466 -0
  101. package/template/.codex/skills/data-analytics/skills/spreadsheets/style_guidelines.md +99 -0
  102. package/template/.codex/skills/data-analytics/skills/user-context/SKILL.md +195 -0
  103. package/template/.codex/skills/data-analytics/skills/user-context/agents/openai.yaml +6 -0
  104. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/automation-config.md +26 -0
  105. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/source-category-config.json +51 -0
  106. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/user-context-config.md +66 -0
  107. package/template/.codex/skills/data-analytics/skills/user-context/references/automation.md +69 -0
  108. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-examples.md +204 -0
  109. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-state-template.json +87 -0
  110. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding.md +497 -0
  111. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/connector-playbook.md +74 -0
  112. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/setup.md +65 -0
  113. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/skill-template.md +160 -0
  114. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/source-intake.md +75 -0
  115. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/weekly-polling-automation.md +96 -0
  116. package/template/.codex/skills/data-analytics/skills/user-context/references/source-category-runtime.md +263 -0
  117. package/template/.codex/skills/data-analytics/skills/user-context/scripts/data_analytics_preflight.py +1460 -0
  118. package/template/.codex/skills/data-analytics/skills/user-context/scripts/init_user_context_state.py +128 -0
  119. package/template/.codex/skills/data-analytics/skills/user-context/scripts/reset_user_context_state.py +101 -0
  120. package/template/.codex/skills/data-analytics/skills/user-context/scripts/validate_user_context_preflight.py +499 -0
  121. package/template/.codex/skills/data-analytics/skills/user-context/tests/test_state_helpers.py +978 -0
  122. package/template/.codex/skills/data-analytics/skills/validate-data/SKILL.md +190 -0
  123. package/template/.codex/skills/data-analytics/skills/validate-data/agents/openai.yaml +6 -0
  124. package/template/.codex/skills/data-analytics/skills/visualize-data/SKILL.md +157 -0
  125. package/template/.codex/skills/data-analytics/skills/visualize-data/agents/openai.yaml +6 -0
  126. package/template/.codex/skills/data-analytics/skills/visualize-data/references/seaborn-templates.md +774 -0
  127. package/template/.codex/skills/data-analytics/src/DESIGN.md +222 -0
  128. package/template/.codex/skills/data-analytics/src/analytics-app/App.tsx +3666 -0
  129. package/template/.codex/skills/data-analytics/src/analytics-app/analytics-layout.test.mjs +136 -0
  130. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartFrame.tsx +54 -0
  131. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartLegend.tsx +96 -0
  132. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartRenderer.tsx +1647 -0
  133. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartTooltip.tsx +245 -0
  134. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-app-helpers.tsx +462 -0
  135. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-capabilities.ts +107 -0
  136. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-compatibility.ts +164 -0
  137. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-contract.ts +192 -0
  138. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-theme.ts +203 -0
  139. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-tokens.css +619 -0
  140. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-transforms.ts +402 -0
  141. package/template/.codex/skills/data-analytics/src/analytics-app/fonts/SystemSansVariableVF.woff2 +0 -0
  142. package/template/.codex/skills/data-analytics/src/analytics-app/imageExport.ts +370 -0
  143. package/template/.codex/skills/data-analytics/src/analytics-app/layout/AnalyticsLayoutCanvas.tsx +536 -0
  144. package/template/.codex/skills/data-analytics/src/analytics-app/layout/RichMarkdown.tsx +681 -0
  145. package/template/.codex/skills/data-analytics/src/analytics-app/layout/analyticsLayoutCore.ts +164 -0
  146. package/template/.codex/skills/data-analytics/src/analytics-app/main.tsx +21 -0
  147. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/chart_contract.py +472 -0
  148. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/check_analytics_app_runtime_links.py +75 -0
  149. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/design_contract.py +142 -0
  150. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/package_utils.py +142 -0
  151. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/tests/test_package_utils.py +377 -0
  152. package/template/.codex/skills/data-analytics/src/analytics-app/styles.css +3468 -0
  153. package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.d.ts +44 -0
  154. package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.jsx +639 -0
  155. package/template/.codex/skills/data-analytics/src/analytics-app/tables/data-table.css +327 -0
  156. package/template/.codex/skills/data-analytics/src/analytics-app/tokens.css +225 -0
  157. package/template/.codex/skills/data-analytics/src/analytics-app/types.ts +204 -0
  158. package/template/.codex/skills/data-analytics/src/analytics-app-core.md +85 -0
  159. package/template/.codex/skills/data-analytics/src/codex-style-contract.md +30 -0
  160. package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.html +12 -0
  161. package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.jsx +1008 -0
  162. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.css +2117 -0
  163. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.html +122 -0
  164. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.js +3588 -0
  165. package/template/.codex/skills/data-analytics/src/datascience-table-widget.css +483 -0
  166. package/template/.codex/skills/data-analytics/src/datascience-table-widget.html +32 -0
  167. package/template/.codex/skills/data-analytics/src/datascience-table-widget.js +333 -0
  168. package/template/.codex/skills/data-analytics/src/mcp-host.js +153 -0
  169. package/template/.codex/skills/data-analytics/src/recharts-config.js +315 -0
  170. package/template/.codex/skills/data-analytics/src/recharts-renderer.jsx +294 -0
  171. package/template/.codex/skills/data-analytics/src/sql-source-view.css +33 -0
  172. package/template/.codex/skills/data-analytics/src/sql-source-view.js +157 -0
  173. package/template/.codex/skills/data-analytics/src/styles/codex-theme.css +121 -0
  174. package/template/.codex/skills/data-analytics/src/table-renderer.jsx +28 -0
  175. package/template/.codex/skills/data-analytics/tests/chart-transforms.test.mjs +87 -0
  176. package/template/.codex/skills/data-analytics/tests/funnel-smoke.html +105 -0
  177. package/template/.codex/skills/data-analytics/tests/inline-widget-compare.html +233 -0
  178. package/template/.codex/skills/data-analytics/tests/mcp-server.test.mjs +1500 -0
  179. package/template/.codex/skills/data-analytics/tests/native-style-contract.test.mjs +219 -0
  180. package/template/.codex/skills/data-analytics/tests/recharts-config.test.mjs +144 -0
  181. package/template/.codex/skills/data-analytics/tests/recharts-renderer.test.mjs +11 -0
  182. package/template/.codex/skills/data-analytics/tests/rich-markdown.test.mjs +54 -0
  183. package/template/.codex/skills/data-analytics/tests/widget-render-harness.html +321 -0
  184. package/template/.codex/skills/data-analytics/tsconfig.json +19 -0
  185. package/template/.codex/skills/data-analytics/vite.config.ts +46 -0
  186. package/template/.codex/skills/product-design/.app.json +7 -0
  187. package/template/.codex/skills/product-design/.codex-plugin/plugin.json +50 -0
  188. package/template/.codex/skills/product-design/README.md +50 -0
  189. package/template/.codex/skills/product-design/agents/openai.yaml +4 -0
  190. package/template/.codex/skills/product-design/assets/composerIcon.svg +9 -0
  191. package/template/.codex/skills/product-design/assets/logo.png +0 -0
  192. package/template/.codex/skills/product-design/package.json +11 -0
  193. package/template/.codex/skills/product-design/references/browser-order.md +9 -0
  194. package/template/.codex/skills/product-design/references/communication-protocol.md +45 -0
  195. package/template/.codex/skills/product-design/references/critical-overrides.md +58 -0
  196. package/template/.codex/skills/product-design/references/local-prototype-preflight.md +16 -0
  197. package/template/.codex/skills/product-design/scripts/bootstrap-prototype.mjs +147 -0
  198. package/template/.codex/skills/product-design/skills/audit/SKILL.md +159 -0
  199. package/template/.codex/skills/product-design/skills/audit/agents/openai.yaml +6 -0
  200. package/template/.codex/skills/product-design/skills/audit/references/design-audit-framework.md +73 -0
  201. package/template/.codex/skills/product-design/skills/design-qa/SKILL.md +133 -0
  202. package/template/.codex/skills/product-design/skills/design-qa/agents/openai.yaml +6 -0
  203. package/template/.codex/skills/product-design/skills/design-qa/references/qa-rubric.md +61 -0
  204. package/template/.codex/skills/product-design/skills/get-context/SKILL.md +81 -0
  205. package/template/.codex/skills/product-design/skills/get-context/agents/openai.yaml +6 -0
  206. package/template/.codex/skills/product-design/skills/ideate/SKILL.md +179 -0
  207. package/template/.codex/skills/product-design/skills/ideate/agents/openai.yaml +6 -0
  208. package/template/.codex/skills/product-design/skills/image-to-code/SKILL.md +105 -0
  209. package/template/.codex/skills/product-design/skills/image-to-code/agents/openai.yaml +6 -0
  210. package/template/.codex/skills/product-design/skills/index/SKILL.md +126 -0
  211. package/template/.codex/skills/product-design/skills/index/agents/openai.yaml +6 -0
  212. package/template/.codex/skills/product-design/skills/prototype/SKILL.md +128 -0
  213. package/template/.codex/skills/product-design/skills/prototype/agents/openai.yaml +6 -0
  214. package/template/.codex/skills/product-design/skills/prototype/references/existing-codebase-edits.md +18 -0
  215. package/template/.codex/skills/product-design/skills/research/SKILL.md +92 -0
  216. package/template/.codex/skills/product-design/skills/research/agents/openai.yaml +6 -0
  217. package/template/.codex/skills/product-design/skills/share/SKILL.md +41 -0
  218. package/template/.codex/skills/product-design/skills/share/agents/openai.yaml +6 -0
  219. package/template/.codex/skills/product-design/skills/url-to-code/SKILL.md +124 -0
  220. package/template/.codex/skills/product-design/skills/url-to-code/agents/openai.yaml +6 -0
  221. package/template/.codex/skills/product-design/skills/user-context/SKILL.md +147 -0
  222. package/template/.codex/skills/product-design/skills/user-context/agents/openai.yaml +6 -0
  223. package/template/.codex/skills/product-design/skills/user-context/plugin-author-config/user-context-template.md +63 -0
  224. package/template/.codex/skills/product-design/skills/user-context/references/onboarding.md +66 -0
  225. package/template/.codex/skills/product-design/skills/user-context/scripts/init_user_context.py +86 -0
  226. package/template/.codex/skills/product-design/skills/user-context/scripts/user_context_preflight.py +204 -0
  227. package/template/.codex/skills/product-design/templates/prototype/AGENTS.md +7 -0
  228. package/template/.codex/skills/product-design/templates/prototype/index.html +12 -0
  229. package/template/.codex/skills/product-design/templates/prototype/package.json +18 -0
  230. package/template/.codex/skills/product-design/templates/prototype/src/App.jsx +5 -0
  231. package/template/.codex/skills/product-design/templates/prototype/src/main.jsx +10 -0
  232. package/template/.codex/skills/product-design/templates/prototype/src/styles.css +13 -0
  233. package/template/.codex/skills/product-design/templates/prototype/vite.config.mjs +14 -0
  234. package/template/.codex/skills/product-design-prototype/SKILL.md +1 -1
  235. package/template/.codex/skills/yss-api-integration/SKILL.md +1 -1
  236. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  237. package/template/.codex/skills/yss-filerunner/SKILL.md +1 -1
  238. package/template/.codex/skills/yss-openapi/SKILL.md +1 -1
  239. package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +1 -1
  240. package/template/.codex/skills/yss-openapi-governance/SKILL.md +3 -3
  241. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +23 -7
  242. package/template/.codex/skills/yss-router/SKILL.md +1 -2
  243. package/template/.codex/skills/yss-router/references/boundaries.md +0 -1
  244. package/template/.codex/skills/yss-source-index/references/source-map-config.md +0 -1
  245. package/template/.codex/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -3
  246. package/template/.hermes/skills/grill-me/SKILL.md +7 -0
  247. package/template/.hermes/skills/grilling/SKILL.md +12 -0
  248. package/template/.hermes/skills/handoff/SKILL.md +16 -0
  249. package/template/.hermes/skills/to-issues/SKILL.md +2 -2
  250. package/template/.pi/skills/grill-me/SKILL.md +7 -0
  251. package/template/.pi/skills/grilling/SKILL.md +12 -0
  252. package/template/.pi/skills/handoff/SKILL.md +16 -0
  253. package/template/.pi/skills/to-issues/SKILL.md +2 -2
  254. package/template/.trae/skills/grill-me/SKILL.md +7 -0
  255. package/template/.trae/skills/grilling/SKILL.md +12 -0
  256. package/template/.trae/skills/handoff/SKILL.md +16 -0
  257. package/template/.trae/skills/to-issues/SKILL.md +2 -2
  258. package/template/AGENTS.md +11 -3
  259. package/template/docs/adr/adr-product-design-prototype-entrypoint.md +54 -0
  260. package/template/docs/api/templates/openapi-draft-review-checklist.md +4 -2
  261. package/template/docs/design/README.md +8 -4
  262. package/template/docs/design/templates/interaction-spec-template.md +4 -1
  263. package/template/docs/design/templates/prototype-confirmation-template.md +57 -0
  264. package/template/docs/design/templates/prototype-review-checklist.md +6 -2
  265. package/template/docs/design/templates/state-matrix-template.md +1 -1
  266. package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +22 -3
  267. package/template/docs/process/harness-executive-blueprint.md +2 -1
  268. package/template/docs/process/harness-process-tailoring.md +8 -1
  269. package/template/docs/process/harness-work-unit-map.md +1 -1
  270. package/template/docs/process/lifecycle-artifact-map.md +17 -8
  271. package/template/docs/process/product-prototype-workflow.md +82 -0
  272. package/template/docs/user-guide/product-lifecycle-workflow.md +2 -2
  273. package/template/docs/user-guide/product-rd-lifecycle-best-practices.md +15 -10
  274. package/template/scripts/verify-template +0 -14
  275. package/template/skills-lock.json +70 -27
  276. package/template/.codex/skills/yss-anti-scheduler/SKILL.md +0 -53
  277. package/template/.codex/skills/yss-anti-scheduler/agents/openai.yaml +0 -4
  278. package/template/.codex/skills/yss-anti-scheduler/references/source-index.md +0 -157
@@ -0,0 +1,2117 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+
5
+ [hidden] {
6
+ display: none !important;
7
+ }
8
+
9
+ :root {
10
+ --ds-chip-border: var(--border-neutral-outline-default, rgba(13, 13, 13, 0.12));
11
+ --ds-chip-text: var(--text-neutral-outline-default, var(--ds-text-secondary));
12
+ --ds-chip-hover-bg: var(--color-background-primary-ghost-hover, rgba(13, 13, 13, 0.04));
13
+ --ds-chip-hover-text: var(--ds-text-primary);
14
+ --ds-segmented-bg: var(--surface-tertiary, var(--ds-surface-tertiary));
15
+ --ds-segmented-active-bg: var(--color-surface-default, var(--ds-surface));
16
+ --ds-segmented-active-shadow: 0 1px 2px -1px rgba(0, 0, 0, 0.08);
17
+ --ds-code-container-bg: rgba(232, 232, 232, 0.2);
18
+ }
19
+
20
+ @media (prefers-color-scheme: dark) {
21
+ :root:not([data-theme="light"]) {
22
+ --ds-chip-border: var(--ds-border-strong);
23
+ --ds-chip-text: var(--ds-text-secondary);
24
+ --ds-chip-hover-bg: var(--ds-menu-hover-bg);
25
+ --ds-chip-hover-text: var(--ds-text-primary);
26
+ --ds-segmented-bg: var(--ds-surface-tertiary);
27
+ --ds-segmented-active-bg: var(--ds-surface);
28
+ --ds-segmented-active-shadow: none;
29
+ --ds-code-container-bg: color-mix(in srgb, var(--ds-surface) 76%, white 8%);
30
+ }
31
+ }
32
+
33
+ :root[data-theme="dark"] {
34
+ --ds-chip-border: var(--ds-border-strong);
35
+ --ds-chip-text: var(--ds-text-secondary);
36
+ --ds-chip-hover-bg: var(--ds-menu-hover-bg);
37
+ --ds-chip-hover-text: var(--ds-text-primary);
38
+ --ds-segmented-bg: var(--ds-surface-tertiary);
39
+ --ds-segmented-active-bg: var(--ds-surface);
40
+ --ds-segmented-active-shadow: none;
41
+ --ds-code-container-bg: color-mix(in srgb, var(--ds-surface) 76%, white 8%);
42
+ }
43
+
44
+ html {
45
+ min-height: 0;
46
+ overflow: clip;
47
+ -webkit-font-smoothing: antialiased;
48
+ -moz-osx-font-smoothing: grayscale;
49
+ text-rendering: optimizeLegibility;
50
+ }
51
+
52
+ html:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) {
53
+ min-height: 100%;
54
+ overflow: auto;
55
+ background: var(--ds-bg);
56
+ }
57
+
58
+ body {
59
+ margin: 0;
60
+ min-height: 0;
61
+ overflow: clip;
62
+ background: transparent;
63
+ color: var(--ds-text);
64
+ font-synthesis: none;
65
+ font: 14px/1.45 var(--ds-font);
66
+ letter-spacing: 0;
67
+ -webkit-font-smoothing: antialiased;
68
+ -moz-osx-font-smoothing: grayscale;
69
+ text-rendering: optimizeLegibility;
70
+ }
71
+
72
+ body:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) {
73
+ height: auto;
74
+ min-height: 100vh;
75
+ overflow: auto;
76
+ background: var(--ds-bg);
77
+ }
78
+
79
+ html[data-display-mode="modal"],
80
+ body[data-display-mode="modal"] {
81
+ height: 100%;
82
+ min-height: 100%;
83
+ overflow: hidden;
84
+ }
85
+
86
+ .widget {
87
+ overflow: clip;
88
+ border: 0;
89
+ border-radius: 0;
90
+ background: transparent;
91
+ box-shadow: none;
92
+ }
93
+
94
+ .widget:not([data-display-mode="fullscreen"]):not([data-display-mode="modal"]) {
95
+ padding: 16px;
96
+ }
97
+
98
+ header {
99
+ padding: 0 0 16px;
100
+ border-bottom: 0;
101
+ background: transparent;
102
+ box-shadow: none;
103
+ }
104
+
105
+ .detail-topbar,
106
+ .detail-title-section {
107
+ display: none;
108
+ }
109
+
110
+ .title-row {
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: space-between;
114
+ gap: 16px;
115
+ }
116
+
117
+ h1 {
118
+ min-width: 0;
119
+ overflow: hidden;
120
+ margin: 0;
121
+ color: var(--ds-text-primary);
122
+ font-size: 16px;
123
+ font-weight: 500;
124
+ line-height: 24px;
125
+ letter-spacing: -0.01px;
126
+ text-overflow: ellipsis;
127
+ white-space: nowrap;
128
+ }
129
+
130
+ .subtitle,
131
+ .source-note {
132
+ margin: 4px 0 0;
133
+ color: var(--ds-text-muted);
134
+ font-size: 14px;
135
+ font-weight: 400;
136
+ line-height: 22px;
137
+ letter-spacing: -0.14px;
138
+ max-width: 980px;
139
+ }
140
+
141
+ select:focus-visible,
142
+ button:focus-visible {
143
+ outline: 2px solid var(--ds-blue-bright);
144
+ outline-offset: 2px;
145
+ }
146
+
147
+ button,
148
+ input,
149
+ select {
150
+ font-synthesis: none;
151
+ -webkit-font-smoothing: antialiased;
152
+ -moz-osx-font-smoothing: grayscale;
153
+ text-rendering: optimizeLegibility;
154
+ }
155
+
156
+ .top-bar-button,
157
+ .display-mode-button {
158
+ display: inline-flex;
159
+ flex: 0 0 auto;
160
+ align-items: center;
161
+ justify-content: center;
162
+ gap: 6px;
163
+ min-height: 32px;
164
+ border: 1px solid var(--ds-border-subtle);
165
+ border-radius: var(--ds-radius-pill);
166
+ padding: 0 12px;
167
+ background: transparent;
168
+ color: var(--ds-text);
169
+ cursor: pointer;
170
+ font: inherit;
171
+ font-size: 14px;
172
+ font-weight: 500;
173
+ line-height: 22px;
174
+ letter-spacing: -0.14px;
175
+ }
176
+
177
+ .display-mode-button svg {
178
+ display: block;
179
+ width: 14px;
180
+ height: 14px;
181
+ fill: currentColor;
182
+ stroke: currentColor;
183
+ }
184
+
185
+ .display-mode-button-label {
186
+ white-space: nowrap;
187
+ }
188
+
189
+ .top-bar-button:hover,
190
+ .top-bar-button[aria-expanded="true"],
191
+ .display-mode-button:hover {
192
+ background: var(--ds-menu-hover-bg);
193
+ color: var(--ds-text);
194
+ }
195
+
196
+ .detail-action-button {
197
+ display: inline-flex;
198
+ flex: 0 0 auto;
199
+ align-items: center;
200
+ justify-content: center;
201
+ gap: 6px;
202
+ min-height: 32px;
203
+ border: 1px solid var(--ds-border-subtle);
204
+ border-radius: var(--ds-radius-pill);
205
+ padding: 0 12px;
206
+ background: transparent;
207
+ color: var(--ds-text);
208
+ cursor: pointer;
209
+ font: inherit;
210
+ font-size: 14px;
211
+ font-weight: 500;
212
+ line-height: 22px;
213
+ letter-spacing: -0.14px;
214
+ white-space: nowrap;
215
+ }
216
+
217
+ .detail-action-button:hover {
218
+ background: var(--ds-menu-hover-bg);
219
+ color: var(--ds-text);
220
+ }
221
+
222
+ .detail-action-button svg {
223
+ display: block;
224
+ width: 16px;
225
+ height: 16px;
226
+ stroke: currentColor;
227
+ stroke-width: 2;
228
+ stroke-linecap: round;
229
+ stroke-linejoin: round;
230
+ }
231
+
232
+ .display-mode-button[disabled] {
233
+ cursor: default;
234
+ opacity: 0.45;
235
+ }
236
+
237
+ .controls {
238
+ display: flex;
239
+ flex-wrap: wrap;
240
+ align-content: flex-start;
241
+ align-items: center;
242
+ gap: 6px 10px;
243
+ padding: 0;
244
+ background: transparent;
245
+ }
246
+
247
+ .controls[hidden],
248
+ .controls:empty {
249
+ display: none !important;
250
+ border-bottom: 0;
251
+ padding: 0;
252
+ }
253
+
254
+ .control-group {
255
+ display: inline-flex;
256
+ flex: 0 0 auto;
257
+ align-items: center;
258
+ gap: 6px;
259
+ }
260
+
261
+ .control-label {
262
+ color: var(--ds-text-muted);
263
+ font-size: 14px;
264
+ font-weight: 500;
265
+ }
266
+
267
+ select,
268
+ .toggle-button {
269
+ min-height: 32px;
270
+ border: 1px solid var(--ds-border-strong);
271
+ border-radius: var(--ds-radius-pill);
272
+ background: transparent;
273
+ color: var(--ds-text);
274
+ font: inherit;
275
+ font-size: 14px;
276
+ font-weight: 500;
277
+ }
278
+
279
+ select {
280
+ max-width: min(280px, 62vw);
281
+ padding: 0 26px 0 8px;
282
+ }
283
+
284
+ .segmented {
285
+ display: inline-flex;
286
+ overflow: hidden;
287
+ border: 1px solid var(--ds-border-strong);
288
+ border-radius: var(--ds-radius-pill);
289
+ }
290
+
291
+ .segmented .toggle-button {
292
+ border: 0;
293
+ border-radius: 0;
294
+ padding: 0 9px;
295
+ }
296
+
297
+ .segmented .toggle-button + .toggle-button {
298
+ border-left: 1px solid var(--ds-border);
299
+ }
300
+
301
+ .toggle-button[aria-pressed="true"] {
302
+ background: var(--ds-code-container-bg);
303
+ font-weight: 500;
304
+ }
305
+
306
+ .app-toolbar {
307
+ display: none;
308
+ }
309
+
310
+ .view-mode-tabs {
311
+ display: inline-flex;
312
+ overflow: hidden;
313
+ border: 1px solid var(--ds-border-subtle);
314
+ border-radius: 999px;
315
+ background: transparent;
316
+ }
317
+
318
+ .view-mode-tab {
319
+ min-width: 38px;
320
+ min-height: 32px;
321
+ border: 0;
322
+ border-radius: 0;
323
+ padding: 0 13px;
324
+ background: transparent;
325
+ color: var(--ds-text-secondary);
326
+ cursor: pointer;
327
+ font: inherit;
328
+ font-size: 12px;
329
+ font-weight: 650;
330
+ }
331
+
332
+ .view-mode-tab + .view-mode-tab {
333
+ border-left: 1px solid var(--ds-border-subtle);
334
+ }
335
+
336
+ .view-mode-tab[aria-pressed="true"] {
337
+ background: var(--ds-text-primary);
338
+ color: var(--ds-bg);
339
+ }
340
+
341
+ .query-actions {
342
+ display: inline-flex;
343
+ align-items: center;
344
+ gap: 8px;
345
+ min-width: 0;
346
+ margin-left: auto;
347
+ }
348
+
349
+ .clear-button,
350
+ .chart-picker-button {
351
+ display: inline-flex;
352
+ align-items: center;
353
+ gap: 6px;
354
+ height: 32px;
355
+ min-height: 32px;
356
+ border: 1px solid var(--ds-chip-border);
357
+ border-radius: var(--ds-radius-pill);
358
+ padding: 0 12px;
359
+ background: transparent;
360
+ color: var(--ds-chip-text);
361
+ cursor: pointer;
362
+ font: inherit;
363
+ font-size: 14px;
364
+ font-weight: 500;
365
+ line-height: 22px;
366
+ letter-spacing: -0.14px;
367
+ }
368
+
369
+ .field-wells {
370
+ display: contents;
371
+ }
372
+
373
+ .chart-settings-wells {
374
+ display: contents;
375
+ }
376
+
377
+ .chart-setting-control {
378
+ display: inline-flex;
379
+ flex: 0 0 auto;
380
+ align-items: center;
381
+ gap: 6px;
382
+ }
383
+
384
+ .field-well {
385
+ position: relative;
386
+ display: inline-flex;
387
+ flex: 0 0 auto;
388
+ }
389
+
390
+ .field-pill {
391
+ display: inline-flex;
392
+ align-items: center;
393
+ gap: 8px;
394
+ height: 32px;
395
+ min-height: 32px;
396
+ border: 1px solid var(--ds-chip-border);
397
+ border-radius: var(--ds-radius-pill);
398
+ padding: 0 12px;
399
+ background: transparent;
400
+ color: var(--ds-chip-text);
401
+ cursor: pointer;
402
+ font: inherit;
403
+ font-size: 14px;
404
+ font-weight: 500;
405
+ line-height: 22px;
406
+ letter-spacing: -0.14px;
407
+ white-space: nowrap;
408
+ }
409
+
410
+ .chart-picker-button:hover,
411
+ .chart-picker-button[aria-expanded="true"],
412
+ .clear-button:hover,
413
+ .field-pill:hover,
414
+ .field-pill[aria-expanded="true"] {
415
+ border-color: var(--ds-chip-border);
416
+ background: var(--ds-chip-hover-bg);
417
+ color: var(--ds-chip-hover-text);
418
+ }
419
+
420
+ .field-pill-role {
421
+ color: inherit;
422
+ font-size: 14px;
423
+ font-weight: 500;
424
+ }
425
+
426
+ .field-pill-field {
427
+ max-width: 140px;
428
+ overflow: hidden;
429
+ color: var(--ds-text);
430
+ font-weight: 400;
431
+ text-overflow: ellipsis;
432
+ }
433
+
434
+ .field-pill-modifier {
435
+ color: var(--ds-text-muted);
436
+ font-weight: 400;
437
+ }
438
+
439
+ .field-pill-caret {
440
+ color: var(--ds-text-muted);
441
+ }
442
+
443
+ .dropdown-caret {
444
+ display: inline-flex;
445
+ flex: 0 0 auto;
446
+ align-items: center;
447
+ justify-content: center;
448
+ width: 16px;
449
+ height: 16px;
450
+ color: var(--ds-text-muted);
451
+ }
452
+
453
+ .dropdown-caret svg {
454
+ display: block;
455
+ width: 14px;
456
+ height: 14px;
457
+ stroke: currentColor;
458
+ }
459
+
460
+ .field-menu {
461
+ position: absolute;
462
+ top: calc(100% + 8px);
463
+ left: 0;
464
+ z-index: 6;
465
+ display: block;
466
+ width: max-content;
467
+ max-width: min(240px, calc(100vw - 24px));
468
+ border: 1px solid var(--ds-menu-border);
469
+ border-radius: var(--ds-dropdown-radius);
470
+ background: var(--ds-menu-bg);
471
+ box-shadow: var(--ds-shadow);
472
+ color: var(--ds-text);
473
+ font-size: 14px;
474
+ overflow: visible;
475
+ }
476
+
477
+ .menu-surface {
478
+ max-width: calc(100vw - 24px);
479
+ transform-origin: top left;
480
+ will-change: opacity, transform;
481
+ }
482
+
483
+ .menu-surface.opening {
484
+ animation: dashboard-menu-in 100ms cubic-bezier(0.16, 1, 0.3, 1) both;
485
+ }
486
+
487
+ .menu-surface.closing {
488
+ pointer-events: none;
489
+ animation: dashboard-menu-out 90ms ease both;
490
+ }
491
+
492
+ .export-menu-list.menu-surface {
493
+ transform-origin: top right;
494
+ }
495
+
496
+ @keyframes dashboard-menu-in {
497
+ from {
498
+ opacity: 0;
499
+ transform: translateY(-4px) scale(0.98);
500
+ }
501
+
502
+ to {
503
+ opacity: 1;
504
+ transform: translateY(0) scale(1);
505
+ }
506
+ }
507
+
508
+ @keyframes dashboard-menu-out {
509
+ from {
510
+ opacity: 1;
511
+ transform: translateY(0) scale(1);
512
+ }
513
+
514
+ to {
515
+ opacity: 0;
516
+ transform: translateY(-3px) scale(0.98);
517
+ }
518
+ }
519
+
520
+ .field-menu-panel {
521
+ display: flex;
522
+ flex-direction: column;
523
+ width: 220px;
524
+ max-width: calc(100vw - 24px);
525
+ max-height: min(480px, calc(100vh - 190px));
526
+ min-width: 0;
527
+ min-height: 0;
528
+ padding: var(--ds-dropdown-padding);
529
+ overflow: auto;
530
+ }
531
+
532
+ .menu-search {
533
+ width: 100%;
534
+ min-height: var(--ds-dropdown-row-height);
535
+ margin-bottom: 6px;
536
+ border: 1px solid var(--ds-border);
537
+ border-radius: var(--ds-dropdown-row-radius);
538
+ padding: 0 10px;
539
+ background: var(--ds-surface-secondary);
540
+ color: var(--ds-text);
541
+ font: inherit;
542
+ }
543
+
544
+ .menu-scroll {
545
+ min-height: 0;
546
+ overflow: auto;
547
+ }
548
+
549
+ .menu-row,
550
+ .chart-option {
551
+ display: flex;
552
+ align-items: center;
553
+ justify-content: space-between;
554
+ gap: 12px;
555
+ width: 100%;
556
+ min-height: var(--ds-dropdown-row-height);
557
+ border: 0;
558
+ border-radius: var(--ds-dropdown-row-radius);
559
+ padding: 0 10px;
560
+ background: transparent;
561
+ color: var(--ds-text-secondary);
562
+ cursor: pointer;
563
+ font: inherit;
564
+ font-size: 14px;
565
+ text-align: left;
566
+ }
567
+
568
+ .menu-row:hover,
569
+ .menu-row.is-active,
570
+ .chart-option:hover,
571
+ .chart-option[aria-pressed="true"] {
572
+ background: var(--ds-menu-hover-bg);
573
+ color: var(--ds-text);
574
+ }
575
+
576
+ .menu-row.is-danger {
577
+ color: var(--ds-red);
578
+ }
579
+
580
+ .menu-row.is-danger:hover {
581
+ background: var(--ds-red-bg);
582
+ }
583
+
584
+ .menu-row-value {
585
+ color: var(--ds-text-muted);
586
+ }
587
+
588
+ .menu-row-value-with-icon {
589
+ display: inline-flex;
590
+ align-items: center;
591
+ gap: 8px;
592
+ color: var(--ds-text-muted);
593
+ }
594
+
595
+ .menu-row-value-with-icon svg {
596
+ flex: 0 0 auto;
597
+ }
598
+
599
+ .menu-submenu {
600
+ position: relative;
601
+ }
602
+
603
+ .menu-submenu-panel {
604
+ position: absolute;
605
+ top: -6px;
606
+ left: calc(100% + 8px);
607
+ z-index: 8;
608
+ display: none;
609
+ width: 220px;
610
+ max-width: calc(100vw - 24px);
611
+ max-height: min(420px, calc(100vh - 160px));
612
+ overflow: auto;
613
+ border: 1px solid var(--ds-menu-border);
614
+ border-radius: var(--ds-dropdown-radius);
615
+ padding: var(--ds-dropdown-padding);
616
+ background: var(--ds-menu-bg);
617
+ color: var(--ds-menu-text);
618
+ box-shadow: var(--ds-shadow);
619
+ }
620
+
621
+ .menu-submenu:hover > .menu-submenu-panel,
622
+ .menu-submenu:focus-within > .menu-submenu-panel,
623
+ .menu-submenu.is-open > .menu-submenu-panel {
624
+ display: grid;
625
+ }
626
+
627
+ .menu-submenu-trigger[aria-expanded="true"],
628
+ .menu-submenu:hover > .menu-submenu-trigger,
629
+ .menu-submenu:focus-within > .menu-submenu-trigger {
630
+ background: var(--ds-menu-hover-bg);
631
+ color: var(--ds-text);
632
+ }
633
+
634
+ .menu-row > svg,
635
+ .menu-row svg {
636
+ display: block;
637
+ flex: 0 0 auto;
638
+ width: 14px;
639
+ height: 14px;
640
+ stroke: currentColor;
641
+ }
642
+
643
+ .menu-heading {
644
+ display: flex;
645
+ align-items: center;
646
+ justify-content: space-between;
647
+ gap: 12px;
648
+ min-height: 30px;
649
+ padding: 0 10px;
650
+ color: var(--ds-text-muted);
651
+ font-size: 12px;
652
+ font-weight: 500;
653
+ letter-spacing: 0.02em;
654
+ text-transform: uppercase;
655
+ }
656
+
657
+ .menu-divider {
658
+ height: 1px;
659
+ margin: 6px 0;
660
+ background: var(--ds-border);
661
+ }
662
+
663
+ .menu-field-label {
664
+ display: inline-flex;
665
+ align-items: center;
666
+ gap: 9px;
667
+ min-width: 0;
668
+ }
669
+
670
+ .menu-field-icon {
671
+ display: inline-flex;
672
+ flex: 0 0 auto;
673
+ align-items: center;
674
+ justify-content: center;
675
+ width: 16px;
676
+ height: 16px;
677
+ color: var(--ds-text-muted);
678
+ }
679
+
680
+ .menu-field-icon svg,
681
+ .field-icon svg,
682
+ .chart-picker-button svg,
683
+ .filter-menu-button svg,
684
+ .filter-menu-item svg,
685
+ .export-menu-item svg {
686
+ display: block;
687
+ width: 14px;
688
+ height: 14px;
689
+ stroke: currentColor;
690
+ }
691
+
692
+ @media (max-width: 640px) {
693
+ .menu-submenu-panel {
694
+ position: static;
695
+ width: 100%;
696
+ max-height: none;
697
+ margin: 2px 0 6px;
698
+ border-color: var(--ds-border-subtle);
699
+ box-shadow: none;
700
+ }
701
+ }
702
+
703
+ .clear-button {
704
+ flex: 0 0 auto;
705
+ color: var(--ds-text-secondary);
706
+ }
707
+
708
+ .query-status {
709
+ overflow: hidden;
710
+ max-width: 320px;
711
+ color: var(--ds-text-muted);
712
+ font-size: 12px;
713
+ text-overflow: ellipsis;
714
+ white-space: nowrap;
715
+ }
716
+
717
+ .widget:not([data-display-mode="fullscreen"]):not([data-display-mode="modal"]) .query-status {
718
+ display: none;
719
+ }
720
+
721
+ .chart-picker {
722
+ position: relative;
723
+ }
724
+
725
+ .chart-picker-popover {
726
+ position: absolute;
727
+ top: calc(100% + 8px);
728
+ left: 0;
729
+ z-index: 6;
730
+ width: min(220px, calc(100vw - 24px));
731
+ max-height: min(560px, calc(100vh - 190px));
732
+ overflow: auto;
733
+ border: 1px solid var(--ds-menu-border);
734
+ border-radius: var(--ds-dropdown-radius);
735
+ padding: var(--ds-dropdown-padding);
736
+ background: var(--ds-menu-bg);
737
+ box-shadow: var(--ds-shadow);
738
+ }
739
+
740
+ .export-menu {
741
+ position: relative;
742
+ display: inline-flex;
743
+ }
744
+
745
+ .export-menu-list {
746
+ position: absolute;
747
+ z-index: 40;
748
+ top: calc(100% + 6px);
749
+ right: 0;
750
+ display: grid;
751
+ min-width: 164px;
752
+ max-width: calc(100vw - 24px);
753
+ padding: 6px;
754
+ border: 1px solid var(--ds-menu-border);
755
+ border-radius: var(--ds-radius-sm);
756
+ background: var(--ds-menu-bg);
757
+ color: var(--ds-menu-text);
758
+ box-shadow: var(--ds-shadow);
759
+ }
760
+
761
+ .export-menu-item {
762
+ display: flex;
763
+ gap: 8px;
764
+ align-items: center;
765
+ justify-content: flex-start;
766
+ min-height: 34px;
767
+ border: 0;
768
+ border-radius: 6px;
769
+ padding: 0 10px;
770
+ background: transparent;
771
+ color: var(--ds-menu-text);
772
+ cursor: pointer;
773
+ font: inherit;
774
+ font-size: 14px;
775
+ font-weight: 500;
776
+ line-height: 20px;
777
+ text-align: left;
778
+ white-space: nowrap;
779
+ }
780
+
781
+ .export-menu-item:hover,
782
+ .export-menu-item:focus-visible {
783
+ background: var(--ds-menu-hover-bg);
784
+ color: var(--ds-menu-text);
785
+ }
786
+
787
+ .filter-menu {
788
+ position: relative;
789
+ display: inline-flex;
790
+ flex: 0 0 auto;
791
+ width: fit-content;
792
+ }
793
+
794
+ .filter-menu-button {
795
+ display: inline-flex;
796
+ align-items: center;
797
+ gap: 8px;
798
+ height: 32px;
799
+ min-height: 32px;
800
+ border: 1px solid var(--ds-chip-border);
801
+ border-radius: var(--ds-radius-pill);
802
+ padding: 0 12px;
803
+ background: transparent;
804
+ color: var(--ds-chip-text);
805
+ cursor: pointer;
806
+ font: inherit;
807
+ font-size: 14px;
808
+ font-weight: 500;
809
+ line-height: 22px;
810
+ letter-spacing: -0.14px;
811
+ white-space: nowrap;
812
+ }
813
+
814
+ .filter-menu-button:hover,
815
+ .filter-menu-button[aria-expanded="true"] {
816
+ border-color: var(--ds-chip-border);
817
+ background: var(--ds-chip-hover-bg);
818
+ color: var(--ds-chip-hover-text);
819
+ }
820
+
821
+ .filter-menu-label {
822
+ color: inherit;
823
+ }
824
+
825
+ .filter-menu-value {
826
+ overflow: hidden;
827
+ max-width: min(320px, 42vw);
828
+ color: var(--ds-text);
829
+ text-overflow: ellipsis;
830
+ }
831
+
832
+ .filter-menu-list {
833
+ position: absolute;
834
+ z-index: 20;
835
+ top: calc(100% + 6px);
836
+ left: 0;
837
+ display: grid;
838
+ min-width: max(100%, 160px);
839
+ max-width: min(220px, calc(100vw - 32px));
840
+ padding: 6px;
841
+ border: 1px solid var(--ds-menu-border);
842
+ border-radius: var(--ds-radius-sm);
843
+ background: var(--ds-menu-bg);
844
+ color: var(--ds-menu-text);
845
+ box-shadow: var(--ds-shadow);
846
+ }
847
+
848
+ .filter-menu-item {
849
+ display: flex;
850
+ gap: 12px;
851
+ align-items: center;
852
+ justify-content: space-between;
853
+ min-height: 34px;
854
+ border: 0;
855
+ border-radius: 6px;
856
+ padding: 0 10px;
857
+ background: transparent;
858
+ color: var(--ds-menu-text);
859
+ cursor: pointer;
860
+ font: inherit;
861
+ font-size: 14px;
862
+ font-weight: 500;
863
+ line-height: 20px;
864
+ text-align: left;
865
+ white-space: nowrap;
866
+ }
867
+
868
+ .filter-menu-item:hover,
869
+ .filter-menu-item[aria-checked="true"] {
870
+ background: var(--ds-menu-hover-bg);
871
+ color: var(--ds-menu-text);
872
+ }
873
+
874
+ .chart-picker-section + .chart-picker-section {
875
+ margin-top: 6px;
876
+ border-top: 1px solid var(--ds-border);
877
+ padding-top: 6px;
878
+ }
879
+
880
+ .chart-picker-heading {
881
+ margin: 6px 14px 8px;
882
+ color: var(--ds-text-muted);
883
+ font-size: 12px;
884
+ font-weight: 500;
885
+ letter-spacing: 0.04em;
886
+ text-transform: uppercase;
887
+ }
888
+
889
+ .chart-option-grid {
890
+ display: grid;
891
+ grid-template-columns: minmax(0, 1fr);
892
+ gap: 0;
893
+ }
894
+
895
+ .chart-option {
896
+ min-width: 0;
897
+ justify-content: flex-start;
898
+ padding: 6px 10px;
899
+ }
900
+
901
+ .chart-option[aria-pressed="true"] {
902
+ color: var(--ds-text);
903
+ }
904
+
905
+ .chart-option-preview {
906
+ display: flex;
907
+ flex: 0 0 auto;
908
+ align-items: center;
909
+ justify-content: center;
910
+ width: 24px;
911
+ height: 24px;
912
+ color: var(--ds-blue-bright);
913
+ }
914
+
915
+ .chart-option-label {
916
+ min-width: 0;
917
+ flex: 1 1 auto;
918
+ line-height: 20px;
919
+ overflow-wrap: anywhere;
920
+ white-space: normal;
921
+ }
922
+
923
+ .chart-option-check {
924
+ flex: 0 0 auto;
925
+ margin-left: auto;
926
+ color: var(--ds-text-muted);
927
+ visibility: hidden;
928
+ }
929
+
930
+ .chart-option-check svg {
931
+ display: block;
932
+ width: 16px;
933
+ height: 16px;
934
+ stroke: currentColor;
935
+ }
936
+
937
+ .chart-option[aria-pressed="true"] .chart-option-check {
938
+ visibility: visible;
939
+ }
940
+
941
+ .chart-shell {
942
+ position: relative;
943
+ display: flex;
944
+ flex-direction: column;
945
+ gap: 0;
946
+ padding: 0;
947
+ }
948
+
949
+ .chart-canvas-wrap {
950
+ position: relative;
951
+ flex: 1 1 auto;
952
+ width: 100%;
953
+ height: auto;
954
+ min-height: 0;
955
+ overflow: visible;
956
+ overscroll-behavior: contain;
957
+ touch-action: pan-y;
958
+ }
959
+
960
+ .chart-canvas {
961
+ display: block;
962
+ width: 100% !important;
963
+ height: 100% !important;
964
+ }
965
+
966
+ .recharts-chart-wrap .recharts-cartesian-grid line {
967
+ stroke: var(--ds-chart-grid);
968
+ }
969
+
970
+ .recharts-chart-wrap .recharts-text,
971
+ .recharts-chart-wrap .recharts-label {
972
+ fill: var(--ds-chart-text-muted);
973
+ font-family: var(--ds-chart-font-family);
974
+ font-size: 11px;
975
+ }
976
+
977
+ .recharts-tooltip {
978
+ display: grid;
979
+ gap: 5px;
980
+ min-width: 140px;
981
+ max-width: 280px;
982
+ padding: 9px 10px;
983
+ border: 1px solid var(--ds-chart-tooltip-border);
984
+ border-radius: 8px;
985
+ background: var(--ds-chart-tooltip-bg);
986
+ color: var(--ds-chart-text);
987
+ box-shadow: 0 10px 24px rgba(0, 0, 0, 0.12);
988
+ font: 12px/1.35 var(--ds-chart-font-family);
989
+ }
990
+
991
+ .recharts-tooltip strong {
992
+ font-size: 12px;
993
+ font-weight: 600;
994
+ }
995
+
996
+ .recharts-tooltip-row {
997
+ display: grid;
998
+ grid-template-columns: 8px 1fr;
999
+ align-items: center;
1000
+ gap: 7px;
1001
+ color: var(--ds-chart-text-muted);
1002
+ }
1003
+
1004
+ .recharts-tooltip-row i {
1005
+ width: 8px;
1006
+ height: 8px;
1007
+ border-radius: 999px;
1008
+ }
1009
+
1010
+ .recharts-custom-panel {
1011
+ height: 100%;
1012
+ min-height: 260px;
1013
+ overflow: auto;
1014
+ }
1015
+
1016
+ .leaderboard-panel {
1017
+ display: grid;
1018
+ grid-auto-rows: minmax(0, 1fr);
1019
+ align-content: stretch;
1020
+ gap: 8px;
1021
+ height: 100%;
1022
+ }
1023
+
1024
+ .leaderboard-row {
1025
+ position: relative;
1026
+ display: grid;
1027
+ grid-template-columns: minmax(0, 1fr) auto;
1028
+ min-height: 0;
1029
+ gap: 8px;
1030
+ align-items: center;
1031
+ overflow: hidden;
1032
+ padding: 4px 12px;
1033
+ border-radius: 999px;
1034
+ color: var(--ds-text);
1035
+ font-size: 14px;
1036
+ letter-spacing: -0.14px;
1037
+ line-height: 20px;
1038
+ }
1039
+
1040
+ .leaderboard-row span {
1041
+ position: relative;
1042
+ z-index: 1;
1043
+ min-width: 0;
1044
+ overflow: hidden;
1045
+ text-overflow: ellipsis;
1046
+ white-space: nowrap;
1047
+ }
1048
+
1049
+ .leaderboard-row b {
1050
+ position: relative;
1051
+ z-index: 1;
1052
+ font-weight: 500;
1053
+ font-variant-numeric: tabular-nums;
1054
+ font-feature-settings: "tnum" 1, "lnum" 1;
1055
+ }
1056
+
1057
+ .leaderboard-row i {
1058
+ position: absolute;
1059
+ top: 0;
1060
+ right: auto;
1061
+ bottom: 0;
1062
+ left: 0;
1063
+ max-width: 100%;
1064
+ height: 100%;
1065
+ border-radius: 999px;
1066
+ background: var(--ds-surface-tertiary, #f3f3f3) !important;
1067
+ }
1068
+
1069
+ .heatmap-grid {
1070
+ display: grid;
1071
+ align-items: stretch;
1072
+ gap: 4px;
1073
+ min-width: 100%;
1074
+ font-size: 11px;
1075
+ }
1076
+
1077
+ .heatmap-grid b,
1078
+ .heatmap-grid strong {
1079
+ overflow: hidden;
1080
+ color: var(--ds-text-muted);
1081
+ font-weight: 500;
1082
+ text-overflow: ellipsis;
1083
+ white-space: nowrap;
1084
+ }
1085
+
1086
+ .heatmap-cell {
1087
+ min-height: 24px;
1088
+ border: 1px solid color-mix(in srgb, var(--ds-border) 80%, transparent);
1089
+ border-radius: 4px;
1090
+ }
1091
+
1092
+ .boxplot-panel {
1093
+ display: grid;
1094
+ align-content: center;
1095
+ gap: 12px;
1096
+ }
1097
+
1098
+ .boxplot-row {
1099
+ display: grid;
1100
+ grid-template-columns: minmax(72px, 1fr) minmax(90px, 2fr) auto auto;
1101
+ align-items: center;
1102
+ gap: 10px;
1103
+ font-size: 12px;
1104
+ }
1105
+
1106
+ .boxplot-row i {
1107
+ height: 8px;
1108
+ border-radius: 999px;
1109
+ }
1110
+
1111
+ .boxplot-row b {
1112
+ font-weight: 600;
1113
+ }
1114
+
1115
+ .boxplot-row em {
1116
+ color: var(--ds-text-muted);
1117
+ font-style: normal;
1118
+ }
1119
+
1120
+ .app-shell {
1121
+ min-width: 0;
1122
+ }
1123
+
1124
+ .app-sidebar,
1125
+ .bottom-split,
1126
+ .split-resizer,
1127
+ .data-preview,
1128
+ .sql-preview {
1129
+ display: none;
1130
+ }
1131
+
1132
+ .widget:not([data-display-mode="fullscreen"]):not([data-display-mode="modal"]) .controls {
1133
+ display: none !important;
1134
+ }
1135
+
1136
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) {
1137
+ display: flex;
1138
+ height: auto;
1139
+ min-height: 100vh;
1140
+ max-height: none;
1141
+ width: 100%;
1142
+ max-width: none;
1143
+ margin: 0 auto;
1144
+ padding: 0;
1145
+ overflow: visible;
1146
+ border: 0;
1147
+ border-radius: 0;
1148
+ background: var(--ds-bg);
1149
+ box-shadow: none;
1150
+ flex-direction: column;
1151
+ }
1152
+
1153
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) header {
1154
+ flex: 0 0 auto;
1155
+ position: sticky;
1156
+ top: 0;
1157
+ z-index: 50;
1158
+ margin: 0;
1159
+ padding: 0;
1160
+ border-bottom: 1px solid var(--ds-border-subtle);
1161
+ background: var(--ds-bg);
1162
+ box-shadow: none;
1163
+ }
1164
+
1165
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .compact-title-row,
1166
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) header > .subtitle {
1167
+ display: none;
1168
+ }
1169
+
1170
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .detail-topbar {
1171
+ display: flex;
1172
+ position: sticky;
1173
+ top: 0;
1174
+ align-items: center;
1175
+ justify-content: space-between;
1176
+ gap: 12px;
1177
+ z-index: 60;
1178
+ min-height: 56px;
1179
+ padding: 12px;
1180
+ background: var(--ds-bg);
1181
+ }
1182
+
1183
+ .widget[data-display-mode="modal"] .detail-topbar {
1184
+ display: none;
1185
+ }
1186
+
1187
+ .detail-topbar-actions {
1188
+ display: inline-flex;
1189
+ align-items: center;
1190
+ gap: 8px;
1191
+ min-width: 0;
1192
+ }
1193
+
1194
+ .detail-run-time {
1195
+ overflow: hidden;
1196
+ max-width: 220px;
1197
+ color: var(--ds-text-secondary);
1198
+ font-size: 14px;
1199
+ line-height: 22px;
1200
+ letter-spacing: -0.14px;
1201
+ text-overflow: ellipsis;
1202
+ white-space: nowrap;
1203
+ }
1204
+
1205
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .app-shell {
1206
+ display: block;
1207
+ flex: 1 1 auto;
1208
+ height: auto;
1209
+ min-height: 0;
1210
+ overflow: visible;
1211
+ padding: 0;
1212
+ background: var(--ds-bg);
1213
+ }
1214
+
1215
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .app-sidebar {
1216
+ display: none;
1217
+ }
1218
+
1219
+ .widget[data-display-mode="modal"],
1220
+ .widget[data-display-mode="modal"] .app-shell {
1221
+ height: 100%;
1222
+ min-height: 100%;
1223
+ overflow: hidden;
1224
+ }
1225
+
1226
+ .widget[data-display-mode="modal"] .app-shell {
1227
+ display: flex;
1228
+ }
1229
+
1230
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .app-main {
1231
+ display: flex;
1232
+ flex: 1 1 auto;
1233
+ flex-direction: column;
1234
+ min-width: 0;
1235
+ width: 100%;
1236
+ height: auto;
1237
+ min-height: calc(100vh - 57px);
1238
+ overflow: visible;
1239
+ border: 0;
1240
+ border-radius: 0;
1241
+ background: var(--ds-bg);
1242
+ box-shadow: none;
1243
+ }
1244
+
1245
+ .widget[data-display-mode="modal"] .app-main {
1246
+ height: 100%;
1247
+ min-height: 0;
1248
+ }
1249
+
1250
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .detail-title-section {
1251
+ display: flex;
1252
+ flex: 0 0 auto;
1253
+ flex-direction: column;
1254
+ gap: 8px;
1255
+ padding: 24px 32px 16px;
1256
+ }
1257
+
1258
+ .detail-title-row {
1259
+ display: flex;
1260
+ width: 100%;
1261
+ min-width: 0;
1262
+ align-items: flex-start;
1263
+ justify-content: space-between;
1264
+ gap: 16px;
1265
+ }
1266
+
1267
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .detail-title-section h1 {
1268
+ flex: 1 1 auto;
1269
+ min-width: 0;
1270
+ margin: 0;
1271
+ color: var(--ds-text-primary);
1272
+ font-size: 28px;
1273
+ font-weight: 500;
1274
+ line-height: 34px;
1275
+ letter-spacing: -0.04px;
1276
+ }
1277
+
1278
+ .modal-title-close-button {
1279
+ display: none;
1280
+ flex: 0 0 auto;
1281
+ align-items: center;
1282
+ justify-content: center;
1283
+ width: 32px;
1284
+ height: 32px;
1285
+ margin-left: auto;
1286
+ margin-top: 2px;
1287
+ border: 0;
1288
+ border-radius: var(--ds-radius-pill);
1289
+ background: transparent;
1290
+ color: var(--ds-text-secondary);
1291
+ cursor: pointer;
1292
+ }
1293
+
1294
+ .widget[data-display-mode="modal"] .modal-title-close-button {
1295
+ display: inline-flex;
1296
+ }
1297
+
1298
+ .modal-title-close-button:hover {
1299
+ background: var(--ds-menu-hover-bg);
1300
+ color: var(--ds-text-primary);
1301
+ }
1302
+
1303
+ .modal-title-close-button:focus-visible {
1304
+ outline: 2px solid var(--ds-blue-bright);
1305
+ outline-offset: 2px;
1306
+ }
1307
+
1308
+ .detail-subtitle {
1309
+ margin: 0;
1310
+ color: var(--ds-text-secondary);
1311
+ font-size: 14px;
1312
+ line-height: 22px;
1313
+ letter-spacing: -0.14px;
1314
+ }
1315
+
1316
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .app-toolbar {
1317
+ display: none;
1318
+ flex: 0 0 auto;
1319
+ align-items: center;
1320
+ justify-content: space-between;
1321
+ gap: 12px;
1322
+ min-height: 58px;
1323
+ border-bottom: 1px solid var(--ds-border-subtle);
1324
+ padding: 12px 16px;
1325
+ background: var(--ds-bg);
1326
+ }
1327
+
1328
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .view-mode-tabs {
1329
+ display: none;
1330
+ }
1331
+
1332
+ .app-panel {
1333
+ padding: 16px;
1334
+ }
1335
+
1336
+ .app-panel + .app-panel {
1337
+ border-top: 1px solid var(--ds-border-subtle);
1338
+ }
1339
+
1340
+ .app-panel-heading {
1341
+ display: flex;
1342
+ align-items: center;
1343
+ justify-content: space-between;
1344
+ gap: 10px;
1345
+ color: var(--ds-text-primary);
1346
+ font-size: 13px;
1347
+ font-weight: 760;
1348
+ }
1349
+
1350
+ .source-details {
1351
+ display: grid;
1352
+ gap: 10px;
1353
+ margin-top: 12px;
1354
+ }
1355
+
1356
+ .source-row {
1357
+ display: grid;
1358
+ grid-template-columns: 58px minmax(0, 1fr);
1359
+ gap: 10px;
1360
+ color: var(--ds-text-muted);
1361
+ font-size: 12px;
1362
+ line-height: 1.35;
1363
+ }
1364
+
1365
+ .source-row strong {
1366
+ color: var(--ds-text-primary);
1367
+ font-weight: 650;
1368
+ }
1369
+
1370
+ .source-row-list {
1371
+ display: grid;
1372
+ gap: 4px;
1373
+ }
1374
+
1375
+ .source-row-list span {
1376
+ overflow-wrap: anywhere;
1377
+ }
1378
+
1379
+ .source-row-table {
1380
+ align-items: start;
1381
+ }
1382
+
1383
+ .source-preview-shell {
1384
+ max-height: 220px;
1385
+ overflow: auto;
1386
+ border: 1px solid var(--ds-border-subtle);
1387
+ border-radius: 6px;
1388
+ background: var(--ds-surface);
1389
+ }
1390
+
1391
+ .source-preview-table {
1392
+ width: max-content;
1393
+ min-width: 100%;
1394
+ border-collapse: collapse;
1395
+ color: var(--ds-text-primary);
1396
+ font-size: 11.5px;
1397
+ }
1398
+
1399
+ .source-preview-table th,
1400
+ .source-preview-table td {
1401
+ max-width: 220px;
1402
+ padding: 6px 8px;
1403
+ border-bottom: 1px solid var(--ds-border-subtle);
1404
+ text-align: left;
1405
+ vertical-align: top;
1406
+ overflow-wrap: anywhere;
1407
+ }
1408
+
1409
+ .source-preview-table th {
1410
+ position: sticky;
1411
+ top: 0;
1412
+ background: var(--ds-surface-secondary);
1413
+ color: var(--ds-text-muted);
1414
+ font-weight: 700;
1415
+ }
1416
+
1417
+ .source-code {
1418
+ max-height: 260px;
1419
+ margin-top: 3px;
1420
+ border-radius: 6px;
1421
+ padding: 10px;
1422
+ background: var(--ds-surface-secondary);
1423
+ font-size: 11.5px;
1424
+ line-height: 1.45;
1425
+ }
1426
+
1427
+ .source-disclosure {
1428
+ display: block;
1429
+ }
1430
+
1431
+ .source-disclosure summary {
1432
+ display: flex;
1433
+ align-items: center;
1434
+ justify-content: space-between;
1435
+ min-height: 32px;
1436
+ border: 1px solid var(--ds-border-subtle);
1437
+ border-radius: 7px;
1438
+ padding: 0 10px;
1439
+ background: var(--ds-surface-secondary);
1440
+ color: var(--ds-text-primary);
1441
+ cursor: pointer;
1442
+ font-size: 12px;
1443
+ font-weight: 700;
1444
+ list-style: none;
1445
+ }
1446
+
1447
+ .source-disclosure summary::-webkit-details-marker {
1448
+ display: none;
1449
+ }
1450
+
1451
+ .source-disclosure summary::after {
1452
+ color: var(--ds-text-muted);
1453
+ content: "Show";
1454
+ font-size: 11px;
1455
+ font-weight: 700;
1456
+ }
1457
+
1458
+ .source-disclosure[open] summary::after {
1459
+ content: "Hide";
1460
+ }
1461
+
1462
+ .app-icon-button {
1463
+ border: 0;
1464
+ border-radius: 5px;
1465
+ padding: 0 4px;
1466
+ background: transparent;
1467
+ color: var(--ds-text-muted);
1468
+ cursor: default;
1469
+ font: inherit;
1470
+ font-size: 18px;
1471
+ line-height: 1;
1472
+ }
1473
+
1474
+ .field-filter {
1475
+ width: 100%;
1476
+ min-height: 34px;
1477
+ margin: 14px 0 12px;
1478
+ border: 1px solid var(--ds-border-subtle);
1479
+ border-radius: 8px;
1480
+ padding: 0 9px;
1481
+ background: var(--ds-surface-secondary);
1482
+ color: var(--ds-text);
1483
+ font: inherit;
1484
+ font-size: 12px;
1485
+ }
1486
+
1487
+ .field-group {
1488
+ margin-top: 14px;
1489
+ }
1490
+
1491
+ .field-group-title {
1492
+ margin: 0 0 7px;
1493
+ color: var(--ds-text-muted);
1494
+ font-size: 11px;
1495
+ font-weight: 700;
1496
+ letter-spacing: 0.02em;
1497
+ text-transform: uppercase;
1498
+ }
1499
+
1500
+ .field-list {
1501
+ display: grid;
1502
+ gap: 3px;
1503
+ margin: 0;
1504
+ padding: 0;
1505
+ list-style: none;
1506
+ }
1507
+
1508
+ .field-item {
1509
+ display: flex;
1510
+ align-items: center;
1511
+ gap: 8px;
1512
+ min-width: 0;
1513
+ border-radius: 10px;
1514
+ padding: 7px 9px;
1515
+ color: var(--ds-text-secondary);
1516
+ font-size: 14px;
1517
+ }
1518
+
1519
+ .field-item.is-active {
1520
+ background: var(--ds-surface-secondary);
1521
+ color: var(--ds-text);
1522
+ }
1523
+
1524
+ .field-icon {
1525
+ display: inline-flex;
1526
+ flex: 0 0 auto;
1527
+ align-items: center;
1528
+ justify-content: center;
1529
+ width: 18px;
1530
+ color: var(--ds-text-muted);
1531
+ text-align: center;
1532
+ font-size: 14px;
1533
+ }
1534
+
1535
+ .field-label {
1536
+ overflow: hidden;
1537
+ min-width: 0;
1538
+ text-overflow: ellipsis;
1539
+ white-space: nowrap;
1540
+ }
1541
+
1542
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .chart-shell {
1543
+ flex: 0 0 auto;
1544
+ height: clamp(360px, 48vw, 520px);
1545
+ min-height: 360px;
1546
+ overflow: visible;
1547
+ padding: 16px 32px 24px;
1548
+ background: var(--ds-bg);
1549
+ }
1550
+
1551
+ .widget[data-display-mode="modal"] .chart-shell {
1552
+ flex: 1 1 auto;
1553
+ height: 100%;
1554
+ min-height: 0;
1555
+ }
1556
+
1557
+ .chart-shell:focus,
1558
+ .chart-canvas-wrap:focus,
1559
+ .chart-canvas-wrap:focus-visible {
1560
+ outline: 2px solid transparent;
1561
+ outline-offset: 2px;
1562
+ }
1563
+
1564
+ .chart-shell:focus-visible,
1565
+ .chart-canvas-wrap:focus-visible {
1566
+ outline-color: var(--ds-blue-bright);
1567
+ }
1568
+
1569
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .controls {
1570
+ display: flex;
1571
+ position: sticky;
1572
+ top: 56px;
1573
+ z-index: 4;
1574
+ flex: 0 0 auto;
1575
+ align-content: flex-start;
1576
+ min-height: auto;
1577
+ align-items: center;
1578
+ gap: 6px 8px;
1579
+ padding: 8px 32px;
1580
+ background: var(--ds-bg);
1581
+ }
1582
+
1583
+ .widget[data-display-mode="modal"] .controls {
1584
+ top: 0;
1585
+ }
1586
+
1587
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .control-label {
1588
+ display: none;
1589
+ }
1590
+
1591
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .chart-picker-button,
1592
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .field-pill,
1593
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .clear-button {
1594
+ height: 32px;
1595
+ min-height: 32px;
1596
+ border-color: var(--ds-chip-border);
1597
+ padding: 0 12px;
1598
+ color: var(--ds-chip-text);
1599
+ font-size: 14px;
1600
+ font-weight: 500;
1601
+ line-height: 22px;
1602
+ letter-spacing: -0.14px;
1603
+ }
1604
+
1605
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .clear-button {
1606
+ border-color: transparent;
1607
+ color: var(--ds-text-primary);
1608
+ }
1609
+
1610
+ .chart-legend-shell {
1611
+ min-height: 36px;
1612
+ border-bottom: 0;
1613
+ padding: 8px 16px 10px;
1614
+ background: transparent;
1615
+ box-shadow: none;
1616
+ }
1617
+
1618
+ .chart-legend-shell.is-empty .legend-list {
1619
+ visibility: hidden;
1620
+ }
1621
+
1622
+ .chart-legend-shell[hidden] {
1623
+ display: none;
1624
+ }
1625
+
1626
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .chart-legend-shell {
1627
+ display: none !important;
1628
+ }
1629
+
1630
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .split-resizer {
1631
+ display: none;
1632
+ grid-row: 3;
1633
+ align-items: center;
1634
+ justify-content: center;
1635
+ min-height: 12px;
1636
+ border: 0;
1637
+ background:
1638
+ linear-gradient(
1639
+ to bottom,
1640
+ transparent calc(50% - 0.5px),
1641
+ var(--ds-border) calc(50% - 0.5px),
1642
+ var(--ds-border) calc(50% + 0.5px),
1643
+ transparent calc(50% + 0.5px)
1644
+ ),
1645
+ transparent;
1646
+ cursor: row-resize;
1647
+ touch-action: none;
1648
+ }
1649
+
1650
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .split-resizer::before {
1651
+ width: 32px;
1652
+ height: 3px;
1653
+ border-radius: var(--ds-radius-pill);
1654
+ background: var(--ds-border-strong);
1655
+ opacity: 0.42;
1656
+ transition:
1657
+ background 120ms ease,
1658
+ opacity 120ms ease,
1659
+ width 120ms ease;
1660
+ content: "";
1661
+ }
1662
+
1663
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .split-resizer:hover,
1664
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .split-resizer:focus-visible,
1665
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]).is-resizing .split-resizer {
1666
+ background:
1667
+ linear-gradient(
1668
+ to bottom,
1669
+ transparent calc(50% - 0.5px),
1670
+ var(--ds-border-strong) calc(50% - 0.5px),
1671
+ var(--ds-border-strong) calc(50% + 0.5px),
1672
+ transparent calc(50% + 0.5px)
1673
+ ),
1674
+ var(--ds-surface-secondary);
1675
+ }
1676
+
1677
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .split-resizer:hover::before,
1678
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .split-resizer:focus-visible::before,
1679
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]).is-resizing .split-resizer::before {
1680
+ width: 44px;
1681
+ background: var(--ds-blue-bright);
1682
+ opacity: 0.75;
1683
+ }
1684
+
1685
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .bottom-split {
1686
+ display: flex;
1687
+ flex: 0 0 auto;
1688
+ flex-direction: column;
1689
+ gap: 16px;
1690
+ min-height: 0;
1691
+ overflow: visible;
1692
+ padding: 16px 32px 32px;
1693
+ background: var(--ds-bg);
1694
+ }
1695
+
1696
+ .widget[data-display-mode="modal"] .bottom-split {
1697
+ display: none;
1698
+ }
1699
+
1700
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .bottom-split.has-sql {
1701
+ grid-template-columns: none;
1702
+ }
1703
+
1704
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .data-preview {
1705
+ display: block;
1706
+ flex: 0 0 auto;
1707
+ height: auto;
1708
+ min-height: 0;
1709
+ overflow: visible;
1710
+ width: 100%;
1711
+ background: var(--ds-bg);
1712
+ }
1713
+
1714
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .data-preview .shared-table-shell,
1715
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .data-preview .table-wrap {
1716
+ width: 100%;
1717
+ max-width: none;
1718
+ }
1719
+
1720
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .data-preview .table-wrap {
1721
+ overflow-x: auto;
1722
+ overflow-y: clip;
1723
+ }
1724
+
1725
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .data-preview .data-table {
1726
+ width: 100%;
1727
+ min-width: 720px;
1728
+ }
1729
+
1730
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .data-preview .data-table td {
1731
+ white-space: nowrap;
1732
+ }
1733
+
1734
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .sql-preview {
1735
+ display: none;
1736
+ min-width: 0;
1737
+ flex: 0 0 auto;
1738
+ height: auto;
1739
+ min-height: 0;
1740
+ overflow: visible;
1741
+ border-left: 0;
1742
+ background: var(--ds-bg);
1743
+ flex-direction: column;
1744
+ }
1745
+
1746
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .bottom-split[data-data-mode="query"] .data-preview {
1747
+ display: none;
1748
+ }
1749
+
1750
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .bottom-split[data-data-mode="query"] .sql-preview {
1751
+ display: flex;
1752
+ }
1753
+
1754
+ .data-section-header {
1755
+ display: flex;
1756
+ align-items: center;
1757
+ justify-content: space-between;
1758
+ gap: 16px;
1759
+ min-height: 32px;
1760
+ }
1761
+
1762
+ .data-section-name {
1763
+ display: inline-flex;
1764
+ align-items: center;
1765
+ min-width: 0;
1766
+ color: var(--ds-text);
1767
+ font-size: 16px;
1768
+ font-weight: 500;
1769
+ line-height: 24px;
1770
+ letter-spacing: -0.01px;
1771
+ }
1772
+
1773
+ .data-mode-segmented {
1774
+ position: relative;
1775
+ display: inline-flex;
1776
+ flex: 0 0 auto;
1777
+ align-items: center;
1778
+ height: 32px;
1779
+ overflow: hidden;
1780
+ border: 0;
1781
+ border-radius: var(--ds-radius-pill);
1782
+ padding: 2px;
1783
+ background: var(--ds-segmented-bg);
1784
+ }
1785
+
1786
+ .data-mode-segmented::before {
1787
+ position: absolute;
1788
+ top: 2px;
1789
+ bottom: 2px;
1790
+ left: 2px;
1791
+ z-index: 0;
1792
+ width: calc((100% - 4px) / 2);
1793
+ border-radius: var(--ds-radius-pill);
1794
+ background: var(--ds-segmented-active-bg);
1795
+ box-shadow: var(--ds-segmented-active-shadow);
1796
+ content: "";
1797
+ transform: translateX(0);
1798
+ transition:
1799
+ transform 180ms cubic-bezier(0.16, 1, 0.3, 1),
1800
+ background-color 160ms ease;
1801
+ }
1802
+
1803
+ .data-mode-segmented[data-active-mode="query"]::before {
1804
+ transform: translateX(100%);
1805
+ }
1806
+
1807
+ .data-mode-option {
1808
+ position: relative;
1809
+ z-index: 1;
1810
+ display: inline-flex;
1811
+ align-items: center;
1812
+ justify-content: center;
1813
+ min-height: 28px;
1814
+ border: 0;
1815
+ border-radius: 999px;
1816
+ padding: 0 12px;
1817
+ background: transparent;
1818
+ color: var(--ds-text-secondary);
1819
+ cursor: pointer;
1820
+ font: inherit;
1821
+ font-size: 14px;
1822
+ line-height: 22px;
1823
+ letter-spacing: -0.14px;
1824
+ }
1825
+
1826
+ .data-mode-option[aria-pressed="true"] {
1827
+ color: var(--ds-text);
1828
+ font-weight: 500;
1829
+ }
1830
+
1831
+ .sql-preview .source-code {
1832
+ flex: 1 1 auto;
1833
+ max-height: none;
1834
+ min-height: 0;
1835
+ margin: 0;
1836
+ border: 0;
1837
+ border-radius: var(--ds-radius-panel);
1838
+ padding: 26px;
1839
+ background: var(--ds-code-container-bg);
1840
+ color: var(--ds-text);
1841
+ font-size: 14px;
1842
+ line-height: 1.5;
1843
+ letter-spacing: -0.14px;
1844
+ }
1845
+
1846
+ .preview-caption {
1847
+ display: flex;
1848
+ align-items: center;
1849
+ justify-content: space-between;
1850
+ gap: 12px;
1851
+ border-bottom: 1px solid var(--ds-border);
1852
+ padding: 8px var(--ds-panel-padding);
1853
+ color: var(--ds-text-secondary);
1854
+ font-size: 12px;
1855
+ font-weight: 500;
1856
+ line-height: 18px;
1857
+ }
1858
+
1859
+ .preview-count {
1860
+ font-weight: 500;
1861
+ }
1862
+
1863
+ .data-preview table {
1864
+ min-width: 720px;
1865
+ }
1866
+
1867
+ .data-preview tbody tr {
1868
+ transition: background-color 120ms ease;
1869
+ }
1870
+
1871
+ .data-preview tbody tr:hover {
1872
+ background: var(--ds-menu-hover-bg);
1873
+ }
1874
+
1875
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) :is(.table-scroll) {
1876
+ width: 100%;
1877
+ max-width: 100%;
1878
+ height: auto;
1879
+ overflow-x: auto;
1880
+ overflow-y: visible;
1881
+ }
1882
+
1883
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) tbody tr:nth-child(even) {
1884
+ background: transparent;
1885
+ }
1886
+
1887
+ @media (max-width: 1024px) {
1888
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .app-shell {
1889
+ overflow-x: hidden;
1890
+ overflow-y: auto;
1891
+ }
1892
+
1893
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .sql-preview {
1894
+ border-left: 0;
1895
+ }
1896
+
1897
+ .query-status {
1898
+ display: none;
1899
+ }
1900
+ }
1901
+
1902
+ @media (max-width: 640px) {
1903
+ :root {
1904
+ --ds-gutter: 24px;
1905
+ --ds-panel-padding: 16px;
1906
+ }
1907
+
1908
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .detail-title-section,
1909
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .controls,
1910
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .chart-shell,
1911
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .bottom-split {
1912
+ padding-right: 16px;
1913
+ padding-left: 16px;
1914
+ }
1915
+
1916
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .detail-title-section h1 {
1917
+ font-size: 22px;
1918
+ line-height: 28px;
1919
+ }
1920
+
1921
+ .data-section-header {
1922
+ align-items: flex-start;
1923
+ flex-direction: column;
1924
+ }
1925
+
1926
+ }
1927
+
1928
+ svg {
1929
+ display: block;
1930
+ width: 100%;
1931
+ height: auto;
1932
+ overflow: visible;
1933
+ }
1934
+
1935
+ .widget:is([data-display-mode="fullscreen"], [data-display-mode="modal"]) .chart-canvas-wrap {
1936
+ min-height: 0;
1937
+ height: 100%;
1938
+ }
1939
+
1940
+ .axis-label,
1941
+ .tick,
1942
+ .legend-item,
1943
+ .point-label {
1944
+ fill: var(--ds-chart-text-muted);
1945
+ color: var(--ds-chart-text-muted);
1946
+ font-size: 12px;
1947
+ }
1948
+
1949
+ .grid-line {
1950
+ stroke: var(--grid);
1951
+ stroke-width: 1;
1952
+ }
1953
+
1954
+ .axis {
1955
+ stroke: var(--axis);
1956
+ stroke-width: 1;
1957
+ }
1958
+
1959
+ .category-label {
1960
+ fill: var(--ds-text);
1961
+ font-size: 14px;
1962
+ font-weight: 400;
1963
+ }
1964
+
1965
+ .value-tick {
1966
+ fill: var(--ds-text-tertiary);
1967
+ font-size: 12px;
1968
+ font-weight: 400;
1969
+ }
1970
+
1971
+ .stack-segment {
1972
+ shape-rendering: crispEdges;
1973
+ stroke: var(--ds-surface);
1974
+ stroke-width: 2;
1975
+ }
1976
+
1977
+ .empty {
1978
+ display: grid;
1979
+ min-height: 240px;
1980
+ align-content: center;
1981
+ justify-items: center;
1982
+ gap: 6px;
1983
+ border: 1px dashed var(--ds-border-strong);
1984
+ border-radius: var(--ds-radius-panel);
1985
+ padding: 28px;
1986
+ background: var(--ds-surface-secondary);
1987
+ font-size: 13px;
1988
+ text-align: center;
1989
+ }
1990
+
1991
+ .empty strong {
1992
+ color: var(--ds-text);
1993
+ font-size: 14px;
1994
+ font-weight: 650;
1995
+ }
1996
+
1997
+ .empty span {
1998
+ max-width: 520px;
1999
+ color: var(--ds-text-muted);
2000
+ line-height: 1.45;
2001
+ }
2002
+
2003
+ .table-scroll {
2004
+ width: 100%;
2005
+ max-width: 100%;
2006
+ overflow-x: auto;
2007
+ overflow-y: clip;
2008
+ }
2009
+
2010
+ table {
2011
+ width: max-content;
2012
+ min-width: 100%;
2013
+ border-collapse: collapse;
2014
+ color: var(--ds-text);
2015
+ font-size: 14px;
2016
+ table-layout: auto;
2017
+ }
2018
+
2019
+ th,
2020
+ td {
2021
+ border-bottom: 1px solid var(--ds-border-subtle);
2022
+ padding: 8px 16px 8px 0;
2023
+ text-align: left;
2024
+ vertical-align: top;
2025
+ white-space: nowrap;
2026
+ }
2027
+
2028
+ th {
2029
+ position: relative;
2030
+ height: 30px;
2031
+ background: transparent;
2032
+ color: var(--ds-text-tertiary);
2033
+ font-size: 12px;
2034
+ font-weight: 600;
2035
+ line-height: 18px;
2036
+ }
2037
+
2038
+ tbody tr:nth-child(even) {
2039
+ background: transparent;
2040
+ }
2041
+
2042
+ tbody tr:last-child td {
2043
+ border-bottom: 0;
2044
+ }
2045
+
2046
+ td.numeric,
2047
+ th.numeric {
2048
+ text-align: right;
2049
+ font-variant-numeric: tabular-nums;
2050
+ font-feature-settings: "tnum" 1, "lnum" 1;
2051
+ }
2052
+
2053
+ td {
2054
+ color: var(--ds-text-secondary);
2055
+ font-size: 14px;
2056
+ line-height: 22px;
2057
+ white-space: normal;
2058
+ }
2059
+
2060
+ td:first-child {
2061
+ color: var(--ds-text-primary);
2062
+ }
2063
+
2064
+ .legend-list,
2065
+ .notes,
2066
+ .metrics {
2067
+ display: flex;
2068
+ flex-wrap: wrap;
2069
+ gap: 8px 16px;
2070
+ margin: 0;
2071
+ padding: 0;
2072
+ list-style: none;
2073
+ }
2074
+
2075
+ .legend-button {
2076
+ display: inline-flex;
2077
+ align-items: center;
2078
+ gap: 6px;
2079
+ border: 0;
2080
+ padding: 0;
2081
+ background: transparent;
2082
+ color: inherit;
2083
+ cursor: pointer;
2084
+ font: inherit;
2085
+ }
2086
+
2087
+ .legend-item {
2088
+ font-weight: 650;
2089
+ }
2090
+
2091
+ .legend-button[aria-pressed="false"] {
2092
+ opacity: 0.42;
2093
+ text-decoration: line-through;
2094
+ }
2095
+
2096
+ .legend-reset-button {
2097
+ color: var(--ds-blue-bright);
2098
+ font-weight: 650;
2099
+ }
2100
+
2101
+ .swatch {
2102
+ width: 7px;
2103
+ height: 7px;
2104
+ border-radius: 99px;
2105
+ background: currentColor;
2106
+ }
2107
+
2108
+ @media (prefers-reduced-motion: reduce) {
2109
+ *,
2110
+ *::before,
2111
+ *::after {
2112
+ animation-duration: 0.01ms !important;
2113
+ animation-iteration-count: 1 !important;
2114
+ scroll-behavior: auto !important;
2115
+ transition-duration: 0.01ms !important;
2116
+ }
2117
+ }