create-yss-spec 1.1.2 → 1.1.3

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 (239) hide show
  1. package/package.json +1 -1
  2. package/template/.codex/skills/data-analytics/.app.json +84 -0
  3. package/template/.codex/skills/data-analytics/.codex-plugin/plugin.json +66 -0
  4. package/template/.codex/skills/data-analytics/.mcp.json +30 -0
  5. package/template/.codex/skills/data-analytics/AGENTS.md +20 -0
  6. package/template/.codex/skills/data-analytics/DEPENDENCIES.MD +27 -0
  7. package/template/.codex/skills/data-analytics/README.md +60 -0
  8. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html +16 -0
  9. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part001 +1 -0
  10. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part002 +1 -0
  11. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part003 +1 -0
  12. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part004 +1 -0
  13. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part005 +1 -0
  14. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part006 +1 -0
  15. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html +16 -0
  16. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part001 +1 -0
  17. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part002 +1 -0
  18. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part003 +1 -0
  19. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part004 +1 -0
  20. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part005 +1 -0
  21. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part006 +1 -0
  22. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part007 +1 -0
  23. package/template/.codex/skills/data-analytics/assets/datascience-small.svg +5 -0
  24. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html +16 -0
  25. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part001 +1 -0
  26. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part002 +1 -0
  27. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part003 +1 -0
  28. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part004 +1 -0
  29. package/template/.codex/skills/data-analytics/assets/datascience.png +0 -0
  30. package/template/.codex/skills/data-analytics/assets/datascience.svg +10 -0
  31. package/template/.codex/skills/data-analytics/mcp/server.cjs +2963 -0
  32. package/template/.codex/skills/data-analytics/package-lock.json +3048 -0
  33. package/template/.codex/skills/data-analytics/package.json +43 -0
  34. package/template/.codex/skills/data-analytics/scripts/normalize-widget-assets.mjs +75 -0
  35. package/template/.codex/skills/data-analytics/skills/analyze-data-quality/SKILL.md +160 -0
  36. package/template/.codex/skills/data-analytics/skills/analyze-data-quality/agents/openai.yaml +6 -0
  37. package/template/.codex/skills/data-analytics/skills/build-dashboard/SKILL.md +148 -0
  38. package/template/.codex/skills/data-analytics/skills/build-dashboard/agents/openai.yaml +6 -0
  39. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/bi-platform-dashboard.md +18 -0
  40. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/html-dashboard.md +24 -0
  41. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/mcp-artifact-dashboard.md +71 -0
  42. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/streamlit-dashboard.md +85 -0
  43. package/template/.codex/skills/data-analytics/skills/build-report/SKILL.md +207 -0
  44. package/template/.codex/skills/data-analytics/skills/build-report/agents/openai.yaml +6 -0
  45. package/template/.codex/skills/data-analytics/skills/build-report/assets/executive-report-shell.html +70 -0
  46. package/template/.codex/skills/data-analytics/skills/build-report/assets/technical-report-shell.html +66 -0
  47. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/SKILL.md +118 -0
  48. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/agents/openai.yaml +6 -0
  49. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/__init__.py +1 -0
  50. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/cli.py +57 -0
  51. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/constants.py +61 -0
  52. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/docx_writer.py +362 -0
  53. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/html_parser.py +829 -0
  54. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/model.py +30 -0
  55. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/plan.py +129 -0
  56. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/quality.py +374 -0
  57. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/rendering.py +613 -0
  58. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/table_utils.py +54 -0
  59. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/utils.py +16 -0
  60. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc_plan.py +9 -0
  61. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/SKILL.md +78 -0
  62. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/agents/openai.yaml +6 -0
  63. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/scripts/report_to_google_slides.py +2379 -0
  64. package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/SKILL.md +88 -0
  65. package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/agents/openai.yaml +6 -0
  66. package/template/.codex/skills/data-analytics/skills/build-report/specifications/executive-report.md +97 -0
  67. package/template/.codex/skills/data-analytics/skills/build-report/specifications/mcp-app-report.md +59 -0
  68. package/template/.codex/skills/data-analytics/skills/build-report/specifications/technical-report.md +75 -0
  69. package/template/.codex/skills/data-analytics/skills/design-kpis/SKILL.md +103 -0
  70. package/template/.codex/skills/data-analytics/skills/design-kpis/agents/openai.yaml +6 -0
  71. package/template/.codex/skills/data-analytics/skills/gather-business-context/SKILL.md +68 -0
  72. package/template/.codex/skills/data-analytics/skills/gather-business-context/agents/openai.yaml +6 -0
  73. package/template/.codex/skills/data-analytics/skills/index/SKILL.md +251 -0
  74. package/template/.codex/skills/data-analytics/skills/index/agents/openai.yaml +6 -0
  75. package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/SKILL.md +131 -0
  76. package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/agents/openai.yaml +6 -0
  77. package/template/.codex/skills/data-analytics/skills/kpi-reporting/SKILL.md +141 -0
  78. package/template/.codex/skills/data-analytics/skills/kpi-reporting/agents/openai.yaml +6 -0
  79. package/template/.codex/skills/data-analytics/skills/kpi-reporting/references/report-templates.md +32 -0
  80. package/template/.codex/skills/data-analytics/skills/market-sizing/SKILL.md +106 -0
  81. package/template/.codex/skills/data-analytics/skills/market-sizing/agents/openai.yaml +6 -0
  82. package/template/.codex/skills/data-analytics/skills/metric-diagnostics/SKILL.md +130 -0
  83. package/template/.codex/skills/data-analytics/skills/metric-diagnostics/agents/openai.yaml +6 -0
  84. package/template/.codex/skills/data-analytics/skills/product-business-analysis/SKILL.md +141 -0
  85. package/template/.codex/skills/data-analytics/skills/product-business-analysis/agents/openai.yaml +6 -0
  86. package/template/.codex/skills/data-analytics/skills/spreadsheets/SKILL.md +178 -0
  87. package/template/.codex/skills/data-analytics/skills/spreadsheets/agents/openai.yaml +9 -0
  88. package/template/.codex/skills/data-analytics/skills/spreadsheets/assets/file-spreadsheet.png +0 -0
  89. package/template/.codex/skills/data-analytics/skills/spreadsheets/charts.md +31 -0
  90. package/template/.codex/skills/data-analytics/skills/spreadsheets/references/artifact_tool_api.md +466 -0
  91. package/template/.codex/skills/data-analytics/skills/spreadsheets/style_guidelines.md +99 -0
  92. package/template/.codex/skills/data-analytics/skills/user-context/SKILL.md +195 -0
  93. package/template/.codex/skills/data-analytics/skills/user-context/agents/openai.yaml +6 -0
  94. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/automation-config.md +26 -0
  95. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/source-category-config.json +51 -0
  96. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/user-context-config.md +66 -0
  97. package/template/.codex/skills/data-analytics/skills/user-context/references/automation.md +69 -0
  98. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-examples.md +204 -0
  99. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-state-template.json +87 -0
  100. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding.md +497 -0
  101. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/connector-playbook.md +74 -0
  102. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/setup.md +65 -0
  103. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/skill-template.md +160 -0
  104. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/source-intake.md +75 -0
  105. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/weekly-polling-automation.md +96 -0
  106. package/template/.codex/skills/data-analytics/skills/user-context/references/source-category-runtime.md +263 -0
  107. package/template/.codex/skills/data-analytics/skills/user-context/scripts/data_analytics_preflight.py +1460 -0
  108. package/template/.codex/skills/data-analytics/skills/user-context/scripts/init_user_context_state.py +128 -0
  109. package/template/.codex/skills/data-analytics/skills/user-context/scripts/reset_user_context_state.py +101 -0
  110. package/template/.codex/skills/data-analytics/skills/user-context/scripts/validate_user_context_preflight.py +499 -0
  111. package/template/.codex/skills/data-analytics/skills/user-context/tests/test_state_helpers.py +978 -0
  112. package/template/.codex/skills/data-analytics/skills/validate-data/SKILL.md +190 -0
  113. package/template/.codex/skills/data-analytics/skills/validate-data/agents/openai.yaml +6 -0
  114. package/template/.codex/skills/data-analytics/skills/visualize-data/SKILL.md +157 -0
  115. package/template/.codex/skills/data-analytics/skills/visualize-data/agents/openai.yaml +6 -0
  116. package/template/.codex/skills/data-analytics/skills/visualize-data/references/seaborn-templates.md +774 -0
  117. package/template/.codex/skills/data-analytics/src/DESIGN.md +222 -0
  118. package/template/.codex/skills/data-analytics/src/analytics-app/App.tsx +3666 -0
  119. package/template/.codex/skills/data-analytics/src/analytics-app/analytics-layout.test.mjs +136 -0
  120. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartFrame.tsx +54 -0
  121. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartLegend.tsx +96 -0
  122. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartRenderer.tsx +1647 -0
  123. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartTooltip.tsx +245 -0
  124. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-app-helpers.tsx +462 -0
  125. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-capabilities.ts +107 -0
  126. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-compatibility.ts +164 -0
  127. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-contract.ts +192 -0
  128. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-theme.ts +203 -0
  129. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-tokens.css +619 -0
  130. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-transforms.ts +402 -0
  131. package/template/.codex/skills/data-analytics/src/analytics-app/fonts/SystemSansVariableVF.woff2 +0 -0
  132. package/template/.codex/skills/data-analytics/src/analytics-app/imageExport.ts +370 -0
  133. package/template/.codex/skills/data-analytics/src/analytics-app/layout/AnalyticsLayoutCanvas.tsx +536 -0
  134. package/template/.codex/skills/data-analytics/src/analytics-app/layout/RichMarkdown.tsx +681 -0
  135. package/template/.codex/skills/data-analytics/src/analytics-app/layout/analyticsLayoutCore.ts +164 -0
  136. package/template/.codex/skills/data-analytics/src/analytics-app/main.tsx +21 -0
  137. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/chart_contract.py +472 -0
  138. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/check_analytics_app_runtime_links.py +75 -0
  139. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/design_contract.py +142 -0
  140. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/package_utils.py +142 -0
  141. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/tests/test_package_utils.py +377 -0
  142. package/template/.codex/skills/data-analytics/src/analytics-app/styles.css +3468 -0
  143. package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.d.ts +44 -0
  144. package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.jsx +639 -0
  145. package/template/.codex/skills/data-analytics/src/analytics-app/tables/data-table.css +327 -0
  146. package/template/.codex/skills/data-analytics/src/analytics-app/tokens.css +225 -0
  147. package/template/.codex/skills/data-analytics/src/analytics-app/types.ts +204 -0
  148. package/template/.codex/skills/data-analytics/src/analytics-app-core.md +85 -0
  149. package/template/.codex/skills/data-analytics/src/codex-style-contract.md +30 -0
  150. package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.html +12 -0
  151. package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.jsx +1008 -0
  152. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.css +2117 -0
  153. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.html +122 -0
  154. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.js +3588 -0
  155. package/template/.codex/skills/data-analytics/src/datascience-table-widget.css +483 -0
  156. package/template/.codex/skills/data-analytics/src/datascience-table-widget.html +32 -0
  157. package/template/.codex/skills/data-analytics/src/datascience-table-widget.js +333 -0
  158. package/template/.codex/skills/data-analytics/src/mcp-host.js +153 -0
  159. package/template/.codex/skills/data-analytics/src/recharts-config.js +315 -0
  160. package/template/.codex/skills/data-analytics/src/recharts-renderer.jsx +294 -0
  161. package/template/.codex/skills/data-analytics/src/sql-source-view.css +33 -0
  162. package/template/.codex/skills/data-analytics/src/sql-source-view.js +157 -0
  163. package/template/.codex/skills/data-analytics/src/styles/codex-theme.css +121 -0
  164. package/template/.codex/skills/data-analytics/src/table-renderer.jsx +28 -0
  165. package/template/.codex/skills/data-analytics/tests/chart-transforms.test.mjs +87 -0
  166. package/template/.codex/skills/data-analytics/tests/funnel-smoke.html +105 -0
  167. package/template/.codex/skills/data-analytics/tests/inline-widget-compare.html +233 -0
  168. package/template/.codex/skills/data-analytics/tests/mcp-server.test.mjs +1500 -0
  169. package/template/.codex/skills/data-analytics/tests/native-style-contract.test.mjs +219 -0
  170. package/template/.codex/skills/data-analytics/tests/recharts-config.test.mjs +144 -0
  171. package/template/.codex/skills/data-analytics/tests/recharts-renderer.test.mjs +11 -0
  172. package/template/.codex/skills/data-analytics/tests/rich-markdown.test.mjs +54 -0
  173. package/template/.codex/skills/data-analytics/tests/widget-render-harness.html +321 -0
  174. package/template/.codex/skills/data-analytics/tsconfig.json +19 -0
  175. package/template/.codex/skills/data-analytics/vite.config.ts +46 -0
  176. package/template/.codex/skills/product-design/.app.json +7 -0
  177. package/template/.codex/skills/product-design/.codex-plugin/plugin.json +50 -0
  178. package/template/.codex/skills/product-design/README.md +50 -0
  179. package/template/.codex/skills/product-design/agents/openai.yaml +4 -0
  180. package/template/.codex/skills/product-design/assets/composerIcon.svg +9 -0
  181. package/template/.codex/skills/product-design/assets/logo.png +0 -0
  182. package/template/.codex/skills/product-design/package.json +11 -0
  183. package/template/.codex/skills/product-design/references/browser-order.md +9 -0
  184. package/template/.codex/skills/product-design/references/communication-protocol.md +45 -0
  185. package/template/.codex/skills/product-design/references/critical-overrides.md +58 -0
  186. package/template/.codex/skills/product-design/references/local-prototype-preflight.md +16 -0
  187. package/template/.codex/skills/product-design/scripts/bootstrap-prototype.mjs +147 -0
  188. package/template/.codex/skills/product-design/skills/audit/SKILL.md +159 -0
  189. package/template/.codex/skills/product-design/skills/audit/agents/openai.yaml +6 -0
  190. package/template/.codex/skills/product-design/skills/audit/references/design-audit-framework.md +73 -0
  191. package/template/.codex/skills/product-design/skills/design-qa/SKILL.md +133 -0
  192. package/template/.codex/skills/product-design/skills/design-qa/agents/openai.yaml +6 -0
  193. package/template/.codex/skills/product-design/skills/design-qa/references/qa-rubric.md +61 -0
  194. package/template/.codex/skills/product-design/skills/get-context/SKILL.md +81 -0
  195. package/template/.codex/skills/product-design/skills/get-context/agents/openai.yaml +6 -0
  196. package/template/.codex/skills/product-design/skills/ideate/SKILL.md +179 -0
  197. package/template/.codex/skills/product-design/skills/ideate/agents/openai.yaml +6 -0
  198. package/template/.codex/skills/product-design/skills/image-to-code/SKILL.md +105 -0
  199. package/template/.codex/skills/product-design/skills/image-to-code/agents/openai.yaml +6 -0
  200. package/template/.codex/skills/product-design/skills/index/SKILL.md +126 -0
  201. package/template/.codex/skills/product-design/skills/index/agents/openai.yaml +6 -0
  202. package/template/.codex/skills/product-design/skills/prototype/SKILL.md +128 -0
  203. package/template/.codex/skills/product-design/skills/prototype/agents/openai.yaml +6 -0
  204. package/template/.codex/skills/product-design/skills/prototype/references/existing-codebase-edits.md +18 -0
  205. package/template/.codex/skills/product-design/skills/research/SKILL.md +92 -0
  206. package/template/.codex/skills/product-design/skills/research/agents/openai.yaml +6 -0
  207. package/template/.codex/skills/product-design/skills/share/SKILL.md +41 -0
  208. package/template/.codex/skills/product-design/skills/share/agents/openai.yaml +6 -0
  209. package/template/.codex/skills/product-design/skills/url-to-code/SKILL.md +124 -0
  210. package/template/.codex/skills/product-design/skills/url-to-code/agents/openai.yaml +6 -0
  211. package/template/.codex/skills/product-design/skills/user-context/SKILL.md +147 -0
  212. package/template/.codex/skills/product-design/skills/user-context/agents/openai.yaml +6 -0
  213. package/template/.codex/skills/product-design/skills/user-context/plugin-author-config/user-context-template.md +63 -0
  214. package/template/.codex/skills/product-design/skills/user-context/references/onboarding.md +66 -0
  215. package/template/.codex/skills/product-design/skills/user-context/scripts/init_user_context.py +86 -0
  216. package/template/.codex/skills/product-design/skills/user-context/scripts/user_context_preflight.py +204 -0
  217. package/template/.codex/skills/product-design/templates/prototype/AGENTS.md +7 -0
  218. package/template/.codex/skills/product-design/templates/prototype/index.html +12 -0
  219. package/template/.codex/skills/product-design/templates/prototype/package.json +18 -0
  220. package/template/.codex/skills/product-design/templates/prototype/src/App.jsx +5 -0
  221. package/template/.codex/skills/product-design/templates/prototype/src/main.jsx +10 -0
  222. package/template/.codex/skills/product-design/templates/prototype/src/styles.css +13 -0
  223. package/template/.codex/skills/product-design/templates/prototype/vite.config.mjs +14 -0
  224. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +3 -3
  225. package/template/AGENTS.md +3 -3
  226. package/template/docs/adr/adr-product-design-prototype-entrypoint.md +54 -0
  227. package/template/docs/api/templates/openapi-draft-review-checklist.md +4 -2
  228. package/template/docs/design/README.md +8 -4
  229. package/template/docs/design/templates/interaction-spec-template.md +4 -1
  230. package/template/docs/design/templates/prototype-confirmation-template.md +57 -0
  231. package/template/docs/design/templates/prototype-review-checklist.md +6 -2
  232. package/template/docs/design/templates/state-matrix-template.md +1 -1
  233. package/template/docs/process/harness-executive-blueprint.md +2 -1
  234. package/template/docs/process/harness-process-tailoring.md +1 -1
  235. package/template/docs/process/harness-work-unit-map.md +1 -1
  236. package/template/docs/process/lifecycle-artifact-map.md +4 -3
  237. package/template/docs/process/product-prototype-workflow.md +82 -0
  238. package/template/docs/user-guide/product-lifecycle-workflow.md +2 -2
  239. package/template/docs/user-guide/product-rd-lifecycle-best-practices.md +15 -10
@@ -0,0 +1,3468 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+
5
+ html {
6
+ min-height: 100%;
7
+ -webkit-font-smoothing: antialiased;
8
+ -moz-osx-font-smoothing: grayscale;
9
+ font-synthesis: none;
10
+ }
11
+
12
+ body,
13
+ #root {
14
+ min-height: 100%;
15
+ }
16
+
17
+ body {
18
+ margin: 0;
19
+ background: var(--ds-bg);
20
+ color: var(--ds-text);
21
+ font: 14px/1.45 var(--ds-font);
22
+ letter-spacing: 0;
23
+ }
24
+
25
+ button,
26
+ select {
27
+ border: 1px solid var(--ds-border-subtle);
28
+ border-radius: var(--ds-radius-pill);
29
+ background: var(--ds-surface);
30
+ color: var(--ds-text);
31
+ font: inherit;
32
+ }
33
+
34
+ button {
35
+ min-height: 32px;
36
+ padding: 0 12px;
37
+ cursor: pointer;
38
+ }
39
+
40
+ button:disabled {
41
+ cursor: not-allowed;
42
+ opacity: 0.64;
43
+ }
44
+
45
+ button:focus-visible,
46
+ select:focus-visible {
47
+ outline: 2px solid var(--ds-blue-bright);
48
+ outline-offset: 2px;
49
+ }
50
+
51
+ [data-image-export-root="true"],
52
+ [data-image-export-root="true"] * {
53
+ animation: none !important;
54
+ caret-color: transparent !important;
55
+ transition: none !important;
56
+ }
57
+
58
+ [data-image-export-root="true"] [data-image-export-exclude="true"],
59
+ [data-image-export-root="true"] .analytics-layout-drop-indicator,
60
+ [data-image-export-root="true"] .analytics-layout-grab-handle,
61
+ [data-image-export-root="true"] .copy-toast,
62
+ [data-image-export-root="true"] .menu-surface,
63
+ [data-image-export-root="true"] .viz-card-menu,
64
+ [data-image-export-root="true"] .viz-card-menu-button,
65
+ [data-image-export-root="true"] .viz-card-submenu-list {
66
+ display: none !important;
67
+ }
68
+
69
+ .menu-surface {
70
+ max-width: calc(100vw - 24px);
71
+ background: var(--ds-menu-bg);
72
+ transform-origin: top right;
73
+ will-change: opacity, transform;
74
+ }
75
+
76
+ .menu-surface.opening {
77
+ animation: dashboard-menu-in 100ms cubic-bezier(0.16, 1, 0.3, 1) both;
78
+ }
79
+
80
+ .menu-surface.closing {
81
+ pointer-events: none;
82
+ animation: dashboard-menu-out 90ms ease both;
83
+ }
84
+
85
+ .filter-menu-list.menu-surface {
86
+ transform-origin: top left;
87
+ }
88
+
89
+ @keyframes dashboard-menu-in {
90
+ from {
91
+ opacity: 0;
92
+ transform: translateY(-4px) scale(0.98);
93
+ }
94
+
95
+ to {
96
+ opacity: 1;
97
+ transform: translateY(0) scale(1);
98
+ }
99
+ }
100
+
101
+ @keyframes dashboard-menu-out {
102
+ from {
103
+ opacity: 1;
104
+ transform: translateY(0) scale(1);
105
+ }
106
+
107
+ to {
108
+ opacity: 0;
109
+ transform: translateY(-3px) scale(0.98);
110
+ }
111
+ }
112
+
113
+ .dashboard-shell {
114
+ --analytics-shell-max-width: var(--ds-dashboard-content-max-width);
115
+ width: 100%;
116
+ max-width: none;
117
+ margin: 0 auto;
118
+ padding: 0 var(--ds-gutter) 56px;
119
+ }
120
+
121
+ .dashboard-shell.report-shell {
122
+ --analytics-shell-max-width: var(--ds-report-content-max-width);
123
+ --report-table-content-inset: max(var(--ds-gutter), calc(50vw - var(--ds-report-content-half-width)));
124
+ --ds-section-gap: 32px;
125
+ max-width: none;
126
+ }
127
+
128
+ .dashboard-shell.chart-detail-shell {
129
+ width: 100%;
130
+ max-width: none;
131
+ min-height: 100vh;
132
+ padding: 0;
133
+ }
134
+
135
+ .dashboard-shell.report-shell > :not(.analytics-top-bar):not(.copy-toast):not(dialog):not(.unified-chart-detail-page) {
136
+ width: 100%;
137
+ max-width: var(--ds-report-content-max-width);
138
+ margin-right: auto;
139
+ margin-left: auto;
140
+ }
141
+
142
+ .dashboard-shell.chart-detail-shell > .unified-chart-detail-page {
143
+ width: 100%;
144
+ max-width: none;
145
+ margin: 0;
146
+ }
147
+
148
+ .analytics-top-bar {
149
+ box-sizing: border-box;
150
+ position: sticky;
151
+ top: 0;
152
+ z-index: 60;
153
+ display: flex;
154
+ gap: 12px;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ width: 100vw;
158
+ height: 48px;
159
+ min-height: 48px;
160
+ margin-right: calc(50% - 50vw);
161
+ margin-left: calc(50% - 50vw);
162
+ padding: 8px 12px;
163
+ border-bottom: 1px solid var(--ds-border-subtle);
164
+ background: var(--ds-bg);
165
+ }
166
+
167
+ .analytics-top-bar-title {
168
+ flex: 1 1 auto;
169
+ min-width: 0;
170
+ }
171
+
172
+ .analytics-top-bar-refresh {
173
+ display: inline-flex;
174
+ min-width: 0;
175
+ align-items: center;
176
+ gap: 8px;
177
+ }
178
+
179
+ .analytics-top-bar-refresh-label {
180
+ display: inline-flex;
181
+ min-width: 0;
182
+ align-items: center;
183
+ gap: 6px;
184
+ margin: 0;
185
+ padding: 0;
186
+ color: var(--ds-text-tertiary);
187
+ font-size: 14px;
188
+ font-weight: 500;
189
+ line-height: 22px;
190
+ }
191
+
192
+ .analytics-top-bar-refresh-label span {
193
+ overflow: hidden;
194
+ text-overflow: ellipsis;
195
+ }
196
+
197
+ .analytics-top-bar-actions {
198
+ display: inline-flex;
199
+ flex: 0 0 auto;
200
+ gap: 8px;
201
+ align-items: center;
202
+ }
203
+
204
+ .analytics-top-bar-freshness {
205
+ display: inline-flex;
206
+ min-width: 0;
207
+ align-items: center;
208
+ }
209
+
210
+ .analytics-top-bar .page-title-edit-target {
211
+ display: inline-flex;
212
+ max-width: 100%;
213
+ width: auto;
214
+ min-height: 32px;
215
+ margin: -4px -6px;
216
+ align-items: center;
217
+ padding: 4px 6px;
218
+ border-radius: 8px;
219
+ }
220
+
221
+ .analytics-top-bar .page-title-edit-target h1 {
222
+ overflow: visible;
223
+ margin: 0;
224
+ color: var(--ds-text-primary);
225
+ font-family: var(--ds-font);
226
+ font-size: 14px;
227
+ font-weight: 500;
228
+ line-height: 20px;
229
+ letter-spacing: -0.13px;
230
+ text-overflow: ellipsis;
231
+ white-space: nowrap;
232
+ }
233
+
234
+ .analytics-top-bar .page-title-editor {
235
+ min-height: 32px;
236
+ padding: 4px 6px;
237
+ color: var(--ds-text-primary);
238
+ font-family: var(--ds-font);
239
+ font-size: 14px;
240
+ font-weight: 500;
241
+ line-height: 20px;
242
+ letter-spacing: -0.13px;
243
+ }
244
+
245
+ .top-bar-button {
246
+ display: inline-flex;
247
+ gap: 6px;
248
+ align-items: center;
249
+ justify-content: center;
250
+ height: 32px;
251
+ min-height: 32px;
252
+ padding: 0 12px;
253
+ border: 1px solid var(--ds-border-subtle);
254
+ border-radius: 9999px;
255
+ background: var(--ds-bg);
256
+ color: var(--ds-text);
257
+ font-size: 14px;
258
+ font-weight: 500;
259
+ line-height: 22px;
260
+ white-space: nowrap;
261
+ }
262
+
263
+ .top-bar-button:hover,
264
+ .top-bar-button[aria-expanded="true"] {
265
+ background: var(--ds-menu-hover-bg);
266
+ }
267
+
268
+ .top-bar-button-ghost {
269
+ border-color: transparent;
270
+ background: transparent;
271
+ color: var(--ds-text-tertiary);
272
+ }
273
+
274
+ .top-bar-button-ghost:hover {
275
+ color: var(--ds-text);
276
+ }
277
+
278
+ .top-bar-button-primary {
279
+ border-color: var(--ds-text-primary);
280
+ background: var(--ds-text-primary);
281
+ color: var(--ds-bg);
282
+ }
283
+
284
+ .top-bar-button-primary:hover {
285
+ background: var(--ds-text);
286
+ color: var(--ds-bg);
287
+ }
288
+
289
+ .top-bar-button svg {
290
+ flex: 0 0 auto;
291
+ }
292
+
293
+ .export-menu {
294
+ position: relative;
295
+ display: inline-flex;
296
+ }
297
+
298
+ .export-menu-list {
299
+ position: absolute;
300
+ z-index: 40;
301
+ top: calc(100% + 6px);
302
+ right: 0;
303
+ display: grid;
304
+ min-width: 164px;
305
+ max-width: calc(100vw - 24px);
306
+ padding: 6px;
307
+ border: 1px solid var(--ds-menu-border);
308
+ border-radius: var(--ds-radius-sm);
309
+ background: var(--ds-menu-bg);
310
+ color: var(--ds-menu-text);
311
+ box-shadow: var(--ds-shadow);
312
+ }
313
+
314
+ .export-menu-item {
315
+ display: flex;
316
+ gap: 8px;
317
+ align-items: center;
318
+ justify-content: flex-start;
319
+ min-height: 34px;
320
+ padding: 0 10px;
321
+ border: 0;
322
+ border-radius: 6px;
323
+ background: transparent;
324
+ color: var(--ds-menu-text);
325
+ font-size: 14px;
326
+ font-weight: 500;
327
+ line-height: 20px;
328
+ text-align: left;
329
+ white-space: nowrap;
330
+ }
331
+
332
+ .export-menu-item svg {
333
+ flex: 0 0 auto;
334
+ }
335
+
336
+ .export-menu-item:hover,
337
+ .export-menu-item:focus-visible {
338
+ background: var(--ds-menu-hover-bg);
339
+ color: var(--ds-menu-text);
340
+ }
341
+
342
+ .page-title-editor {
343
+ font-family: var(--ds-font-heading);
344
+ font-size: 32px;
345
+ font-weight: 500;
346
+ line-height: 38px;
347
+ letter-spacing: 0;
348
+ }
349
+
350
+ .page-title-edit-target {
351
+ width: 100%;
352
+ border-radius: 6px;
353
+ cursor: default;
354
+ }
355
+
356
+ .is-app-editing .page-title-edit-target {
357
+ cursor: text;
358
+ }
359
+
360
+ .is-app-editing .page-title-edit-target:hover {
361
+ background: var(--ds-edit-hover-bg);
362
+ }
363
+
364
+ .page-title-edit-target h1 {
365
+ overflow-wrap: anywhere;
366
+ white-space: pre-wrap;
367
+ }
368
+
369
+ .page-title-edit-target:focus-visible {
370
+ outline: 2px solid var(--ds-blue-bright);
371
+ outline-offset: 2px;
372
+ background: var(--ds-surface);
373
+ }
374
+
375
+ .page-title-editor {
376
+ display: block;
377
+ box-sizing: border-box;
378
+ width: 100%;
379
+ min-width: 0;
380
+ min-height: 38px;
381
+ overflow: visible;
382
+ padding: 4px 6px;
383
+ border: 1px solid var(--ds-border-subtle);
384
+ border-radius: 8px;
385
+ background: var(--ds-surface);
386
+ color: var(--ds-text);
387
+ resize: none;
388
+ white-space: pre-wrap;
389
+ }
390
+
391
+ .page-title-editor:focus {
392
+ outline: 0;
393
+ background: var(--ds-edit-hover-bg);
394
+ box-shadow: inset 0 0 0 2px var(--ds-edit-active-border);
395
+ }
396
+
397
+ .markdown-render {
398
+ display: block;
399
+ width: 100%;
400
+ min-width: 0;
401
+ letter-spacing: 0;
402
+ overflow-wrap: anywhere;
403
+ }
404
+
405
+ .markdown-render > * {
406
+ width: 100%;
407
+ max-width: 100%;
408
+ }
409
+
410
+ .markdown-render h1,
411
+ .markdown-render h2,
412
+ .markdown-render h3,
413
+ .markdown-render p,
414
+ .markdown-render ul,
415
+ .markdown-render ol,
416
+ .markdown-render blockquote {
417
+ margin-top: 0;
418
+ }
419
+
420
+ .markdown-render h1 {
421
+ margin-bottom: 8px;
422
+ color: var(--ds-text-primary);
423
+ font-size: 32px;
424
+ font-weight: 500;
425
+ line-height: 38px;
426
+ letter-spacing: 0;
427
+ }
428
+
429
+ .markdown-render h2 {
430
+ margin-bottom: 4px;
431
+ color: var(--ds-text-primary);
432
+ font-size: 16px;
433
+ font-weight: 500;
434
+ line-height: 24px;
435
+ letter-spacing: 0;
436
+ }
437
+
438
+ .markdown-render h3 {
439
+ margin-bottom: 4px;
440
+ color: var(--ds-text-primary);
441
+ font-size: 14px;
442
+ font-weight: 500;
443
+ line-height: 20px;
444
+ letter-spacing: 0;
445
+ }
446
+
447
+ .markdown-render p,
448
+ .markdown-render li {
449
+ color: var(--ds-text-primary);
450
+ font-size: 14px;
451
+ font-weight: 400;
452
+ line-height: 20px;
453
+ letter-spacing: 0;
454
+ }
455
+
456
+ .markdown-render strong {
457
+ color: inherit;
458
+ font-weight: 600;
459
+ }
460
+
461
+ .markdown-render p:last-child,
462
+ .markdown-render ul:last-child,
463
+ .markdown-render ol:last-child,
464
+ .markdown-render blockquote:last-child {
465
+ margin-bottom: 0;
466
+ }
467
+
468
+ .markdown-render ul,
469
+ .markdown-render ol {
470
+ display: block;
471
+ margin: 0 0 12px;
472
+ padding-left: 20px;
473
+ }
474
+
475
+ .markdown-render li + li {
476
+ margin-top: 6px;
477
+ }
478
+
479
+ .markdown-render code {
480
+ padding: 1px 6px;
481
+ border: 1px solid var(--ds-border-subtle);
482
+ border-radius: 6px;
483
+ background: var(--ds-surface-tertiary);
484
+ color: var(--ds-text-primary);
485
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
486
+ font-size: 0.92em;
487
+ }
488
+
489
+ .markdown-render a {
490
+ color: var(--ds-blue);
491
+ }
492
+
493
+ .markdown-render blockquote {
494
+ margin: 0 0 12px;
495
+ padding: 10px 12px;
496
+ border-left: 3px solid var(--ds-border-strong);
497
+ border-radius: 0 8px 8px 0;
498
+ background: var(--ds-surface-secondary);
499
+ }
500
+
501
+ .markdown-render blockquote p {
502
+ margin: 0 0 8px;
503
+ }
504
+
505
+ .markdown-render blockquote p:last-child {
506
+ margin-bottom: 0;
507
+ }
508
+
509
+ .markdown-render hr {
510
+ width: 100%;
511
+ height: 1px;
512
+ margin: 16px 0;
513
+ border: 0;
514
+ background: var(--ds-border-subtle);
515
+ }
516
+
517
+ .rich-markdown-table-scroll {
518
+ width: 100%;
519
+ margin: 0 0 12px;
520
+ overflow-x: auto;
521
+ }
522
+
523
+ .rich-markdown-table {
524
+ width: 100%;
525
+ min-width: 420px;
526
+ border-collapse: collapse;
527
+ table-layout: auto;
528
+ }
529
+
530
+ .rich-markdown-table th,
531
+ .rich-markdown-table td {
532
+ padding: 8px 10px;
533
+ border-bottom: 1px solid var(--ds-border-subtle);
534
+ color: var(--ds-text-secondary);
535
+ font-size: 13px;
536
+ line-height: 18px;
537
+ vertical-align: top;
538
+ }
539
+
540
+ .rich-markdown-table th {
541
+ color: var(--ds-text-primary);
542
+ font-weight: 600;
543
+ }
544
+
545
+ .rich-markdown-table tbody tr:last-child td {
546
+ border-bottom: 0;
547
+ }
548
+
549
+ .markdown-edit-target {
550
+ display: block;
551
+ box-sizing: border-box;
552
+ width: calc(100% + 16px);
553
+ max-width: calc(100% + 16px);
554
+ margin: -6px -8px;
555
+ padding: 6px 8px;
556
+ border-radius: 12px;
557
+ cursor: default;
558
+ transition: box-shadow 140ms ease;
559
+ }
560
+
561
+ .is-app-editing .markdown-edit-target {
562
+ cursor: text;
563
+ }
564
+
565
+ .is-app-editing .markdown-edit-target.rich-markdown-preview:hover {
566
+ background: var(--ds-edit-hover-bg);
567
+ }
568
+
569
+ .markdown-edit-target:focus-visible {
570
+ outline: 2px solid var(--ds-blue-bright);
571
+ outline-offset: 2px;
572
+ background: var(--ds-surface);
573
+ }
574
+
575
+ .rich-markdown-editor-shell {
576
+ position: relative;
577
+ min-width: 0;
578
+ }
579
+
580
+ .rich-markdown {
581
+ min-height: var(--rich-markdown-min-height, auto);
582
+ }
583
+
584
+ .rich-markdown-editor {
585
+ min-height: var(--rich-markdown-min-height, 22px);
586
+ caret-color: var(--ds-text-primary);
587
+ }
588
+
589
+ .rich-markdown-editor:focus {
590
+ outline: 0;
591
+ background: var(--ds-edit-hover-bg);
592
+ box-shadow: inset 0 0 0 2px var(--ds-edit-active-border);
593
+ }
594
+
595
+ .rich-markdown-placeholder {
596
+ position: absolute;
597
+ top: -6px;
598
+ right: -8px;
599
+ left: -8px;
600
+ padding: 6px 8px;
601
+ color: var(--ds-text-tertiary);
602
+ opacity: 0.72;
603
+ pointer-events: none;
604
+ }
605
+
606
+ .rich-markdown-link {
607
+ color: var(--ds-blue);
608
+ }
609
+
610
+ .editable-cell-header.markdown-render h1,
611
+ .editable-cell-header.markdown-render h2 {
612
+ margin-bottom: 4px;
613
+ color: var(--ds-text-primary);
614
+ font-size: 16px;
615
+ font-weight: 500;
616
+ line-height: 24px;
617
+ letter-spacing: 0;
618
+ }
619
+
620
+ .editable-cell-header.markdown-render p,
621
+ .editable-cell-header.markdown-render li {
622
+ margin: 0;
623
+ color: var(--ds-text-primary);
624
+ font-size: 14px;
625
+ font-weight: 400;
626
+ line-height: 20px;
627
+ letter-spacing: 0;
628
+ }
629
+
630
+ .editable-cell-header.markdown-render ul,
631
+ .editable-cell-header.markdown-render ol {
632
+ margin: 0;
633
+ }
634
+
635
+ .editable-markdown-body.markdown-render p,
636
+ .editable-markdown-body.markdown-render li {
637
+ color: var(--ds-text-primary);
638
+ }
639
+
640
+ .dashboard-meta {
641
+ display: flex;
642
+ flex-wrap: wrap;
643
+ gap: 8px;
644
+ align-items: center;
645
+ margin-top: 8px;
646
+ font-size: 13px;
647
+ }
648
+
649
+ .snapshot-status {
650
+ display: inline-flex;
651
+ align-items: center;
652
+ min-height: 22px;
653
+ padding: 0 8px;
654
+ border-radius: var(--ds-radius-pill);
655
+ background: var(--ds-surface-secondary);
656
+ color: var(--ds-text-secondary);
657
+ font-size: 12px;
658
+ font-weight: 500;
659
+ line-height: 18px;
660
+ }
661
+
662
+ .snapshot-status.fixture,
663
+ .snapshot-status.partial {
664
+ background: var(--ds-yellow-bg);
665
+ color: var(--ds-yellow);
666
+ }
667
+
668
+ .snapshot-status.blocked {
669
+ background: var(--ds-red-bg);
670
+ color: var(--ds-red);
671
+ }
672
+
673
+ .filter-toolbar {
674
+ display: flex;
675
+ flex-wrap: wrap;
676
+ gap: 8px;
677
+ align-items: center;
678
+ justify-content: flex-start;
679
+ margin: 24px 0 32px;
680
+ }
681
+
682
+ .filter-group {
683
+ display: flex;
684
+ flex-wrap: wrap;
685
+ gap: 8px;
686
+ min-width: 0;
687
+ }
688
+
689
+ .filter-menu {
690
+ position: relative;
691
+ display: inline-flex;
692
+ width: fit-content;
693
+ }
694
+
695
+ .filter-menu-button {
696
+ display: inline-flex;
697
+ gap: 8px;
698
+ align-items: center;
699
+ height: 32px;
700
+ padding: 0 12px;
701
+ border: 1px solid var(--ds-border-subtle);
702
+ border-radius: var(--ds-radius-pill);
703
+ background: var(--ds-surface);
704
+ color: var(--ds-text-secondary);
705
+ font-size: 14px;
706
+ font-weight: 500;
707
+ line-height: 22px;
708
+ white-space: nowrap;
709
+ }
710
+
711
+ .filter-menu-button:hover,
712
+ .filter-menu-button[aria-expanded="true"] {
713
+ border-color: var(--ds-border-subtle);
714
+ background: var(--ds-menu-hover-bg);
715
+ color: var(--ds-text);
716
+ }
717
+
718
+ .filter-menu-label {
719
+ color: var(--ds-text-muted);
720
+ }
721
+
722
+ .filter-menu-value {
723
+ color: var(--ds-text);
724
+ }
725
+
726
+ .filter-menu-list {
727
+ position: absolute;
728
+ z-index: 20;
729
+ top: calc(100% + 6px);
730
+ left: 0;
731
+ display: grid;
732
+ min-width: max(100%, 180px);
733
+ max-width: min(280px, calc(100vw - 32px));
734
+ padding: 6px;
735
+ border: 1px solid var(--ds-menu-border);
736
+ border-radius: var(--ds-radius-sm);
737
+ background: var(--ds-menu-bg);
738
+ color: var(--ds-menu-text);
739
+ box-shadow: var(--ds-shadow);
740
+ }
741
+
742
+ .filter-menu-item {
743
+ display: flex;
744
+ gap: 12px;
745
+ align-items: center;
746
+ justify-content: space-between;
747
+ min-height: 34px;
748
+ padding: 0 10px;
749
+ border: 0;
750
+ border-radius: 6px;
751
+ background: transparent;
752
+ color: var(--ds-menu-text);
753
+ font-size: 14px;
754
+ font-weight: 500;
755
+ line-height: 20px;
756
+ text-align: left;
757
+ white-space: nowrap;
758
+ }
759
+
760
+ .filter-menu-item:hover,
761
+ .filter-menu-item[aria-checked="true"] {
762
+ background: var(--ds-menu-hover-bg);
763
+ color: var(--ds-menu-text);
764
+ }
765
+
766
+ .negative {
767
+ color: var(--ds-red);
768
+ }
769
+
770
+ .positive {
771
+ color: var(--ds-green);
772
+ }
773
+
774
+ .kpi-strip {
775
+ --kpi-columns: 1;
776
+ display: grid;
777
+ grid-template-columns: repeat(var(--kpi-columns), minmax(0, 1fr));
778
+ align-items: stretch;
779
+ overflow: hidden;
780
+ margin: 18px 0;
781
+ border: 1px solid var(--ds-border-subtle);
782
+ border-radius: var(--ds-radius-panel);
783
+ background: var(--ds-surface);
784
+ }
785
+
786
+ .kpi-card {
787
+ padding: 16px 24px;
788
+ border-top: 1px solid var(--ds-border-subtle);
789
+ background: var(--ds-surface);
790
+ }
791
+
792
+ .kpi-card:first-child {
793
+ border-top: 0;
794
+ }
795
+
796
+ .kpi-card-placeholder {
797
+ pointer-events: none;
798
+ }
799
+
800
+ .kpi-strip.kpi-columns-2 .kpi-card:nth-child(n),
801
+ .kpi-strip.kpi-columns-3 .kpi-card:nth-child(n),
802
+ .kpi-strip.kpi-columns-4 .kpi-card:nth-child(n),
803
+ .kpi-strip.kpi-columns-5 .kpi-card:nth-child(n) {
804
+ border-top: 1px solid var(--ds-border-subtle);
805
+ border-left: 1px solid var(--ds-border-subtle);
806
+ }
807
+
808
+ .kpi-strip.kpi-columns-2 .kpi-card:nth-child(-n + 2),
809
+ .kpi-strip.kpi-columns-3 .kpi-card:nth-child(-n + 3),
810
+ .kpi-strip.kpi-columns-4 .kpi-card:nth-child(-n + 4),
811
+ .kpi-strip.kpi-columns-5 .kpi-card:nth-child(-n + 5) {
812
+ border-top: 0;
813
+ }
814
+
815
+ .kpi-strip.kpi-columns-2 .kpi-card:nth-child(2n + 1),
816
+ .kpi-strip.kpi-columns-3 .kpi-card:nth-child(3n + 1),
817
+ .kpi-strip.kpi-columns-4 .kpi-card:nth-child(4n + 1),
818
+ .kpi-strip.kpi-columns-5 .kpi-card:nth-child(5n + 1) {
819
+ border-left: 0;
820
+ }
821
+
822
+ .kpi-label {
823
+ color: var(--ds-text-muted);
824
+ font-size: 14px;
825
+ line-height: 20px;
826
+ overflow-wrap: anywhere;
827
+ white-space: normal;
828
+ }
829
+
830
+ .kpi-label-row {
831
+ display: flex;
832
+ gap: 6px;
833
+ align-items: center;
834
+ min-width: 0;
835
+ }
836
+
837
+ .kpi-label-row .kpi-label {
838
+ min-width: 0;
839
+ }
840
+
841
+ .kpi-info-wrap {
842
+ position: relative;
843
+ display: inline-flex;
844
+ flex: 0 0 auto;
845
+ align-items: center;
846
+ }
847
+
848
+ .kpi-info {
849
+ display: inline-flex;
850
+ align-items: center;
851
+ justify-content: center;
852
+ width: 18px;
853
+ height: 18px;
854
+ padding: 0;
855
+ border: 0;
856
+ border-radius: var(--ds-radius-pill);
857
+ background: transparent;
858
+ color: var(--ds-text-muted);
859
+ cursor: help;
860
+ line-height: 1;
861
+ }
862
+
863
+ .kpi-info-icon {
864
+ display: block;
865
+ width: 18px;
866
+ height: 18px;
867
+ }
868
+
869
+ .kpi-info:hover,
870
+ .kpi-info:focus-visible {
871
+ color: var(--ds-text);
872
+ outline: 0;
873
+ }
874
+
875
+ .kpi-info:focus-visible {
876
+ box-shadow: 0 0 0 2px var(--ds-blue-bright);
877
+ }
878
+
879
+ .kpi-info-popover {
880
+ position: fixed;
881
+ z-index: 1000;
882
+ box-sizing: border-box;
883
+ width: max-content;
884
+ max-width: min(320px, calc(100vw - 24px));
885
+ padding: 8px 10px;
886
+ border: 1px solid var(--ds-menu-border);
887
+ border-radius: var(--ds-radius-sm);
888
+ background: var(--ds-menu-bg);
889
+ box-shadow: var(--ds-shadow);
890
+ color: var(--ds-menu-text);
891
+ font-size: 12px;
892
+ font-weight: 400;
893
+ line-height: 16px;
894
+ pointer-events: none;
895
+ overflow-wrap: anywhere;
896
+ white-space: normal;
897
+ }
898
+
899
+ .kpi-value {
900
+ margin-top: 4px;
901
+ overflow: visible;
902
+ color: var(--ds-text);
903
+ font-size: 20px;
904
+ font-weight: 500;
905
+ line-height: 26px;
906
+ overflow-wrap: anywhere;
907
+ text-overflow: clip;
908
+ white-space: normal;
909
+ }
910
+
911
+ .metric-badge-row {
912
+ display: flex;
913
+ flex-wrap: wrap;
914
+ gap: 8px;
915
+ margin-top: 8px;
916
+ }
917
+
918
+ .metric-badge {
919
+ display: inline-flex;
920
+ flex-wrap: wrap;
921
+ gap: 4px;
922
+ align-items: center;
923
+ justify-content: flex-start;
924
+ max-width: 100%;
925
+ padding: 2px 8px;
926
+ border: 1px solid var(--ds-border-subtle);
927
+ border-radius: var(--ds-radius-pill);
928
+ background: var(--ds-surface-tertiary);
929
+ color: var(--ds-text-secondary);
930
+ font-size: 12px;
931
+ font-weight: 500;
932
+ line-height: 18px;
933
+ overflow-wrap: normal;
934
+ white-space: normal;
935
+ word-break: normal;
936
+ }
937
+
938
+ .metric-badge-label {
939
+ color: var(--ds-muted);
940
+ overflow-wrap: normal;
941
+ white-space: nowrap;
942
+ word-break: normal;
943
+ }
944
+
945
+ .metric-badge-value {
946
+ color: var(--ds-text);
947
+ overflow-wrap: normal;
948
+ white-space: nowrap;
949
+ word-break: normal;
950
+ }
951
+
952
+ .metric-badge.positive {
953
+ background: var(--ds-green-bg);
954
+ color: var(--ds-green);
955
+ }
956
+
957
+ .metric-badge.negative {
958
+ background: var(--ds-red-bg);
959
+ color: var(--ds-red);
960
+ }
961
+
962
+ .metric-badge.positive .metric-badge-label,
963
+ .metric-badge.positive .metric-badge-value,
964
+ .metric-badge.negative .metric-badge-label,
965
+ .metric-badge.negative .metric-badge-value {
966
+ color: inherit;
967
+ }
968
+
969
+ .dashboard-grid {
970
+ display: grid;
971
+ grid-template-columns: repeat(2, minmax(0, 1fr));
972
+ gap: var(--ds-section-gap);
973
+ margin: var(--ds-section-gap) 0;
974
+ }
975
+
976
+ .layout-full {
977
+ grid-column: 1 / -1;
978
+ }
979
+
980
+ .panel {
981
+ min-width: 0;
982
+ overflow: hidden;
983
+ padding: var(--ds-panel-padding);
984
+ border: 1px solid var(--ds-border-subtle);
985
+ border-radius: var(--ds-radius-panel);
986
+ background: var(--ds-surface);
987
+ }
988
+
989
+ .chart-panel {
990
+ position: relative;
991
+ }
992
+
993
+ .datascience-artifact-shell {
994
+ min-width: 0;
995
+ }
996
+
997
+ @media (prefers-reduced-motion: reduce) {
998
+ *,
999
+ *::before,
1000
+ *::after {
1001
+ animation-duration: 0.01ms !important;
1002
+ animation-iteration-count: 1 !important;
1003
+ scroll-behavior: auto !important;
1004
+ transition-duration: 0.01ms !important;
1005
+ }
1006
+ }
1007
+
1008
+ .chart-panel,
1009
+ .table-panel {
1010
+ cursor: default;
1011
+ }
1012
+
1013
+ .chart-panel,
1014
+ .table-panel,
1015
+ .report-block {
1016
+ overflow: visible;
1017
+ padding: 0;
1018
+ border: 0;
1019
+ border-radius: 0;
1020
+ background: transparent;
1021
+ }
1022
+
1023
+ .panel-header {
1024
+ position: relative;
1025
+ display: flex;
1026
+ box-sizing: border-box;
1027
+ flex: 0 0 auto;
1028
+ gap: 10px;
1029
+ align-items: flex-start;
1030
+ justify-content: space-between;
1031
+ width: 100%;
1032
+ margin-bottom: 16px;
1033
+ }
1034
+
1035
+ .panel-title-row {
1036
+ display: flex;
1037
+ flex: 1 1 auto;
1038
+ min-width: 0;
1039
+ gap: 8px;
1040
+ align-items: flex-start;
1041
+ }
1042
+
1043
+ .panel-title-row > div {
1044
+ width: 100%;
1045
+ min-width: 0;
1046
+ }
1047
+
1048
+ .editable-chart-header {
1049
+ display: grid;
1050
+ gap: 4px;
1051
+ width: 100%;
1052
+ min-width: 0;
1053
+ }
1054
+
1055
+ .editable-chart-title,
1056
+ .editable-chart-subtitle {
1057
+ display: block;
1058
+ box-sizing: border-box;
1059
+ width: 100%;
1060
+ min-width: 0;
1061
+ max-width: 100%;
1062
+ overflow: hidden;
1063
+ padding: 0;
1064
+ border: 0;
1065
+ border-radius: 6px;
1066
+ background: transparent;
1067
+ color: inherit;
1068
+ font: inherit;
1069
+ overflow-wrap: anywhere;
1070
+ resize: none;
1071
+ white-space: pre-wrap;
1072
+ }
1073
+
1074
+ .editable-chart-title {
1075
+ color: var(--ds-text-primary);
1076
+ font-size: 16px;
1077
+ font-weight: 500;
1078
+ line-height: 24px;
1079
+ letter-spacing: 0;
1080
+ }
1081
+
1082
+ .editable-chart-subtitle {
1083
+ color: var(--ds-text-muted);
1084
+ font-size: 14px;
1085
+ line-height: 20px;
1086
+ min-height: 20px;
1087
+ }
1088
+
1089
+ .is-app-editing .editable-chart-title:hover,
1090
+ .is-app-editing .editable-chart-subtitle:hover {
1091
+ background: var(--ds-surface-secondary);
1092
+ }
1093
+
1094
+ .editable-chart-title:focus,
1095
+ .editable-chart-subtitle:focus {
1096
+ outline: 2px solid var(--ds-blue-bright);
1097
+ outline-offset: 2px;
1098
+ background: var(--ds-surface);
1099
+ }
1100
+
1101
+ .panel h2 {
1102
+ margin: 0;
1103
+ color: var(--ds-text-secondary);
1104
+ font-size: 16px;
1105
+ font-weight: 500;
1106
+ line-height: 24px;
1107
+ letter-spacing: 0;
1108
+ }
1109
+
1110
+ .panel p {
1111
+ margin: 4px 0 0;
1112
+ color: var(--ds-text-muted);
1113
+ font-size: 14px;
1114
+ line-height: 20px;
1115
+ }
1116
+
1117
+ .chart-frame {
1118
+ display: flex;
1119
+ flex-direction: column;
1120
+ flex: 1 1 0;
1121
+ align-items: stretch;
1122
+ width: 100%;
1123
+ height: var(--ds-chart-body-height);
1124
+ min-width: 0;
1125
+ min-height: 0;
1126
+ overflow: visible;
1127
+ }
1128
+
1129
+ .chart-plot {
1130
+ display: flex;
1131
+ flex: 1 1 0;
1132
+ width: 100%;
1133
+ min-width: 0;
1134
+ min-height: 0;
1135
+ overflow: visible;
1136
+ }
1137
+
1138
+ .chart-plot > .recharts-wrapper {
1139
+ flex: 1 1 0;
1140
+ min-height: 0;
1141
+ }
1142
+
1143
+ .chart-frame svg {
1144
+ overflow: visible;
1145
+ }
1146
+
1147
+ .chart-frame--with-legend {
1148
+ gap: 4px;
1149
+ }
1150
+
1151
+ .chart-frame:focus,
1152
+ .chart-frame:focus-visible,
1153
+ .chart-plot:focus,
1154
+ .chart-plot:focus-visible,
1155
+ .recharts-wrapper:focus,
1156
+ .recharts-wrapper:focus-visible,
1157
+ .recharts-surface:focus,
1158
+ .recharts-surface:focus-visible,
1159
+ .recharts-cartesian-axis:focus,
1160
+ .recharts-cartesian-axis:focus-visible,
1161
+ .recharts-cartesian-axis-tick:focus,
1162
+ .recharts-cartesian-axis-tick:focus-visible,
1163
+ .recharts-label:focus,
1164
+ .recharts-label:focus-visible {
1165
+ outline: none;
1166
+ }
1167
+
1168
+ .recharts-wrapper [tabindex="-1"]:focus,
1169
+ .recharts-wrapper [tabindex="-1"]:focus-visible,
1170
+ .recharts-wrapper [tabindex]:focus:not(:focus-visible) {
1171
+ outline: none;
1172
+ }
1173
+
1174
+ .chart-frame--custom {
1175
+ overflow: hidden;
1176
+ }
1177
+
1178
+ .chart-frame--custom > * {
1179
+ width: 100%;
1180
+ height: 100%;
1181
+ }
1182
+
1183
+ .chart-tooltip {
1184
+ position: relative;
1185
+ z-index: 40;
1186
+ min-width: 180px;
1187
+ padding: 10px 12px;
1188
+ border: 1px solid var(--ds-border-subtle);
1189
+ border-radius: var(--ds-radius-sm);
1190
+ background: var(--ds-surface);
1191
+ box-shadow: var(--ds-shadow);
1192
+ color: var(--ds-text);
1193
+ }
1194
+
1195
+ .chart-tooltip-label {
1196
+ margin-bottom: 8px;
1197
+ color: var(--ds-text-muted);
1198
+ font-size: 12px;
1199
+ font-weight: 600;
1200
+ line-height: 18px;
1201
+ }
1202
+
1203
+ .chart-tooltip-items {
1204
+ display: grid;
1205
+ gap: 6px;
1206
+ }
1207
+
1208
+ .chart-tooltip-item {
1209
+ display: grid;
1210
+ grid-template-columns: 8px minmax(0, 1fr) auto;
1211
+ gap: 8px;
1212
+ align-items: center;
1213
+ font-size: 12px;
1214
+ line-height: 18px;
1215
+ }
1216
+
1217
+ .chart-tooltip-marker {
1218
+ width: 7px;
1219
+ height: 7px;
1220
+ border-radius: 50%;
1221
+ }
1222
+
1223
+ .chart-tooltip-name {
1224
+ overflow: hidden;
1225
+ color: var(--ds-text-secondary);
1226
+ text-overflow: ellipsis;
1227
+ white-space: nowrap;
1228
+ }
1229
+
1230
+ .chart-tooltip-value {
1231
+ color: var(--ds-text);
1232
+ font-variant-numeric: tabular-nums;
1233
+ font-feature-settings: "tnum" 1, "lnum" 1;
1234
+ letter-spacing: 0;
1235
+ text-align: right;
1236
+ }
1237
+
1238
+ .analytics-layout-canvas,
1239
+ .dashboard-content-grid,
1240
+ .report-content-grid {
1241
+ margin: var(--ds-dashboard-section-gap) 0 0;
1242
+ }
1243
+
1244
+ .analytics-layout-canvas {
1245
+ position: relative;
1246
+ display: grid;
1247
+ gap: var(--ds-section-gap);
1248
+ min-height: 120px;
1249
+ transition:
1250
+ margin 180ms cubic-bezier(0.16, 1, 0.3, 1),
1251
+ padding 180ms cubic-bezier(0.16, 1, 0.3, 1);
1252
+ }
1253
+
1254
+ .analytics-layout-row {
1255
+ display: grid;
1256
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1257
+ gap: var(--ds-section-gap);
1258
+ align-items: stretch;
1259
+ }
1260
+
1261
+ .analytics-layout-row.is-full-row > .analytics-layout-item {
1262
+ grid-column: 1 / -1;
1263
+ }
1264
+
1265
+ .analytics-layout-item {
1266
+ position: relative;
1267
+ margin: -16px;
1268
+ min-width: 0;
1269
+ cursor: default;
1270
+ touch-action: auto;
1271
+ }
1272
+
1273
+ .analytics-layout-canvas.is-edit-mode .analytics-layout-item {
1274
+ touch-action: none;
1275
+ }
1276
+
1277
+ .analytics-layout-item-shell {
1278
+ position: relative;
1279
+ min-width: 0;
1280
+ height: 100%;
1281
+ padding: 16px;
1282
+ border-radius: var(--ds-radius-panel);
1283
+ }
1284
+
1285
+ .analytics-layout-canvas.is-edit-mode .analytics-layout-item-shell {
1286
+ padding-left: 16px;
1287
+ }
1288
+
1289
+ .analytics-layout-item:active {
1290
+ cursor: default;
1291
+ }
1292
+
1293
+ .analytics-layout-grab-handle {
1294
+ position: absolute;
1295
+ z-index: 12;
1296
+ top: 16px;
1297
+ left: 16px;
1298
+ display: flex;
1299
+ width: 40px;
1300
+ min-height: 32px;
1301
+ height: min(210px, calc(100% - 32px));
1302
+ align-items: flex-start;
1303
+ box-sizing: border-box;
1304
+ justify-content: center;
1305
+ padding: 0 4px;
1306
+ border-radius: 999px;
1307
+ cursor: grab;
1308
+ opacity: 0;
1309
+ touch-action: none;
1310
+ transition: opacity 140ms ease;
1311
+ }
1312
+
1313
+ .analytics-layout-canvas.is-edit-mode .analytics-layout-grab-handle {
1314
+ left: -24px;
1315
+ }
1316
+
1317
+ .analytics-layout-grab-handle-icon {
1318
+ width: 24px;
1319
+ height: 24px;
1320
+ color: var(--ds-text-muted);
1321
+ pointer-events: none;
1322
+ }
1323
+
1324
+ .analytics-layout-item:hover > .analytics-layout-grab-handle,
1325
+ .analytics-layout-item:focus-within > .analytics-layout-grab-handle,
1326
+ .analytics-layout-grab-handle:active {
1327
+ opacity: 1;
1328
+ }
1329
+
1330
+ .analytics-layout-grab-handle:active {
1331
+ cursor: grabbing;
1332
+ }
1333
+
1334
+ .is-layout-dragging .analytics-layout-grab-handle {
1335
+ opacity: 0;
1336
+ pointer-events: none;
1337
+ visibility: hidden;
1338
+ }
1339
+
1340
+ .analytics-layout-item-shell > * {
1341
+ height: 100%;
1342
+ }
1343
+
1344
+ .analytics-layout-item.is-dragging {
1345
+ opacity: 1;
1346
+ }
1347
+
1348
+ .analytics-layout-item.is-dragging > .analytics-layout-item-shell > * {
1349
+ opacity: 0.28;
1350
+ pointer-events: none;
1351
+ }
1352
+
1353
+ .analytics-layout-item.is-dragging > .analytics-layout-item-shell {
1354
+ border-radius: 24px;
1355
+ }
1356
+
1357
+ .analytics-layout-item.is-drop-target.intent-zone-before,
1358
+ .analytics-layout-item.is-drop-target.intent-zone-after,
1359
+ .analytics-layout-item.is-drop-target.intent-zone-end,
1360
+ .analytics-layout-item.is-drop-target.intent-zone-pair-before,
1361
+ .analytics-layout-item.is-drop-target.intent-zone-pair-after {
1362
+ --analytics-drop-target-active: 1;
1363
+ }
1364
+
1365
+ .analytics-layout-drop-indicator {
1366
+ position: absolute;
1367
+ z-index: 30;
1368
+ border-radius: 999px;
1369
+ background: var(--ds-blue-bright);
1370
+ box-shadow: 0 0 0 4px var(--ds-surface);
1371
+ pointer-events: none;
1372
+ }
1373
+
1374
+ .analytics-layout-drop-indicator.is-reorder {
1375
+ height: 2px;
1376
+ transform: translateY(-1px);
1377
+ }
1378
+
1379
+ .analytics-layout-drop-indicator.is-split {
1380
+ width: 2px;
1381
+ transform: translateX(-1px);
1382
+ }
1383
+
1384
+ .analytics-layout-ghost {
1385
+ position: fixed;
1386
+ z-index: 1000;
1387
+ overflow: hidden;
1388
+ padding: 16px;
1389
+ border-radius: 24px;
1390
+ opacity: 0.92;
1391
+ pointer-events: none;
1392
+ transform: translate3d(0, 0, 0) scale(1.01);
1393
+ box-shadow: var(--ds-shadow);
1394
+ }
1395
+
1396
+ .analytics-layout-ghost .viz-card-actions,
1397
+ .analytics-layout-ghost .viz-card-menu,
1398
+ .analytics-layout-ghost .viz-card-menu-button {
1399
+ display: none;
1400
+ }
1401
+
1402
+ .is-layout-dragging .viz-card,
1403
+ .is-layout-dragging .table-card,
1404
+ .is-layout-dragging .report-block {
1405
+ user-select: none;
1406
+ }
1407
+
1408
+ .is-layout-dragging .viz-card-actions,
1409
+ .is-layout-dragging .viz-card-menu,
1410
+ .is-layout-dragging .viz-card-menu-button {
1411
+ opacity: 0;
1412
+ pointer-events: none;
1413
+ visibility: hidden;
1414
+ }
1415
+
1416
+ .analytics-layout-item-chart.layout-half .viz-card .chart-frame {
1417
+ min-height: 340px;
1418
+ }
1419
+
1420
+ .viz-card {
1421
+ display: flex;
1422
+ flex-direction: column;
1423
+ }
1424
+
1425
+ .viz-card .chart-frame {
1426
+ flex: 1 1 0;
1427
+ width: 100%;
1428
+ height: auto;
1429
+ max-height: 100%;
1430
+ min-height: 0;
1431
+ }
1432
+
1433
+ .dashboard-content-grid .viz-card .chart-frame {
1434
+ flex: 0 0 auto;
1435
+ height: var(--ds-chart-body-height);
1436
+ max-height: none;
1437
+ min-height: var(--ds-chart-body-height);
1438
+ }
1439
+
1440
+ .chart-plot > .recharts-responsive-container {
1441
+ flex: 1 1 0;
1442
+ width: 100% !important;
1443
+ height: 100% !important;
1444
+ min-height: 0;
1445
+ }
1446
+
1447
+ .viz-card .empty-state,
1448
+ .viz-card .permission-card {
1449
+ flex: 1 1 0;
1450
+ min-height: 0;
1451
+ }
1452
+
1453
+ .markdown-body .markdown-edit-target {
1454
+ min-height: auto;
1455
+ }
1456
+
1457
+ .dashboard-system-block .markdown-body .markdown-edit-target {
1458
+ min-height: auto;
1459
+ }
1460
+
1461
+ .panel-title-row.viz-card__drag-handle {
1462
+ cursor: default;
1463
+ user-select: none;
1464
+ }
1465
+
1466
+ .viz-card-actions {
1467
+ position: relative;
1468
+ flex: 0 0 auto;
1469
+ }
1470
+
1471
+ .chart-panel .viz-card-actions {
1472
+ position: absolute;
1473
+ top: -4px;
1474
+ right: -4px;
1475
+ z-index: 10;
1476
+ }
1477
+
1478
+ .table-panel .viz-card-actions {
1479
+ position: absolute;
1480
+ top: -4px;
1481
+ right: calc(var(--ds-panel-padding) - 4px);
1482
+ z-index: 10;
1483
+ }
1484
+
1485
+ .report-block .viz-card-actions {
1486
+ position: absolute;
1487
+ top: -4px;
1488
+ right: -4px;
1489
+ z-index: 10;
1490
+ }
1491
+
1492
+ .report-stack-item .chart-panel .viz-card-actions,
1493
+ .report-stack-item .table-panel .viz-card-actions,
1494
+ .report-stack-item .report-block .viz-card-actions {
1495
+ top: 0;
1496
+ right: 0;
1497
+ }
1498
+
1499
+ .viz-card-menu-button {
1500
+ display: inline-flex;
1501
+ align-items: center;
1502
+ justify-content: center;
1503
+ aspect-ratio: 1 / 1;
1504
+ width: 32px;
1505
+ height: 32px;
1506
+ min-width: 32px;
1507
+ padding: 0;
1508
+ border: 1px solid var(--ds-menu-button-border);
1509
+ border-radius: 50%;
1510
+ background: var(--ds-surface);
1511
+ color: var(--ds-text-secondary);
1512
+ line-height: 0;
1513
+ opacity: 0;
1514
+ pointer-events: none;
1515
+ transform: translateY(-2px);
1516
+ visibility: hidden;
1517
+ transition:
1518
+ opacity 140ms ease,
1519
+ transform 140ms ease,
1520
+ visibility 140ms ease,
1521
+ background 140ms ease;
1522
+ }
1523
+
1524
+ .viz-card__no-drag,
1525
+ .viz-card button,
1526
+ .viz-card textarea,
1527
+ .viz-card input,
1528
+ .viz-card select,
1529
+ .viz-card a,
1530
+ .table-card button,
1531
+ .table-card input,
1532
+ .table-card select,
1533
+ .table-card textarea,
1534
+ .table-card a {
1535
+ cursor: auto;
1536
+ }
1537
+
1538
+ .viz-card button,
1539
+ .table-card button {
1540
+ cursor: pointer;
1541
+ }
1542
+
1543
+ .editable-chart-title,
1544
+ .editable-chart-subtitle {
1545
+ cursor: text;
1546
+ }
1547
+
1548
+ .viz-card-menu-button svg {
1549
+ display: block;
1550
+ }
1551
+
1552
+ .chart-panel:hover .viz-card-menu-button,
1553
+ .table-panel:hover .viz-card-menu-button,
1554
+ .report-block:hover .viz-card-menu-button,
1555
+ .report-stack-item:hover .viz-card-menu-button,
1556
+ .chart-panel:focus-within .viz-card-menu-button,
1557
+ .table-panel:focus-within .viz-card-menu-button,
1558
+ .report-block:focus-within .viz-card-menu-button,
1559
+ .report-stack-item:focus-within .viz-card-menu-button,
1560
+ .viz-card-menu-button[aria-expanded="true"] {
1561
+ opacity: 1;
1562
+ pointer-events: auto;
1563
+ transform: translateY(0);
1564
+ visibility: visible;
1565
+ }
1566
+
1567
+ .viz-card-menu-button:hover,
1568
+ .viz-card-menu-button[aria-expanded="true"] {
1569
+ border-color: var(--ds-menu-button-border);
1570
+ background: var(--ds-menu-hover-bg);
1571
+ }
1572
+
1573
+ .viz-card-menu {
1574
+ position: absolute;
1575
+ top: 42px;
1576
+ right: 0;
1577
+ z-index: 20;
1578
+ display: grid;
1579
+ min-width: 224px;
1580
+ max-width: calc(100vw - 24px);
1581
+ overflow: visible;
1582
+ padding: 8px;
1583
+ border: 1px solid var(--ds-menu-border);
1584
+ border-radius: 18px;
1585
+ background: var(--ds-menu-bg);
1586
+ color: var(--ds-menu-text);
1587
+ box-shadow: var(--ds-shadow);
1588
+ }
1589
+
1590
+ .viz-card-menu-item {
1591
+ display: grid;
1592
+ grid-template-columns: 22px minmax(0, 1fr);
1593
+ gap: 10px;
1594
+ align-items: center;
1595
+ justify-content: start;
1596
+ width: 100%;
1597
+ min-height: 38px;
1598
+ padding: 0 10px;
1599
+ border: 0;
1600
+ border-radius: 10px;
1601
+ background: transparent;
1602
+ color: var(--ds-menu-text);
1603
+ text-align: left;
1604
+ }
1605
+
1606
+ .viz-card-menu-item > span {
1607
+ min-width: 0;
1608
+ overflow: hidden;
1609
+ text-overflow: ellipsis;
1610
+ }
1611
+
1612
+ .viz-card-menu-item:hover,
1613
+ .viz-card-menu-item:focus-visible {
1614
+ background: var(--ds-menu-hover-bg);
1615
+ }
1616
+
1617
+ .viz-card-menu-item-danger {
1618
+ color: var(--ds-red);
1619
+ }
1620
+
1621
+ .viz-card-menu-item-danger .viz-card-menu-icon {
1622
+ color: var(--ds-red);
1623
+ }
1624
+
1625
+ .viz-card-menu-item-danger:hover,
1626
+ .viz-card-menu-item-danger:focus-visible {
1627
+ background: var(--ds-red-bg);
1628
+ }
1629
+
1630
+ .viz-card-menu-icon {
1631
+ display: inline-flex;
1632
+ align-items: center;
1633
+ justify-content: center;
1634
+ color: var(--ds-text-secondary);
1635
+ }
1636
+
1637
+ .viz-card-menu-section {
1638
+ display: grid;
1639
+ gap: 2px;
1640
+ margin-top: 6px;
1641
+ padding-top: 6px;
1642
+ border-top: 1px solid var(--ds-menu-border);
1643
+ }
1644
+
1645
+ .viz-card-menu-label {
1646
+ padding: 3px 10px 5px;
1647
+ color: var(--ds-text-muted);
1648
+ font-size: 11px;
1649
+ font-weight: 600;
1650
+ line-height: 14px;
1651
+ text-transform: uppercase;
1652
+ }
1653
+
1654
+ .viz-card-submenu {
1655
+ position: relative;
1656
+ display: grid;
1657
+ }
1658
+
1659
+ .viz-card-submenu::before {
1660
+ position: absolute;
1661
+ top: -14px;
1662
+ bottom: -14px;
1663
+ z-index: 29;
1664
+ width: 48px;
1665
+ content: "";
1666
+ }
1667
+
1668
+ .viz-card-submenu[data-submenu-placement="left"]::before {
1669
+ right: 100%;
1670
+ clip-path: polygon(100% 0, 0 50%, 100% 100%);
1671
+ }
1672
+
1673
+ .viz-card-submenu[data-submenu-placement="right"]::before {
1674
+ left: 100%;
1675
+ clip-path: polygon(0 0, 100% 50%, 0 100%);
1676
+ }
1677
+
1678
+ .viz-card-menu-submenu-trigger {
1679
+ grid-template-columns: 22px minmax(0, 1fr) 16px;
1680
+ }
1681
+
1682
+ .viz-card-menu-chevron {
1683
+ justify-self: end;
1684
+ color: var(--ds-text-tertiary);
1685
+ }
1686
+
1687
+ .viz-card-submenu-list {
1688
+ position: absolute;
1689
+ top: -8px;
1690
+ z-index: 30;
1691
+ display: grid;
1692
+ min-width: 224px;
1693
+ max-width: calc(100vw - 24px);
1694
+ padding: 8px;
1695
+ border: 1px solid var(--ds-menu-border);
1696
+ border-radius: 18px;
1697
+ background: var(--ds-menu-bg);
1698
+ color: var(--ds-menu-text);
1699
+ box-shadow: var(--ds-shadow);
1700
+ opacity: 0;
1701
+ pointer-events: none;
1702
+ transition:
1703
+ opacity 100ms ease,
1704
+ transform 100ms ease,
1705
+ visibility 100ms ease;
1706
+ transition-delay: 120ms;
1707
+ visibility: hidden;
1708
+ }
1709
+
1710
+ .viz-card-submenu-list::before {
1711
+ position: absolute;
1712
+ top: 0;
1713
+ bottom: 0;
1714
+ width: 8px;
1715
+ content: "";
1716
+ }
1717
+
1718
+ .viz-card-submenu-list--left {
1719
+ right: calc(100% + 8px);
1720
+ transform: translateX(4px) scale(0.98);
1721
+ transform-origin: top right;
1722
+ }
1723
+
1724
+ .viz-card-submenu-list--left::before {
1725
+ right: -8px;
1726
+ }
1727
+
1728
+ .viz-card-submenu-list--right {
1729
+ left: calc(100% + 8px);
1730
+ transform: translateX(-4px) scale(0.98);
1731
+ transform-origin: top left;
1732
+ }
1733
+
1734
+ .viz-card-submenu-list--right::before {
1735
+ left: -8px;
1736
+ }
1737
+
1738
+ .viz-card-submenu:hover .viz-card-submenu-list,
1739
+ .viz-card-submenu:focus-within .viz-card-submenu-list,
1740
+ .viz-card-submenu-list.is-open {
1741
+ opacity: 1;
1742
+ pointer-events: auto;
1743
+ transform: translateX(0) scale(1);
1744
+ transition-delay: 0ms;
1745
+ visibility: visible;
1746
+ }
1747
+
1748
+ .chart-type-menu-item {
1749
+ grid-template-columns: 22px minmax(0, 1fr) 18px;
1750
+ }
1751
+
1752
+ .chart-type-menu-section + .chart-type-menu-section {
1753
+ margin-top: 6px;
1754
+ border-top: 1px solid var(--ds-menu-border);
1755
+ padding-top: 6px;
1756
+ }
1757
+
1758
+ .chart-type-menu-heading {
1759
+ margin: 6px 10px 8px;
1760
+ color: var(--ds-text-muted);
1761
+ font-size: 12px;
1762
+ font-weight: 500;
1763
+ letter-spacing: 0.04em;
1764
+ line-height: 16px;
1765
+ text-transform: uppercase;
1766
+ }
1767
+
1768
+ .chart-type-menu-options {
1769
+ display: grid;
1770
+ gap: 0;
1771
+ }
1772
+
1773
+ .chart-type-menu-preview {
1774
+ width: 24px;
1775
+ height: 24px;
1776
+ color: var(--ds-blue-bright);
1777
+ }
1778
+
1779
+ .chart-type-menu-preview svg {
1780
+ display: block;
1781
+ width: 24px;
1782
+ height: auto;
1783
+ overflow: visible;
1784
+ }
1785
+
1786
+ .chart-type-menu-item[aria-checked="true"] {
1787
+ background: var(--ds-menu-selected-bg);
1788
+ }
1789
+
1790
+ .chart-type-menu-check {
1791
+ color: var(--ds-blue);
1792
+ }
1793
+
1794
+ .copy-toast {
1795
+ position: fixed;
1796
+ right: 20px;
1797
+ bottom: 20px;
1798
+ z-index: 50;
1799
+ padding: 10px 14px;
1800
+ border: 1px solid var(--ds-border-subtle);
1801
+ border-radius: var(--ds-radius-sm);
1802
+ background: var(--ds-surface);
1803
+ box-shadow: var(--ds-shadow);
1804
+ color: var(--ds-text-secondary);
1805
+ }
1806
+
1807
+ .copy-toast.error {
1808
+ border-color: var(--ds-red-bg);
1809
+ background: var(--ds-red-bg);
1810
+ color: var(--ds-red);
1811
+ }
1812
+
1813
+ .access-issue-strip {
1814
+ display: grid;
1815
+ gap: 12px;
1816
+ margin: 18px 0;
1817
+ padding: 16px;
1818
+ border: 1px solid var(--ds-red-bg);
1819
+ border-radius: var(--ds-radius-panel);
1820
+ background: var(--ds-red-bg);
1821
+ }
1822
+
1823
+ .access-issue-strip p {
1824
+ margin: 4px 0 0;
1825
+ color: var(--ds-text-secondary);
1826
+ }
1827
+
1828
+ .access-issue-strip ul {
1829
+ display: grid;
1830
+ gap: 8px;
1831
+ padding: 0;
1832
+ margin: 0;
1833
+ list-style: none;
1834
+ }
1835
+
1836
+ .access-issue-strip li {
1837
+ display: grid;
1838
+ grid-template-columns: minmax(120px, 0.35fr) minmax(0, 1fr) auto;
1839
+ gap: 10px;
1840
+ align-items: center;
1841
+ }
1842
+
1843
+ .access-issue-strip li span:first-child {
1844
+ color: var(--ds-red);
1845
+ font-weight: 600;
1846
+ }
1847
+
1848
+ .permission-card {
1849
+ display: grid;
1850
+ align-content: center;
1851
+ gap: 8px;
1852
+ min-height: 180px;
1853
+ padding: 20px;
1854
+ border: 1px dashed color-mix(in srgb, var(--ds-red) 38%, transparent);
1855
+ border-radius: 18px;
1856
+ background: var(--ds-red-bg);
1857
+ }
1858
+
1859
+ .permission-card p {
1860
+ margin: 0;
1861
+ }
1862
+
1863
+ .permission-card-title {
1864
+ color: var(--ds-red);
1865
+ font-weight: 700;
1866
+ }
1867
+
1868
+ .native-modal {
1869
+ width: min(1100px, calc(100vw - 48px));
1870
+ max-height: min(820px, calc(100vh - 48px));
1871
+ overflow: hidden;
1872
+ padding: 0;
1873
+ border: 0;
1874
+ border-radius: 24px;
1875
+ background: var(--ds-overlay-bg);
1876
+ animation: modal-enter 160ms cubic-bezier(0.16, 1, 0.3, 1);
1877
+ }
1878
+
1879
+ .native-modal::backdrop {
1880
+ background: rgba(0, 0, 0, 0.28);
1881
+ animation: modal-backdrop-enter 160ms ease-out;
1882
+ }
1883
+
1884
+ .native-modal.source-modal {
1885
+ width: min(800px, calc(100vw - 48px));
1886
+ }
1887
+
1888
+ .modal-panel {
1889
+ max-height: min(820px, calc(100vh - 48px));
1890
+ overflow: auto;
1891
+ padding: 24px;
1892
+ border: 1px solid var(--ds-border-subtle);
1893
+ border-radius: inherit;
1894
+ background: var(--ds-overlay-bg);
1895
+ box-shadow: var(--ds-shadow);
1896
+ }
1897
+
1898
+ .source-modal-panel {
1899
+ background: var(--ds-overlay-bg);
1900
+ padding: 20px;
1901
+ overscroll-behavior: contain;
1902
+ }
1903
+
1904
+ .native-modal.chart-explore-modal {
1905
+ width: min(1180px, calc(100vw - 96px));
1906
+ max-width: calc(100vw - 96px);
1907
+ height: min(760px, calc(100vh - 96px));
1908
+ max-height: calc(100vh - 96px);
1909
+ }
1910
+
1911
+ .chart-explore-panel {
1912
+ display: flex;
1913
+ flex-direction: column;
1914
+ width: 100%;
1915
+ height: 100%;
1916
+ max-height: 100%;
1917
+ overflow: hidden;
1918
+ padding: 0;
1919
+ }
1920
+
1921
+ .chart-explore-body {
1922
+ display: grid;
1923
+ flex: 1 1 auto;
1924
+ min-height: 0;
1925
+ }
1926
+
1927
+ .chart-explore-panel .unified-chart-detail-page,
1928
+ .chart-explore-panel .unified-chart-detail-frame {
1929
+ height: 100%;
1930
+ min-height: 0;
1931
+ }
1932
+
1933
+ .chart-explore-panel .chart-detail-loading {
1934
+ min-height: 0;
1935
+ }
1936
+
1937
+ .chart-hosted-explore-panel {
1938
+ gap: 72px;
1939
+ padding: 28px;
1940
+ }
1941
+
1942
+ .chart-hosted-explore-header {
1943
+ flex: 0 0 auto;
1944
+ margin-bottom: 0;
1945
+ }
1946
+
1947
+ .chart-hosted-explore-body {
1948
+ border: 1px dashed var(--ds-border-subtle);
1949
+ border-radius: 28px;
1950
+ }
1951
+
1952
+ @keyframes modal-enter {
1953
+ from {
1954
+ opacity: 0;
1955
+ transform: translateY(8px) scale(0.985);
1956
+ }
1957
+ to {
1958
+ opacity: 1;
1959
+ transform: translateY(0) scale(1);
1960
+ }
1961
+ }
1962
+
1963
+ @keyframes modal-backdrop-enter {
1964
+ from {
1965
+ opacity: 0;
1966
+ }
1967
+ to {
1968
+ opacity: 1;
1969
+ }
1970
+ }
1971
+
1972
+ .modal-header {
1973
+ display: flex;
1974
+ gap: 16px;
1975
+ align-items: flex-start;
1976
+ justify-content: space-between;
1977
+ margin-bottom: 16px;
1978
+ }
1979
+
1980
+ .modal-header h2 {
1981
+ margin: 0;
1982
+ font-size: 20px;
1983
+ line-height: 26px;
1984
+ }
1985
+
1986
+ .modal-header p {
1987
+ margin: 4px 0 0;
1988
+ color: var(--ds-text-muted);
1989
+ }
1990
+
1991
+ .modal-close-button {
1992
+ display: grid;
1993
+ flex: 0 0 auto;
1994
+ place-items: center;
1995
+ width: 32px;
1996
+ height: 32px;
1997
+ padding: 0;
1998
+ border: 0;
1999
+ border-radius: var(--ds-radius-pill);
2000
+ background: transparent;
2001
+ color: var(--ds-text-muted);
2002
+ }
2003
+
2004
+ .modal-close-button:hover {
2005
+ background: var(--ds-menu-hover-bg);
2006
+ color: var(--ds-text);
2007
+ }
2008
+
2009
+ .modal-close-button:focus-visible {
2010
+ outline: 2px solid var(--ds-blue);
2011
+ outline-offset: 2px;
2012
+ }
2013
+
2014
+ .unified-chart-detail-page {
2015
+ display: grid;
2016
+ grid-template-rows: minmax(0, 1fr);
2017
+ min-height: 100vh;
2018
+ background: var(--ds-bg);
2019
+ }
2020
+
2021
+ .unified-chart-detail-frame {
2022
+ display: block;
2023
+ width: 100%;
2024
+ height: 100%;
2025
+ min-height: 100vh;
2026
+ border: 0;
2027
+ background: var(--ds-bg);
2028
+ }
2029
+
2030
+ .chart-detail-loading {
2031
+ display: grid;
2032
+ min-height: 100vh;
2033
+ place-items: center;
2034
+ color: var(--ds-muted);
2035
+ font-size: 13px;
2036
+ }
2037
+
2038
+ .shared-chart-detail-frame {
2039
+ display: block;
2040
+ width: 100%;
2041
+ height: 100vh;
2042
+ border: 0;
2043
+ background: var(--ds-bg);
2044
+ }
2045
+
2046
+ .details-grid {
2047
+ display: grid;
2048
+ grid-template-columns: minmax(120px, 0.24fr) minmax(0, 1fr);
2049
+ gap: 12px 16px;
2050
+ margin: 0;
2051
+ min-width: 0;
2052
+ max-width: 100%;
2053
+ }
2054
+
2055
+ .details-grid dt {
2056
+ color: var(--ds-text-muted);
2057
+ font-weight: 600;
2058
+ }
2059
+
2060
+ .details-grid dd {
2061
+ margin: 0;
2062
+ min-width: 0;
2063
+ max-width: 100%;
2064
+ }
2065
+
2066
+ .source-modal-sections {
2067
+ display: grid;
2068
+ gap: 20px;
2069
+ }
2070
+
2071
+ .source-modal-section {
2072
+ display: grid;
2073
+ gap: 12px;
2074
+ min-width: 0;
2075
+ }
2076
+
2077
+ .source-modal-section h3 {
2078
+ margin: 0;
2079
+ color: var(--ds-text);
2080
+ font-size: 14px;
2081
+ font-weight: 600;
2082
+ line-height: 20px;
2083
+ }
2084
+
2085
+ .source-details-grid {
2086
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2087
+ gap: 12px 20px;
2088
+ }
2089
+
2090
+ .source-details-grid > div {
2091
+ display: grid;
2092
+ gap: 4px;
2093
+ min-width: 0;
2094
+ }
2095
+
2096
+ .source-detail-list {
2097
+ display: grid;
2098
+ gap: 6px;
2099
+ }
2100
+
2101
+ .source-detail-list-item {
2102
+ overflow-wrap: anywhere;
2103
+ }
2104
+
2105
+ .source-data-table {
2106
+ width: 100%;
2107
+ min-width: 0;
2108
+ }
2109
+
2110
+ .source-data-table .table-scroll-content {
2111
+ width: 100%;
2112
+ min-width: 100%;
2113
+ }
2114
+
2115
+ .source-query-shell {
2116
+ width: 100%;
2117
+ min-width: 0;
2118
+ max-width: 100%;
2119
+ overflow: hidden;
2120
+ border: 1px solid var(--ds-border-subtle);
2121
+ border-radius: var(--ds-radius-sm);
2122
+ background: var(--ds-overlay-bg);
2123
+ }
2124
+
2125
+ .source-query-meta {
2126
+ display: flex;
2127
+ gap: 12px;
2128
+ align-items: center;
2129
+ justify-content: space-between;
2130
+ padding: 9px 14px;
2131
+ border-bottom: 1px solid var(--ds-border-subtle);
2132
+ color: var(--ds-text-muted);
2133
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
2134
+ font-size: 12px;
2135
+ line-height: 18px;
2136
+ min-width: 0;
2137
+ overflow-wrap: anywhere;
2138
+ }
2139
+
2140
+ .source-query-meta span {
2141
+ min-width: 0;
2142
+ }
2143
+
2144
+ .source-query-meta a {
2145
+ color: inherit;
2146
+ }
2147
+
2148
+ .source-query-copy {
2149
+ display: inline-flex;
2150
+ flex: 0 0 auto;
2151
+ gap: 6px;
2152
+ align-items: center;
2153
+ justify-content: center;
2154
+ height: 28px;
2155
+ min-height: 28px;
2156
+ padding: 0 9px;
2157
+ border-radius: var(--ds-radius-pill);
2158
+ font-family: var(--ds-font);
2159
+ font-size: 12px;
2160
+ font-weight: 600;
2161
+ line-height: 18px;
2162
+ }
2163
+
2164
+ .source-query {
2165
+ width: 100%;
2166
+ min-width: 0;
2167
+ max-width: 100%;
2168
+ max-height: 430px;
2169
+ overflow-x: hidden;
2170
+ overflow-y: auto;
2171
+ margin: 0;
2172
+ padding: 14px;
2173
+ background: var(--ds-overlay-bg);
2174
+ color: var(--ds-text-primary);
2175
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
2176
+ font-size: 12px;
2177
+ line-height: 18px;
2178
+ tab-size: 2;
2179
+ overflow-wrap: anywhere;
2180
+ white-space: pre-wrap;
2181
+ word-break: break-word;
2182
+ }
2183
+
2184
+ .source-query code {
2185
+ display: block;
2186
+ width: 100%;
2187
+ min-width: 0;
2188
+ font: inherit;
2189
+ overflow-wrap: inherit;
2190
+ white-space: inherit;
2191
+ word-break: inherit;
2192
+ }
2193
+
2194
+ .sql-token.comment {
2195
+ color: var(--ds-text-muted);
2196
+ }
2197
+
2198
+ .sql-token.keyword {
2199
+ color: var(--ds-blue);
2200
+ font-weight: 700;
2201
+ }
2202
+
2203
+ .sql-token.function {
2204
+ color: var(--ds-green);
2205
+ font-weight: 600;
2206
+ }
2207
+
2208
+ .sql-token.string {
2209
+ color: var(--ds-orange);
2210
+ }
2211
+
2212
+ .sql-token.number {
2213
+ color: var(--ds-pink);
2214
+ }
2215
+
2216
+ .sql-token.punctuation {
2217
+ color: var(--ds-text-tertiary);
2218
+ }
2219
+
2220
+ .sql-token.identifier {
2221
+ color: var(--ds-text);
2222
+ }
2223
+
2224
+ .source-error {
2225
+ color: var(--ds-red);
2226
+ }
2227
+
2228
+ .empty-state {
2229
+ padding: 22px;
2230
+ border: 1px dashed var(--ds-border-subtle);
2231
+ border-radius: var(--ds-radius-panel);
2232
+ color: var(--ds-text-muted);
2233
+ text-align: center;
2234
+ }
2235
+
2236
+ .error-state {
2237
+ margin-top: 32px;
2238
+ color: var(--ds-red);
2239
+ }
2240
+
2241
+ .leaderboard {
2242
+ display: grid;
2243
+ grid-template-rows: repeat(var(--leaderboard-row-count), minmax(0, 1fr));
2244
+ align-content: stretch;
2245
+ gap: 8px;
2246
+ height: 100%;
2247
+ min-height: 0;
2248
+ overflow: hidden;
2249
+ }
2250
+
2251
+ .leaderboard-with-caption {
2252
+ display: grid;
2253
+ grid-template-rows: minmax(0, 1fr) auto;
2254
+ gap: 6px;
2255
+ height: 100%;
2256
+ min-height: 0;
2257
+ }
2258
+
2259
+ .leaderboard-row {
2260
+ position: relative;
2261
+ display: grid;
2262
+ grid-template-columns: minmax(0, 1fr) auto;
2263
+ gap: 8px;
2264
+ align-items: center;
2265
+ min-height: 0;
2266
+ overflow: hidden;
2267
+ padding: 4px 12px;
2268
+ border-radius: var(--ds-radius-pill);
2269
+ }
2270
+
2271
+ .leaderboard-row::before {
2272
+ position: absolute;
2273
+ top: 0;
2274
+ right: auto;
2275
+ bottom: 0;
2276
+ left: 0;
2277
+ width: var(--bar-width);
2278
+ height: 100%;
2279
+ border-radius: var(--ds-radius-pill);
2280
+ background: var(--ds-surface-tertiary);
2281
+ content: "";
2282
+ }
2283
+
2284
+ .leaderboard-row.positive {
2285
+ color: var(--ds-text);
2286
+ }
2287
+
2288
+ .leaderboard-row.negative::before {
2289
+ background: var(--ds-surface-tertiary);
2290
+ }
2291
+
2292
+ .leaderboard-label,
2293
+ .leaderboard-value {
2294
+ position: relative;
2295
+ z-index: 1;
2296
+ overflow: hidden;
2297
+ color: var(--ds-text-primary);
2298
+ font-size: 14px;
2299
+ letter-spacing: -0.14px;
2300
+ line-height: 20px;
2301
+ text-overflow: ellipsis;
2302
+ white-space: nowrap;
2303
+ }
2304
+
2305
+ .leaderboard-value {
2306
+ color: var(--ds-text-primary);
2307
+ font-weight: 500;
2308
+ font-variant-numeric: tabular-nums;
2309
+ font-feature-settings: "tnum" 1, "lnum" 1;
2310
+ letter-spacing: 0;
2311
+ text-align: right;
2312
+ }
2313
+
2314
+ .leaderboard-caption {
2315
+ display: block;
2316
+ max-width: 100%;
2317
+ min-height: 14px;
2318
+ overflow: hidden;
2319
+ padding: 0 10px;
2320
+ color: var(--ds-text-muted);
2321
+ font-size: 12px;
2322
+ line-height: 14px;
2323
+ text-overflow: ellipsis;
2324
+ white-space: nowrap;
2325
+ }
2326
+
2327
+ button.leaderboard-caption {
2328
+ width: fit-content;
2329
+ border: 0;
2330
+ appearance: none;
2331
+ background: transparent;
2332
+ cursor: pointer;
2333
+ font-family: inherit;
2334
+ text-align: left;
2335
+ }
2336
+
2337
+ button.leaderboard-caption:hover {
2338
+ color: var(--ds-text-primary);
2339
+ text-decoration: underline;
2340
+ }
2341
+
2342
+ button.leaderboard-caption:focus-visible {
2343
+ border-radius: var(--ds-radius-xs, 4px);
2344
+ outline: 2px solid var(--ds-blue-bright);
2345
+ outline-offset: 2px;
2346
+ }
2347
+
2348
+ .horizontal-bar-chart,
2349
+ .sparkline-panel,
2350
+ .heatmap {
2351
+ display: grid;
2352
+ gap: 8px;
2353
+ overflow: hidden;
2354
+ }
2355
+
2356
+ .horizontal-bar-row {
2357
+ display: grid;
2358
+ grid-template-columns: minmax(88px, 0.9fr) minmax(0, 1.6fr) auto;
2359
+ gap: 10px;
2360
+ align-items: center;
2361
+ min-height: 0;
2362
+ }
2363
+
2364
+ .horizontal-bar-label,
2365
+ .horizontal-bar-value {
2366
+ overflow: hidden;
2367
+ color: var(--ds-text-secondary);
2368
+ font-size: 12px;
2369
+ line-height: 16px;
2370
+ text-overflow: ellipsis;
2371
+ white-space: nowrap;
2372
+ }
2373
+
2374
+ .horizontal-bar-value {
2375
+ color: var(--ds-text);
2376
+ font-variant-numeric: tabular-nums;
2377
+ font-feature-settings: "tnum" 1, "lnum" 1;
2378
+ text-align: right;
2379
+ }
2380
+
2381
+ .horizontal-bar-track {
2382
+ position: relative;
2383
+ height: 12px;
2384
+ overflow: hidden;
2385
+ border-radius: var(--ds-radius-pill);
2386
+ background: var(--ds-surface-tertiary);
2387
+ }
2388
+
2389
+ .horizontal-bar-fill {
2390
+ position: absolute;
2391
+ inset: 0 auto 0 0;
2392
+ width: var(--bar-width);
2393
+ border-radius: inherit;
2394
+ background: var(--series-color, var(--ds-blue));
2395
+ }
2396
+
2397
+ .sparkline-panel {
2398
+ grid-template-rows: auto minmax(0, 1fr);
2399
+ padding-top: 6px;
2400
+ }
2401
+
2402
+ .sparkline-value-row {
2403
+ display: flex;
2404
+ align-items: baseline;
2405
+ justify-content: space-between;
2406
+ gap: 12px;
2407
+ }
2408
+
2409
+ .sparkline-value {
2410
+ color: var(--ds-text);
2411
+ font-size: 30px;
2412
+ font-weight: 650;
2413
+ line-height: 1;
2414
+ letter-spacing: 0;
2415
+ }
2416
+
2417
+ .delta {
2418
+ font-size: 12px;
2419
+ font-weight: 600;
2420
+ line-height: 16px;
2421
+ }
2422
+
2423
+ .delta.positive {
2424
+ color: var(--ds-green);
2425
+ }
2426
+
2427
+ .delta.negative {
2428
+ color: var(--ds-red);
2429
+ }
2430
+
2431
+ .sparkline-svg {
2432
+ width: 100%;
2433
+ height: 100%;
2434
+ min-height: 120px;
2435
+ overflow: visible;
2436
+ }
2437
+
2438
+ .sparkline-line {
2439
+ fill: none;
2440
+ stroke: var(--ds-blue);
2441
+ stroke-linecap: round;
2442
+ stroke-linejoin: round;
2443
+ stroke-width: 2.5;
2444
+ vector-effect: non-scaling-stroke;
2445
+ }
2446
+
2447
+ .sparkline-fill {
2448
+ fill: color-mix(in srgb, var(--ds-blue-bright) 10%, transparent);
2449
+ stroke: none;
2450
+ }
2451
+
2452
+ .heatmap {
2453
+ position: relative;
2454
+ display: block;
2455
+ width: 100%;
2456
+ height: 100%;
2457
+ overflow: hidden;
2458
+ }
2459
+
2460
+ .heatmap svg {
2461
+ display: block;
2462
+ width: 100%;
2463
+ height: 100%;
2464
+ }
2465
+
2466
+ .funnel-label {
2467
+ fill: var(--ds-chart-funnel-label, #ffffff);
2468
+ font-family: var(--ds-font);
2469
+ font-size: 12px;
2470
+ font-weight: 500;
2471
+ letter-spacing: 0;
2472
+ line-height: 16px;
2473
+ pointer-events: none;
2474
+ }
2475
+
2476
+ .funnel-label-text {
2477
+ fill-opacity: 0.92;
2478
+ }
2479
+
2480
+ .funnel-label-value {
2481
+ fill-opacity: 1;
2482
+ }
2483
+
2484
+ .funnel-segment {
2485
+ shape-rendering: geometricPrecision;
2486
+ }
2487
+
2488
+ .box-plot-bar-shape,
2489
+ .waterfall-bar-shape {
2490
+ pointer-events: none;
2491
+ }
2492
+
2493
+ .box-plot-box {
2494
+ fill: var(--ds-blue);
2495
+ stroke: var(--ds-blue);
2496
+ stroke-width: 1;
2497
+ vector-effect: non-scaling-stroke;
2498
+ transition:
2499
+ fill 140ms ease,
2500
+ stroke-width 140ms ease;
2501
+ }
2502
+
2503
+ .box-plot-median {
2504
+ stroke: var(--ds-surface);
2505
+ stroke-width: 1.5;
2506
+ stroke-linecap: round;
2507
+ vector-effect: non-scaling-stroke;
2508
+ }
2509
+
2510
+ .box-plot-whisker {
2511
+ stroke: var(--ds-border-strong);
2512
+ stroke-width: 1.5;
2513
+ stroke-linecap: round;
2514
+ vector-effect: non-scaling-stroke;
2515
+ }
2516
+
2517
+ .box-plot-bar-shape.active .box-plot-box {
2518
+ fill: var(--ds-blue-600);
2519
+ stroke: var(--ds-blue-600);
2520
+ stroke-width: 1.5;
2521
+ }
2522
+
2523
+ .waterfall-bar {
2524
+ vector-effect: non-scaling-stroke;
2525
+ transition:
2526
+ opacity 140ms ease,
2527
+ filter 140ms ease;
2528
+ }
2529
+
2530
+ .waterfall-bar.positive {
2531
+ fill: var(--ds-blue);
2532
+ }
2533
+
2534
+ .waterfall-bar.negative {
2535
+ fill: var(--ds-red);
2536
+ }
2537
+
2538
+ .waterfall-connector {
2539
+ stroke: var(--ds-border-subtle);
2540
+ stroke-linecap: round;
2541
+ vector-effect: non-scaling-stroke;
2542
+ }
2543
+
2544
+ .heatmap-hover-cursor {
2545
+ fill: var(--ds-surface-tertiary);
2546
+ opacity: 0.72;
2547
+ pointer-events: none;
2548
+ transition:
2549
+ x 160ms cubic-bezier(0.16, 1, 0.3, 1),
2550
+ y 160ms cubic-bezier(0.16, 1, 0.3, 1),
2551
+ width 160ms cubic-bezier(0.16, 1, 0.3, 1),
2552
+ height 160ms cubic-bezier(0.16, 1, 0.3, 1),
2553
+ opacity 120ms ease;
2554
+ animation: heatmap-cursor-in 120ms cubic-bezier(0.16, 1, 0.3, 1) both;
2555
+ }
2556
+
2557
+ .heatmap-cell {
2558
+ stroke: var(--ds-surface);
2559
+ stroke-width: 2;
2560
+ transform-box: fill-box;
2561
+ transform-origin: center;
2562
+ vector-effect: non-scaling-stroke;
2563
+ transition:
2564
+ transform 160ms cubic-bezier(0.16, 1, 0.3, 1),
2565
+ filter 140ms ease,
2566
+ stroke 140ms ease,
2567
+ stroke-width 140ms ease;
2568
+ }
2569
+
2570
+ .heatmap-cell-group {
2571
+ outline: none;
2572
+ }
2573
+
2574
+ .heatmap-cell-group.active .heatmap-cell,
2575
+ .heatmap-cell-group:hover .heatmap-cell,
2576
+ .heatmap-cell-group:focus .heatmap-cell {
2577
+ filter: drop-shadow(0 2px 4px rgb(15 23 42 / 0.12));
2578
+ stroke: var(--ds-blue);
2579
+ stroke-width: 2;
2580
+ transform: scale(1.015);
2581
+ }
2582
+
2583
+ .heatmap-tooltip {
2584
+ position: absolute;
2585
+ z-index: 40;
2586
+ animation: dashboard-menu-in 120ms cubic-bezier(0.16, 1, 0.3, 1) both;
2587
+ pointer-events: none;
2588
+ }
2589
+
2590
+ @keyframes heatmap-cursor-in {
2591
+ from {
2592
+ opacity: 0;
2593
+ transform: scale(0.98);
2594
+ }
2595
+
2596
+ to {
2597
+ opacity: 0.72;
2598
+ transform: scale(1);
2599
+ }
2600
+ }
2601
+
2602
+ .table-panel {
2603
+ padding: 0;
2604
+ }
2605
+
2606
+ .table-panel .panel-header {
2607
+ padding: 0;
2608
+ }
2609
+
2610
+ .table-card__drag-handle {
2611
+ cursor: default;
2612
+ user-select: none;
2613
+ }
2614
+
2615
+ .report-stack-shell {
2616
+ margin: 8px 0;
2617
+ min-width: 0;
2618
+ }
2619
+
2620
+ .report-block-stack {
2621
+ margin-top: 24px;
2622
+ }
2623
+
2624
+ .report-stack-metric-strip .kpi-strip {
2625
+ margin: 0;
2626
+ }
2627
+
2628
+ .report-metric-strip-block {
2629
+ position: relative;
2630
+ min-width: 0;
2631
+ overflow: visible;
2632
+ }
2633
+
2634
+ .report-metric-strip-block .kpi-strip {
2635
+ margin: 0;
2636
+ }
2637
+
2638
+ .report-metric-strip-block .viz-card-actions {
2639
+ position: absolute;
2640
+ top: 0;
2641
+ right: 0;
2642
+ z-index: 10;
2643
+ }
2644
+
2645
+ .report-metric-strip-block .viz-card-menu-button {
2646
+ margin: 4px;
2647
+ }
2648
+
2649
+ .report-stack-item {
2650
+ position: relative;
2651
+ box-sizing: border-box;
2652
+ min-width: 0;
2653
+ }
2654
+
2655
+ .report-stack-item-markdown {
2656
+ margin-top: -8px;
2657
+ padding-top: 0;
2658
+ }
2659
+
2660
+ .report-stack-item-markdown .report-block .viz-card-actions {
2661
+ top: 0;
2662
+ right: 0;
2663
+ }
2664
+
2665
+ .report-stack-item .markdown-edit-target,
2666
+ .report-stack-item .viz-card-menu-button,
2667
+ .report-stack-item a,
2668
+ .report-stack-item input,
2669
+ .report-stack-item .rich-markdown-editor,
2670
+ .report-stack-item textarea,
2671
+ .report-stack-item select {
2672
+ cursor: auto;
2673
+ }
2674
+
2675
+ .report-stack-item button,
2676
+ .report-stack-item a {
2677
+ cursor: pointer;
2678
+ }
2679
+
2680
+ .report-stack-item .markdown-edit-target,
2681
+ .report-stack-item .editable-chart-title,
2682
+ .report-stack-item .editable-chart-subtitle,
2683
+ .report-stack-item .rich-markdown-editor,
2684
+ .report-stack-item textarea {
2685
+ cursor: text;
2686
+ user-select: text;
2687
+ }
2688
+
2689
+ .report-block-stack .chart-panel {
2690
+ min-height: var(--ds-chart-body-height);
2691
+ }
2692
+
2693
+ .report-block-stack .viz-card .chart-frame {
2694
+ flex: 0 0 320px;
2695
+ height: 320px;
2696
+ min-height: 320px;
2697
+ max-height: 320px;
2698
+ }
2699
+
2700
+ .report-block {
2701
+ position: relative;
2702
+ display: flex;
2703
+ min-width: 0;
2704
+ min-height: 0;
2705
+ flex-direction: column;
2706
+ overflow: visible;
2707
+ }
2708
+
2709
+ .report-block .kpi-card {
2710
+ height: 100%;
2711
+ border: 0;
2712
+ box-shadow: none;
2713
+ }
2714
+
2715
+ .report-block-body {
2716
+ display: grid;
2717
+ gap: 8px;
2718
+ padding: 0;
2719
+ overflow: visible;
2720
+ color: var(--ds-text);
2721
+ }
2722
+
2723
+ .report-markdown-block .report-block-body {
2724
+ gap: 0;
2725
+ }
2726
+
2727
+ .report-html-block {
2728
+ gap: 10px;
2729
+ }
2730
+
2731
+ .report-html-block .viz-card-actions {
2732
+ z-index: 30;
2733
+ }
2734
+
2735
+ .report-html-frame {
2736
+ box-sizing: border-box;
2737
+ display: block;
2738
+ width: 100%;
2739
+ min-width: 0;
2740
+ border: 0;
2741
+ background: transparent;
2742
+ overflow: hidden;
2743
+ }
2744
+
2745
+ .report-html-editor {
2746
+ box-sizing: border-box;
2747
+ width: 100%;
2748
+ min-height: 360px;
2749
+ padding: 12px;
2750
+ resize: vertical;
2751
+ border: 1px solid var(--ds-border-subtle);
2752
+ border-radius: 8px;
2753
+ background: var(--ds-surface);
2754
+ color: var(--ds-text-primary);
2755
+ font: 12px/18px ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
2756
+ white-space: pre;
2757
+ }
2758
+
2759
+ .report-html-editor:focus {
2760
+ outline: 2px solid color-mix(in srgb, var(--ds-blue) 32%, transparent);
2761
+ outline-offset: 2px;
2762
+ }
2763
+
2764
+ .report-markdown-editor.markdown-render,
2765
+ .report-markdown-editor.rich-markdown-editor {
2766
+ border: 0;
2767
+ background: transparent;
2768
+ color: var(--ds-text-primary);
2769
+ font-size: 14px;
2770
+ line-height: 22px;
2771
+ }
2772
+
2773
+ .report-markdown-editor.markdown-render {
2774
+ box-sizing: border-box;
2775
+ width: calc(100% + 16px);
2776
+ max-width: calc(100% + 16px);
2777
+ margin: -6px -8px;
2778
+ padding: 6px 8px;
2779
+ border-radius: 12px;
2780
+ }
2781
+
2782
+ .report-markdown-editor.markdown-render h1 {
2783
+ margin: 0 0 10px;
2784
+ color: var(--ds-text-primary);
2785
+ font-family: var(--ds-font-heading, var(--ds-font));
2786
+ font-size: 28px;
2787
+ font-weight: 500;
2788
+ line-height: 34px;
2789
+ letter-spacing: 0;
2790
+ }
2791
+
2792
+ .report-markdown-editor.markdown-render h1:last-child {
2793
+ margin-bottom: 0;
2794
+ }
2795
+
2796
+ .report-markdown-editor.markdown-render h2 {
2797
+ margin: 0 0 8px;
2798
+ color: var(--ds-text-primary);
2799
+ font-family: var(--ds-font-heading, var(--ds-font));
2800
+ font-size: 20px;
2801
+ font-weight: 500;
2802
+ line-height: 26px;
2803
+ letter-spacing: 0;
2804
+ }
2805
+
2806
+ .report-markdown-editor.markdown-render h3 {
2807
+ margin: 0 0 8px;
2808
+ color: var(--ds-text-primary);
2809
+ font-size: 16px;
2810
+ font-weight: 500;
2811
+ line-height: 24px;
2812
+ letter-spacing: 0;
2813
+ }
2814
+
2815
+ .report-markdown-editor.markdown-render p,
2816
+ .report-markdown-editor.markdown-render li {
2817
+ margin: 0 0 12px;
2818
+ color: var(--ds-text-primary);
2819
+ font-size: 14px;
2820
+ font-weight: 400;
2821
+ line-height: 22px;
2822
+ letter-spacing: 0;
2823
+ }
2824
+
2825
+ .report-markdown-editor.markdown-render ul,
2826
+ .report-markdown-editor.markdown-render ol {
2827
+ display: block;
2828
+ margin: 0 0 12px;
2829
+ padding-left: 20px;
2830
+ }
2831
+
2832
+ .report-markdown-editor.markdown-render li + li {
2833
+ margin-top: 6px;
2834
+ }
2835
+
2836
+ .report-markdown-editor.markdown-render p:last-child,
2837
+ .report-markdown-editor.markdown-render ul:last-child,
2838
+ .report-markdown-editor.markdown-render ol:last-child,
2839
+ .report-markdown-editor.markdown-render blockquote:last-child {
2840
+ margin-bottom: 0;
2841
+ }
2842
+
2843
+ .report-markdown-editor.rich-markdown-editor {
2844
+ min-height: 44px;
2845
+ color: var(--ds-text-primary);
2846
+ }
2847
+
2848
+ .dashboard-system-block .report-markdown-editor.rich-markdown-editor {
2849
+ min-height: 44px;
2850
+ }
2851
+
2852
+ .report-markdown-editor.rich-markdown-editor:focus {
2853
+ background: var(--ds-edit-hover-bg);
2854
+ }
2855
+
2856
+ .report-block-body p {
2857
+ margin: 0;
2858
+ color: var(--ds-text-primary);
2859
+ font-size: 14px;
2860
+ line-height: 22px;
2861
+ }
2862
+
2863
+ .report-block-body strong {
2864
+ color: inherit;
2865
+ font-weight: 600;
2866
+ }
2867
+
2868
+ .analytics-layout-item-table {
2869
+ min-width: 0;
2870
+ }
2871
+
2872
+ .table-wrap {
2873
+ box-sizing: border-box;
2874
+ width: 100%;
2875
+ max-width: 100%;
2876
+ min-width: 0;
2877
+ overflow-x: auto;
2878
+ overflow-y: hidden;
2879
+ padding-bottom: 10px;
2880
+ scrollbar-gutter: stable;
2881
+ }
2882
+
2883
+ .table-scroll-content {
2884
+ box-sizing: border-box;
2885
+ width: max-content;
2886
+ min-width: 100%;
2887
+ }
2888
+
2889
+ .report-stack-item-table .table-wrap {
2890
+ width: 100%;
2891
+ max-width: 100%;
2892
+ margin-right: 0;
2893
+ margin-left: 0;
2894
+ }
2895
+
2896
+ .report-stack-item-table .table-scroll-content {
2897
+ padding-right: 0;
2898
+ padding-left: 0;
2899
+ }
2900
+
2901
+ .table-wrap.fullscreen {
2902
+ max-height: min(68vh, 720px);
2903
+ overflow: auto;
2904
+ }
2905
+
2906
+ table {
2907
+ width: max-content;
2908
+ min-width: 100%;
2909
+ border-collapse: collapse;
2910
+ table-layout: auto;
2911
+ }
2912
+
2913
+ .data-table-resizable {
2914
+ table-layout: fixed;
2915
+ }
2916
+
2917
+ th,
2918
+ td {
2919
+ border-bottom: 1px solid var(--ds-border-subtle);
2920
+ max-width: none;
2921
+ overflow: hidden;
2922
+ text-align: left;
2923
+ text-overflow: ellipsis;
2924
+ vertical-align: top;
2925
+ }
2926
+
2927
+ th {
2928
+ position: relative;
2929
+ min-height: 30px;
2930
+ overflow: visible;
2931
+ padding: 0;
2932
+ color: var(--ds-text-tertiary);
2933
+ font-size: 12px;
2934
+ font-weight: 600;
2935
+ line-height: 18px;
2936
+ letter-spacing: 0;
2937
+ }
2938
+
2939
+ td {
2940
+ padding: 8px 16px 8px 0;
2941
+ color: var(--ds-table-row-text);
2942
+ font-size: 14px;
2943
+ line-height: 22px;
2944
+ white-space: normal;
2945
+ }
2946
+
2947
+ th:last-child,
2948
+ td:last-child {
2949
+ padding-right: 0;
2950
+ }
2951
+
2952
+ th:last-child .table-sort-button {
2953
+ padding-right: 0;
2954
+ }
2955
+
2956
+ .table-density-spacious table:not(.data-table-resizable) {
2957
+ width: 100%;
2958
+ table-layout: fixed;
2959
+ }
2960
+
2961
+ .table-density-spacious td {
2962
+ white-space: normal;
2963
+ }
2964
+
2965
+ .table-density-spacious td {
2966
+ vertical-align: top;
2967
+ }
2968
+
2969
+ .table-density-spacious tbody tr:nth-child(even) {
2970
+ background: transparent;
2971
+ }
2972
+
2973
+ .table-density-dense td {
2974
+ height: 40px;
2975
+ white-space: nowrap;
2976
+ }
2977
+
2978
+ .table-density-dense td {
2979
+ padding: 0 8px;
2980
+ vertical-align: middle;
2981
+ }
2982
+
2983
+ .table-density-dense th {
2984
+ padding: 0;
2985
+ }
2986
+
2987
+ .table-density-dense .table-sort-button {
2988
+ padding: 0 8px;
2989
+ }
2990
+
2991
+ .table-density-dense th:first-child {
2992
+ padding-left: 0;
2993
+ }
2994
+
2995
+ .table-density-dense th:last-child {
2996
+ padding-right: 0;
2997
+ }
2998
+
2999
+ .table-density-dense th:first-child .table-sort-button {
3000
+ padding-left: 0;
3001
+ }
3002
+
3003
+ .table-density-dense th:last-child .table-sort-button {
3004
+ padding-right: 0;
3005
+ }
3006
+
3007
+ .table-density-dense td:first-child {
3008
+ padding-left: 0;
3009
+ }
3010
+
3011
+ .table-density-dense td:last-child {
3012
+ padding-right: 0;
3013
+ }
3014
+
3015
+ .table-density-dense tbody tr:nth-child(even) {
3016
+ background: transparent;
3017
+ }
3018
+
3019
+ tbody tr:hover td {
3020
+ background: var(--ds-menu-hover-bg);
3021
+ }
3022
+
3023
+ tbody tr:last-child td {
3024
+ border-bottom: 0;
3025
+ }
3026
+
3027
+ .table-sort-button {
3028
+ display: flex;
3029
+ gap: 3px;
3030
+ align-items: center;
3031
+ justify-content: flex-start;
3032
+ width: 100%;
3033
+ min-height: 30px;
3034
+ padding: 0 16px 0 0;
3035
+ border: 0;
3036
+ border-radius: 6px;
3037
+ background: transparent;
3038
+ color: inherit;
3039
+ font-size: inherit;
3040
+ font-weight: inherit;
3041
+ line-height: inherit;
3042
+ text-align: left;
3043
+ white-space: normal;
3044
+ }
3045
+
3046
+ .table-sort-button span {
3047
+ min-width: 0;
3048
+ overflow: visible;
3049
+ text-overflow: clip;
3050
+ }
3051
+
3052
+ .table-sort-button:hover,
3053
+ .table-sort-button:focus-visible {
3054
+ background: var(--ds-menu-hover-bg);
3055
+ color: var(--ds-text-primary);
3056
+ cursor: pointer;
3057
+ }
3058
+
3059
+ .table-sort-button svg {
3060
+ flex: 0 0 auto;
3061
+ color: var(--ds-text-secondary);
3062
+ }
3063
+
3064
+ .table-header-number {
3065
+ text-align: right;
3066
+ }
3067
+
3068
+ .table-header-number .table-sort-button {
3069
+ justify-content: flex-end;
3070
+ text-align: right;
3071
+ }
3072
+
3073
+ .table-header-number .table-sort-button span {
3074
+ text-align: right;
3075
+ }
3076
+
3077
+ .table-column-resize-handle {
3078
+ position: absolute;
3079
+ top: 0;
3080
+ right: -9px;
3081
+ bottom: 0;
3082
+ z-index: 2;
3083
+ width: 18px;
3084
+ padding: 0;
3085
+ border: 0;
3086
+ border-radius: 0;
3087
+ background: transparent;
3088
+ cursor: col-resize;
3089
+ touch-action: none;
3090
+ }
3091
+
3092
+ .report-stack-item .table-column-resize-handle,
3093
+ .table-column-resize-handle:hover {
3094
+ cursor: col-resize;
3095
+ }
3096
+
3097
+ .table-column-resize-handle::after {
3098
+ position: absolute;
3099
+ top: 8px;
3100
+ bottom: 8px;
3101
+ left: 8px;
3102
+ width: 1px;
3103
+ border-radius: 999px;
3104
+ background: var(--ds-border-subtle);
3105
+ content: "";
3106
+ opacity: 0;
3107
+ transition: background 120ms ease, opacity 120ms ease, width 120ms ease;
3108
+ }
3109
+
3110
+ .data-table-resizable th:hover .table-column-resize-handle::after {
3111
+ opacity: 0.65;
3112
+ }
3113
+
3114
+ .table-column-resize-handle:hover::after,
3115
+ .table-column-resize-handle:focus-visible::after,
3116
+ .data-table-resizable.is-column-resizing .table-column-resize-handle::after {
3117
+ background: var(--ds-border-strong);
3118
+ opacity: 1;
3119
+ width: 2px;
3120
+ }
3121
+
3122
+ .table-column-resize-handle:focus-visible {
3123
+ outline: 2px solid var(--ds-blue-bright);
3124
+ outline-offset: -3px;
3125
+ }
3126
+
3127
+ td:first-child {
3128
+ color: var(--color-text-primary, var(--ds-text-primary, #0d0d0d));
3129
+ }
3130
+
3131
+ .table-cell-number {
3132
+ font-variant-numeric: tabular-nums;
3133
+ font-feature-settings: "tnum" 1, "lnum" 1;
3134
+ letter-spacing: 0;
3135
+ text-align: right;
3136
+ }
3137
+
3138
+ .table-cell-movement {
3139
+ font-variant-numeric: tabular-nums;
3140
+ font-feature-settings: "tnum" 1, "lnum" 1;
3141
+ }
3142
+
3143
+ .table-cell-movement-positive {
3144
+ color: var(--ds-green);
3145
+ }
3146
+
3147
+ .table-cell-movement-negative {
3148
+ color: var(--ds-red);
3149
+ }
3150
+
3151
+ .recharts-wrapper,
3152
+ .recharts-surface {
3153
+ font-family: var(--ds-font);
3154
+ }
3155
+
3156
+ .chart-y-axis-tick,
3157
+ .heatmap-column-label,
3158
+ .heatmap-row-label,
3159
+ .recharts-cartesian-axis-tick text,
3160
+ .recharts-cartesian-axis-tick-value,
3161
+ .recharts-default-legend,
3162
+ .recharts-legend-item,
3163
+ .recharts-legend-item-text,
3164
+ .chart-legend {
3165
+ fill: var(--ds-text-secondary);
3166
+ color: var(--ds-text-secondary);
3167
+ font-family: var(--ds-font);
3168
+ font-size: 12px;
3169
+ font-weight: 400;
3170
+ letter-spacing: 0;
3171
+ line-height: 16px;
3172
+ }
3173
+
3174
+ .chart-axis-number {
3175
+ font-variant-numeric: tabular-nums;
3176
+ font-feature-settings: "tnum" 1, "lnum" 1;
3177
+ letter-spacing: 0;
3178
+ }
3179
+
3180
+ .recharts-cartesian-grid line {
3181
+ stroke: var(--ds-border-subtle);
3182
+ }
3183
+
3184
+ .recharts-default-tooltip {
3185
+ border-color: var(--ds-border-subtle) !important;
3186
+ border-radius: var(--ds-radius-sm);
3187
+ box-shadow: var(--ds-shadow);
3188
+ }
3189
+
3190
+ .recharts-tooltip-wrapper {
3191
+ z-index: 40;
3192
+ pointer-events: none;
3193
+ will-change: transform;
3194
+ }
3195
+
3196
+ .recharts-default-legend {
3197
+ display: inline-flex !important;
3198
+ flex-wrap: wrap;
3199
+ gap: 6px 14px;
3200
+ align-items: center;
3201
+ justify-content: center;
3202
+ }
3203
+
3204
+ .recharts-legend-item {
3205
+ display: inline-flex !important;
3206
+ align-items: center;
3207
+ margin-right: 0 !important;
3208
+ }
3209
+
3210
+ .recharts-legend-item-text {
3211
+ color: var(--ds-text-secondary) !important;
3212
+ }
3213
+
3214
+ .recharts-legend-icon {
3215
+ width: 7px !important;
3216
+ height: 7px !important;
3217
+ }
3218
+
3219
+ .chart-legend {
3220
+ display: flex !important;
3221
+ flex: 0 0 auto;
3222
+ flex-wrap: wrap;
3223
+ gap: 6px 14px;
3224
+ align-items: center;
3225
+ justify-content: center;
3226
+ margin: 0;
3227
+ padding: 0;
3228
+ list-style: none;
3229
+ }
3230
+
3231
+ .chart-legend-item {
3232
+ gap: 6px;
3233
+ }
3234
+
3235
+ .chart-legend-dot {
3236
+ display: inline-block;
3237
+ width: 7px;
3238
+ height: 7px;
3239
+ border-radius: 50%;
3240
+ flex: 0 0 auto;
3241
+ }
3242
+
3243
+ .chart-legend-button,
3244
+ .chart-legend-button:hover,
3245
+ .chart-legend-button:active {
3246
+ border: 0 !important;
3247
+ background: transparent !important;
3248
+ box-shadow: none;
3249
+ }
3250
+
3251
+ .chart-legend-button {
3252
+ padding: 3px 0;
3253
+ }
3254
+
3255
+ .chart-legend-button:focus-visible {
3256
+ border: 0 !important;
3257
+ background: transparent !important;
3258
+ }
3259
+
3260
+ @media (prefers-color-scheme: dark) {
3261
+ :root:not([data-theme="light"]),
3262
+ :root[data-theme="dark"] {
3263
+ --ds-menu-hover-bg: rgb(255 255 255 / 8%);
3264
+ --ds-menu-hover-bg: #2b2b2b;
3265
+ --ds-menu-selected-bg: #2b2b2b;
3266
+ --ds-edit-hover-bg: #2b2b2b;
3267
+ --ds-chart-hover-bg: #2b2b2b;
3268
+ }
3269
+ }
3270
+
3271
+ .table-pagination {
3272
+ display: flex;
3273
+ gap: 10px;
3274
+ align-items: center;
3275
+ justify-content: space-between;
3276
+ min-height: 38px;
3277
+ padding: 0;
3278
+ border-top: 1px solid var(--ds-border-subtle);
3279
+ color: var(--ds-text-secondary);
3280
+ font-size: 12px;
3281
+ line-height: 18px;
3282
+ }
3283
+
3284
+ .table-result-count {
3285
+ display: inline-flex;
3286
+ align-items: center;
3287
+ min-height: 30px;
3288
+ color: var(--ds-text-tertiary);
3289
+ }
3290
+
3291
+ .table-page-buttons {
3292
+ display: inline-flex;
3293
+ gap: 6px;
3294
+ align-items: center;
3295
+ }
3296
+
3297
+ .table-page-control {
3298
+ display: inline-flex;
3299
+ gap: 10px;
3300
+ align-items: center;
3301
+ margin-left: auto;
3302
+ }
3303
+
3304
+ .table-arrow-button {
3305
+ display: inline-flex;
3306
+ align-items: center;
3307
+ justify-content: center;
3308
+ width: 30px;
3309
+ height: 30px;
3310
+ min-height: 30px;
3311
+ padding: 0;
3312
+ }
3313
+
3314
+ @media (max-width: 980px) {
3315
+ :root {
3316
+ --ds-panel-padding: 20px;
3317
+ }
3318
+ }
3319
+
3320
+ @media (max-width: 760px) {
3321
+ .report-block-stack {
3322
+ grid-template-columns: 1fr;
3323
+ }
3324
+
3325
+ .report-stack-item.layout-full {
3326
+ grid-column: auto;
3327
+ }
3328
+
3329
+ .dashboard-grid {
3330
+ grid-template-columns: 1fr;
3331
+ }
3332
+
3333
+ .layout-full {
3334
+ grid-column: auto;
3335
+ }
3336
+
3337
+ .analytics-layout-row {
3338
+ grid-template-columns: 1fr;
3339
+ }
3340
+
3341
+ .analytics-layout-row.is-full-row > .analytics-layout-item,
3342
+ .analytics-layout-item.layout-half,
3343
+ .analytics-layout-item.layout-full {
3344
+ grid-column: auto;
3345
+ }
3346
+
3347
+ .panel-title-row.viz-card__drag-handle,
3348
+ .table-card__drag-handle {
3349
+ cursor: default;
3350
+ }
3351
+
3352
+ }
3353
+
3354
+ @media (max-width: 760px) and (hover: none) {
3355
+ .viz-card-menu-button {
3356
+ opacity: 1;
3357
+ pointer-events: auto;
3358
+ transform: none;
3359
+ visibility: visible;
3360
+ }
3361
+ }
3362
+
3363
+ @media (max-width: 560px) {
3364
+ :root {
3365
+ --ds-gutter: 24px;
3366
+ --ds-panel-padding: 16px;
3367
+ }
3368
+
3369
+ .dashboard-shell {
3370
+ padding-top: 0;
3371
+ }
3372
+
3373
+ .analytics-top-bar {
3374
+ flex-wrap: wrap;
3375
+ }
3376
+
3377
+ .analytics-top-bar-actions {
3378
+ width: 100%;
3379
+ justify-content: flex-start;
3380
+ }
3381
+
3382
+ .export-menu-list,
3383
+ .viz-card-menu {
3384
+ position: fixed;
3385
+ right: 12px;
3386
+ left: 12px;
3387
+ width: auto;
3388
+ min-width: 0;
3389
+ max-width: calc(100vw - 24px);
3390
+ }
3391
+
3392
+ .export-menu-list,
3393
+ .viz-card-menu {
3394
+ max-width: calc(100vw - 24px);
3395
+ }
3396
+
3397
+ .viz-card-submenu-list {
3398
+ position: static;
3399
+ display: none;
3400
+ width: 100%;
3401
+ min-width: 0;
3402
+ max-width: none;
3403
+ margin-top: 4px;
3404
+ box-shadow: none;
3405
+ opacity: 1;
3406
+ pointer-events: auto;
3407
+ transform: none;
3408
+ visibility: visible;
3409
+ }
3410
+
3411
+ .viz-card-submenu:hover .viz-card-submenu-list,
3412
+ .viz-card-submenu:focus-within .viz-card-submenu-list,
3413
+ .viz-card-submenu-list.is-open {
3414
+ display: grid;
3415
+ transform: none;
3416
+ }
3417
+
3418
+ .page-title-editor {
3419
+ font-size: 28px;
3420
+ line-height: 34px;
3421
+ }
3422
+
3423
+ .filter-toolbar,
3424
+ .filter-group {
3425
+ width: 100%;
3426
+ }
3427
+
3428
+ .kpi-card,
3429
+ .kpi-card:nth-child(2n) {
3430
+ min-width: 0;
3431
+ }
3432
+
3433
+ .access-issue-strip li,
3434
+ .details-grid {
3435
+ grid-template-columns: 1fr;
3436
+ }
3437
+
3438
+ .native-modal {
3439
+ width: calc(100vw - 24px);
3440
+ max-height: calc(100vh - 24px);
3441
+ }
3442
+
3443
+ .native-modal.chart-explore-modal {
3444
+ width: calc(100vw - 24px);
3445
+ max-width: calc(100vw - 24px);
3446
+ height: calc(100vh - 24px);
3447
+ max-height: calc(100vh - 24px);
3448
+ }
3449
+
3450
+ .native-modal.source-modal {
3451
+ width: calc(100vw - 32px);
3452
+ }
3453
+
3454
+ .modal-panel {
3455
+ max-height: calc(100vh - 24px);
3456
+ padding: 18px;
3457
+ border-radius: 18px;
3458
+ }
3459
+
3460
+ .source-modal-panel {
3461
+ padding: 20px;
3462
+ }
3463
+
3464
+ .source-details-grid {
3465
+ grid-template-columns: 1fr;
3466
+ }
3467
+
3468
+ }