@yadsh/dsh-qa-surface 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/README.md +148 -22
  2. package/compatibility.json +7 -3
  3. package/lib/access/capability-catalog.js +22 -6
  4. package/lib/access/capability-catalog.js.map +1 -1
  5. package/lib/access/model.js +36 -2
  6. package/lib/access/model.js.map +1 -1
  7. package/lib/access/service.js +19 -4
  8. package/lib/access/service.js.map +1 -1
  9. package/lib/account-remotes.js +4 -0
  10. package/lib/account-remotes.js.map +1 -1
  11. package/lib/accounts/database.js +49 -9
  12. package/lib/accounts/database.js.map +1 -1
  13. package/lib/accounts/errors.js.map +1 -1
  14. package/lib/accounts/file.js.map +1 -1
  15. package/lib/accounts/store.js +53 -8
  16. package/lib/accounts/store.js.map +1 -1
  17. package/lib/admin/permissions.js +6 -0
  18. package/lib/admin/permissions.js.map +1 -1
  19. package/lib/admin/quality-store.js +95 -19
  20. package/lib/admin/quality-store.js.map +1 -1
  21. package/lib/admin/service.js +178 -0
  22. package/lib/admin/service.js.map +1 -1
  23. package/lib/cli.js +24 -4
  24. package/lib/cli.js.map +1 -1
  25. package/lib/client/QaAccountsController.js +52 -5
  26. package/lib/client/QaAccountsController.js.map +1 -1
  27. package/lib/client/QaConfigController.js.map +1 -1
  28. package/lib/client/QaSessionController.js +626 -63
  29. package/lib/client/QaSessionController.js.map +1 -1
  30. package/lib/client/QaSurface.js +279 -43
  31. package/lib/client/QaSurface.js.map +1 -1
  32. package/lib/client/QaSurfaceGuard.js +2 -2
  33. package/lib/client/QaSurfaceGuard.js.map +1 -1
  34. package/lib/client/QaTranscriptAdapter.js +4 -2
  35. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  36. package/lib/client/admin/QaAdmin.js +59 -34
  37. package/lib/client/admin/QaAdmin.js.map +1 -1
  38. package/lib/client/admin/pages/Conversations.js +12 -12
  39. package/lib/client/admin/pages/Conversations.js.map +1 -1
  40. package/lib/client/admin/pages/ExpertMemory.js +210 -0
  41. package/lib/client/admin/pages/ExpertMemory.js.map +1 -0
  42. package/lib/client/admin/pages/Overview.js +4 -4
  43. package/lib/client/admin/pages/Overview.js.map +1 -1
  44. package/lib/client/admin/pages/Quality.js +5 -5
  45. package/lib/client/admin/pages/Quality.js.map +1 -1
  46. package/lib/client/admin/pages/Review.js +5 -5
  47. package/lib/client/admin/pages/Review.js.map +1 -1
  48. package/lib/client/admin/pages/SkillFiles.js +3 -3
  49. package/lib/client/admin/pages/SkillFiles.js.map +1 -1
  50. package/lib/client/admin/pages/Users.js +12 -12
  51. package/lib/client/admin/pages/Users.js.map +1 -1
  52. package/lib/client/admin/routes.js +4 -0
  53. package/lib/client/admin/routes.js.map +1 -1
  54. package/lib/client/admin/shared.js +15 -6
  55. package/lib/client/admin/shared.js.map +1 -1
  56. package/lib/client/admin/styles.js +3 -0
  57. package/lib/client/admin/styles.js.map +1 -1
  58. package/lib/client/attestation.js +11 -2
  59. package/lib/client/attestation.js.map +1 -1
  60. package/lib/client/audit/QaAuditDialog.js +2 -2
  61. package/lib/client/audit/QaAuditDialog.js.map +1 -1
  62. package/lib/client/audit/QaAuditRowBadge.js +1 -1
  63. package/lib/client/audit/QaAuditRowBadge.js.map +1 -1
  64. package/lib/client/components/Markdown.js +7 -2
  65. package/lib/client/components/Markdown.js.map +1 -1
  66. package/lib/client/components/QaAgentsDrawer.js +7 -5
  67. package/lib/client/components/QaAgentsDrawer.js.map +1 -1
  68. package/lib/client/components/QaApproval.js +2 -2
  69. package/lib/client/components/QaApproval.js.map +1 -1
  70. package/lib/client/components/QaAuthGate.js +6 -6
  71. package/lib/client/components/QaAuthGate.js.map +1 -1
  72. package/lib/client/components/QaChangelog.js +64 -0
  73. package/lib/client/components/QaChangelog.js.map +1 -1
  74. package/lib/client/components/QaComposer.js +9 -6
  75. package/lib/client/components/QaComposer.js.map +1 -1
  76. package/lib/client/components/QaFileAttachment.js +1 -1
  77. package/lib/client/components/QaFileAttachment.js.map +1 -1
  78. package/lib/client/components/QaFilesPanel.js +7 -7
  79. package/lib/client/components/QaFilesPanel.js.map +1 -1
  80. package/lib/client/components/QaHeader.js +4 -4
  81. package/lib/client/components/QaHeader.js.map +1 -1
  82. package/lib/client/components/QaMessage.js +12 -12
  83. package/lib/client/components/QaMessage.js.map +1 -1
  84. package/lib/client/components/QaModal.js +11 -2
  85. package/lib/client/components/QaModal.js.map +1 -1
  86. package/lib/client/components/QaQuestions.js +4 -4
  87. package/lib/client/components/QaQuestions.js.map +1 -1
  88. package/lib/client/components/QaQueueDock.js +137 -0
  89. package/lib/client/components/QaQueueDock.js.map +1 -0
  90. package/lib/client/components/QaRequestQueue.js +22 -0
  91. package/lib/client/components/QaRequestQueue.js.map +1 -0
  92. package/lib/client/components/QaRightRail.js +2 -2
  93. package/lib/client/components/QaRightRail.js.map +1 -1
  94. package/lib/client/components/QaSidebar.js +66 -6
  95. package/lib/client/components/QaSidebar.js.map +1 -1
  96. package/lib/client/components/QaSourcesPanel.js +10 -8
  97. package/lib/client/components/QaSourcesPanel.js.map +1 -1
  98. package/lib/client/components/QaThemeSwitcher.js +19 -0
  99. package/lib/client/components/QaThemeSwitcher.js.map +1 -0
  100. package/lib/client/components/QaTurnNotice.js +40 -0
  101. package/lib/client/components/QaTurnNotice.js.map +1 -0
  102. package/lib/client/components/QaTurnRail.js +3 -3
  103. package/lib/client/components/QaTurnRail.js.map +1 -1
  104. package/lib/client/components/QaWelcomeNotice.js +2 -6
  105. package/lib/client/components/QaWelcomeNotice.js.map +1 -1
  106. package/lib/client/components/QaWidthHandle.js +2 -2
  107. package/lib/client/components/QaWidthHandle.js.map +1 -1
  108. package/lib/client/components/QaWorkGroup.js +5 -5
  109. package/lib/client/components/QaWorkGroup.js.map +1 -1
  110. package/lib/client/components/QaWorkspaceBrowser.js +10 -10
  111. package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
  112. package/lib/client/components/VariantSwitcher.js +1 -1
  113. package/lib/client/components/VariantSwitcher.js.map +1 -1
  114. package/lib/client/failure-copy.js +26 -8
  115. package/lib/client/failure-copy.js.map +1 -1
  116. package/lib/client/focus-ring.js +193 -0
  117. package/lib/client/focus-ring.js.map +1 -0
  118. package/lib/client/index.js +40 -20
  119. package/lib/client/index.js.map +1 -1
  120. package/lib/client/lineage.js +3 -16
  121. package/lib/client/lineage.js.map +1 -1
  122. package/lib/client/markdown/CodeBlock.js +2 -2
  123. package/lib/client/markdown/CodeBlock.js.map +1 -1
  124. package/lib/client/markdown/blocks.js +118 -31
  125. package/lib/client/markdown/blocks.js.map +1 -1
  126. package/lib/client/markdown/math.js +1 -1
  127. package/lib/client/markdown/math.js.map +1 -1
  128. package/lib/client/markdown/render.js +32 -16
  129. package/lib/client/markdown/render.js.map +1 -1
  130. package/lib/client/markdown/source-chip.js +3 -3
  131. package/lib/client/markdown/source-chip.js.map +1 -1
  132. package/lib/client/notifications/notification-dispatcher.js +90 -0
  133. package/lib/client/notifications/notification-dispatcher.js.map +1 -0
  134. package/lib/client/notifications/preferences.js +61 -0
  135. package/lib/client/notifications/preferences.js.map +1 -0
  136. package/lib/client/notifications/turn-completion-source.js +82 -0
  137. package/lib/client/notifications/turn-completion-source.js.map +1 -0
  138. package/lib/client/notifications/use-turn-notifications.js +108 -0
  139. package/lib/client/notifications/use-turn-notifications.js.map +1 -0
  140. package/lib/client/panels/PanelHost.js +5 -5
  141. package/lib/client/panels/PanelHost.js.map +1 -1
  142. package/lib/client/panels/PanelLauncher.js +2 -2
  143. package/lib/client/panels/PanelLauncher.js.map +1 -1
  144. package/lib/client/project-session-state.js +156 -4
  145. package/lib/client/project-session-state.js.map +1 -1
  146. package/lib/client/role/RoleSelector.js +9 -4
  147. package/lib/client/role/RoleSelector.js.map +1 -1
  148. package/lib/client/settings/card.js +58 -17
  149. package/lib/client/settings/card.js.map +1 -1
  150. package/lib/client/settings/fields.js +11 -10
  151. package/lib/client/settings/fields.js.map +1 -1
  152. package/lib/client/settings/format.js +0 -9
  153. package/lib/client/settings/format.js.map +1 -1
  154. package/lib/client/settings/sections/access.js +5 -5
  155. package/lib/client/settings/sections/access.js.map +1 -1
  156. package/lib/client/settings/sections/accounts.js +10 -10
  157. package/lib/client/settings/sections/accounts.js.map +1 -1
  158. package/lib/client/settings/sections/attachments.js +6 -6
  159. package/lib/client/settings/sections/attachments.js.map +1 -1
  160. package/lib/client/settings/sections/branding.js +7 -7
  161. package/lib/client/settings/sections/branding.js.map +1 -1
  162. package/lib/client/settings/sections/common.js +4 -2
  163. package/lib/client/settings/sections/common.js.map +1 -1
  164. package/lib/client/settings/sections/docs.js +4 -3
  165. package/lib/client/settings/sections/docs.js.map +1 -1
  166. package/lib/client/settings/sections/embedding.js +2 -2
  167. package/lib/client/settings/sections/embedding.js.map +1 -1
  168. package/lib/client/settings/sections/interface.js +12 -12
  169. package/lib/client/settings/sections/interface.js.map +1 -1
  170. package/lib/client/settings/sections/lockdown.js +9 -9
  171. package/lib/client/settings/sections/lockdown.js.map +1 -1
  172. package/lib/client/settings/sections/notes.js +12 -12
  173. package/lib/client/settings/sections/notes.js.map +1 -1
  174. package/lib/client/settings/sections/session.js +15 -12
  175. package/lib/client/settings/sections/session.js.map +1 -1
  176. package/lib/client/settings/sections/slash.js +9 -9
  177. package/lib/client/settings/sections/slash.js.map +1 -1
  178. package/lib/client/settings/sections/sources.js +26 -26
  179. package/lib/client/settings/sections/sources.js.map +1 -1
  180. package/lib/client/settings/sections/status.js +2 -2
  181. package/lib/client/settings/sections/status.js.map +1 -1
  182. package/lib/client/settings/styles.js +15 -9
  183. package/lib/client/settings/styles.js.map +1 -1
  184. package/lib/client/slash/SlashPalette.js +4 -4
  185. package/lib/client/slash/SlashPalette.js.map +1 -1
  186. package/lib/client/styles.js +133 -83
  187. package/lib/client/styles.js.map +1 -1
  188. package/lib/client/theme-preference.js +162 -0
  189. package/lib/client/theme-preference.js.map +1 -0
  190. package/lib/client/types.js +8 -0
  191. package/lib/client/types.js.map +1 -1
  192. package/lib/client/use-session-ui-state.js +7 -5
  193. package/lib/client/use-session-ui-state.js.map +1 -1
  194. package/lib/client/user-settings/GeneralSettingsPage.js +6 -6
  195. package/lib/client/user-settings/GeneralSettingsPage.js.map +1 -1
  196. package/lib/client/user-settings/IntegrationTokensPage.js +6 -6
  197. package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
  198. package/lib/client/user-settings/NotificationSettingsPage.js +107 -0
  199. package/lib/client/user-settings/NotificationSettingsPage.js.map +1 -0
  200. package/lib/client/user-settings/PasswordSettingsPage.js +1 -1
  201. package/lib/client/user-settings/PasswordSettingsPage.js.map +1 -1
  202. package/lib/client/user-settings/ProfileSettingsPage.js +2 -2
  203. package/lib/client/user-settings/ProfileSettingsPage.js.map +1 -1
  204. package/lib/client/user-settings/SkillCatalog.js +3 -3
  205. package/lib/client/user-settings/SkillCatalog.js.map +1 -1
  206. package/lib/client/user-settings/SkillEditor.js +26 -8
  207. package/lib/client/user-settings/SkillEditor.js.map +1 -1
  208. package/lib/client/user-settings/SkillToolPicker.js +3 -3
  209. package/lib/client/user-settings/SkillToolPicker.js.map +1 -1
  210. package/lib/client/user-settings/SkillsSettingsPage.js +1 -1
  211. package/lib/client/user-settings/SkillsSettingsPage.js.map +1 -1
  212. package/lib/client/user-settings/StartersSettingsPage.js +6 -6
  213. package/lib/client/user-settings/StartersSettingsPage.js.map +1 -1
  214. package/lib/client/user-settings/UserSettingsDialog.js +7 -2
  215. package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
  216. package/lib/client/user-settings/copy.js +2 -0
  217. package/lib/client/user-settings/copy.js.map +1 -1
  218. package/lib/client/user-settings/draft.js +4 -1
  219. package/lib/client/user-settings/draft.js.map +1 -1
  220. package/lib/client/user-settings/fields.js +5 -5
  221. package/lib/client/user-settings/fields.js.map +1 -1
  222. package/lib/client.js +7228 -4002
  223. package/lib/client.js.map +1 -1
  224. package/lib/config-resolvers/defaults.js +7 -0
  225. package/lib/config-resolvers/defaults.js.map +1 -1
  226. package/lib/config-resolvers/lockdown.js +7 -0
  227. package/lib/config-resolvers/lockdown.js.map +1 -1
  228. package/lib/config-resolvers/notifications.js +15 -0
  229. package/lib/config-resolvers/notifications.js.map +1 -0
  230. package/lib/config-resolvers/session.js +11 -1
  231. package/lib/config-resolvers/session.js.map +1 -1
  232. package/lib/config.js +67 -18
  233. package/lib/config.js.map +1 -1
  234. package/lib/enforcement/tool-grants.js +6 -6
  235. package/lib/enforcement/tool-grants.js.map +1 -1
  236. package/lib/index.js +145 -30
  237. package/lib/index.js.map +1 -1
  238. package/lib/integration/answer.js +74 -8
  239. package/lib/integration/answer.js.map +1 -1
  240. package/lib/integration/expert-memory.js +39 -0
  241. package/lib/integration/expert-memory.js.map +1 -0
  242. package/lib/integration/host-runner.js +26 -14
  243. package/lib/integration/host-runner.js.map +1 -1
  244. package/lib/notifications.js +66 -0
  245. package/lib/notifications.js.map +1 -0
  246. package/lib/personal-skills/errors.js.map +1 -1
  247. package/lib/personal-skills/service.js +81 -7
  248. package/lib/personal-skills/service.js.map +1 -1
  249. package/lib/prompt-notes.js +2 -10
  250. package/lib/prompt-notes.js.map +1 -1
  251. package/lib/qa-tools/docs-tools.js +1 -1
  252. package/lib/qa-tools/docs-tools.js.map +1 -1
  253. package/lib/qa-tools/lifecycle.js +6 -3
  254. package/lib/qa-tools/lifecycle.js.map +1 -1
  255. package/lib/request-queue.js +32 -0
  256. package/lib/request-queue.js.map +1 -0
  257. package/lib/resolve-config.js +2 -0
  258. package/lib/resolve-config.js.map +1 -1
  259. package/lib/secure-session.js +7 -2
  260. package/lib/secure-session.js.map +1 -1
  261. package/lib/shared/settings.js +19 -2
  262. package/lib/shared/settings.js.map +1 -1
  263. package/lib/turn-failure-log.js +67 -0
  264. package/lib/turn-failure-log.js.map +1 -0
  265. package/lib/typert.host.js +1398 -651
  266. package/lib/typert.remote-client.d.ts +15 -1
  267. package/lib/typert.remote-client.js +1315 -645
  268. package/lib/types/access/capability-catalog.d.ts +20 -4
  269. package/lib/types/access/model.d.ts +23 -0
  270. package/lib/types/access/service.d.ts +2 -3
  271. package/lib/types/account-remotes.d.ts +8 -1
  272. package/lib/types/accounts/database.d.ts +13 -3
  273. package/lib/types/accounts/errors.d.ts +9 -1
  274. package/lib/types/accounts/file.d.ts +12 -0
  275. package/lib/types/accounts/store.d.ts +30 -2
  276. package/lib/types/admin/quality-store.d.ts +33 -0
  277. package/lib/types/admin/service.d.ts +60 -1
  278. package/lib/types/client/QaAccountsController.d.ts +25 -2
  279. package/lib/types/client/QaConfigController.d.ts +2 -2
  280. package/lib/types/client/QaSessionController.d.ts +199 -6
  281. package/lib/types/client/QaSurface.d.ts +6 -1
  282. package/lib/types/client/admin/pages/ExpertMemory.d.ts +19 -0
  283. package/lib/types/client/admin/routes.d.ts +3 -1
  284. package/lib/types/client/admin/shared.d.ts +4 -0
  285. package/lib/types/client/components/Markdown.d.ts +8 -1
  286. package/lib/types/client/components/QaHeader.d.ts +3 -1
  287. package/lib/types/client/components/QaModal.d.ts +7 -0
  288. package/lib/types/client/components/QaQueueDock.d.ts +27 -0
  289. package/lib/types/client/components/QaRequestQueue.d.ts +20 -0
  290. package/lib/types/client/components/QaThemeSwitcher.d.ts +14 -0
  291. package/lib/types/client/components/QaTurnNotice.d.ts +55 -0
  292. package/lib/types/client/focus-ring.d.ts +65 -0
  293. package/lib/types/client/lineage.d.ts +3 -13
  294. package/lib/types/client/markdown/blocks.d.ts +30 -2
  295. package/lib/types/client/markdown/render.d.ts +4 -1
  296. package/lib/types/client/notifications/notification-dispatcher.d.ts +68 -0
  297. package/lib/types/client/notifications/preferences.d.ts +44 -0
  298. package/lib/types/client/notifications/turn-completion-source.d.ts +114 -0
  299. package/lib/types/client/notifications/use-turn-notifications.d.ts +51 -0
  300. package/lib/types/client/project-session-state.d.ts +35 -1
  301. package/lib/types/client/role/RoleSelector.d.ts +7 -1
  302. package/lib/types/client/settings/card.d.ts +36 -5
  303. package/lib/types/client/settings/fields.d.ts +24 -0
  304. package/lib/types/client/settings/format.d.ts +0 -5
  305. package/lib/types/client/settings/sections/common.d.ts +3 -1
  306. package/lib/types/client/settings/sections/session.d.ts +2 -1
  307. package/lib/types/client/settings/styles.d.ts +9 -4
  308. package/lib/types/client/settings-extensions/user-session.d.ts +1 -1
  309. package/lib/types/client/theme-preference.d.ts +69 -0
  310. package/lib/types/client/types.d.ts +25 -1
  311. package/lib/types/client/use-session-ui-state.d.ts +6 -4
  312. package/lib/types/client/user-settings/GeneralSettingsPage.d.ts +5 -5
  313. package/lib/types/client/user-settings/NotificationSettingsPage.d.ts +40 -0
  314. package/lib/types/client/user-settings/UserSettingsDialog.d.ts +12 -2
  315. package/lib/types/client/user-settings/draft.d.ts +4 -1
  316. package/lib/types/client/user-settings/fields.d.ts +7 -0
  317. package/lib/types/config-resolvers/notifications.d.ts +10 -0
  318. package/lib/types/config-resolvers/session.d.ts +6 -0
  319. package/lib/types/config.d.ts +20 -1
  320. package/lib/types/index.d.ts +53 -5
  321. package/lib/types/integration/answer.d.ts +27 -0
  322. package/lib/types/integration/expert-memory.d.ts +49 -0
  323. package/lib/types/notifications.d.ts +32 -0
  324. package/lib/types/personal-skills/errors.d.ts +1 -1
  325. package/lib/types/personal-skills/service.d.ts +6 -0
  326. package/lib/types/prompt-notes.d.ts +17 -4
  327. package/lib/types/request-queue.d.ts +32 -0
  328. package/lib/types/shared/settings.d.ts +19 -2
  329. package/lib/types/turn-failure-log.d.ts +18 -0
  330. package/lib/types/types.d.ts +180 -4
  331. package/package.json +64 -63
  332. package/scripts/attach-workspace-sessions.mjs +24 -5
  333. package/scripts/repair-session-events.mjs +25 -5
  334. package/lib/client/markdown/MermaidBlock.js +0 -80
  335. package/lib/client/markdown/MermaidBlock.js.map +0 -1
  336. package/lib/types/client/markdown/MermaidBlock.d.ts +0 -6
@@ -9,6 +9,11 @@ import { KATEX_CSS } from "./markdown/katex-css.js";
9
9
  * only reference these tokens (brand and interaction colors) or the themed
10
10
  * --dsw-alias-* tokens (surfaces and typography keep following the host
11
11
  * light/dark theme). Rebranding = editing this one object.
12
+ *
13
+ * A focus ring is the one outline in this file and it comes from the host's
14
+ * --dsw-focus-ring-* pair with the palette color as its fallback: the host
15
+ * declares the width, and under `data-input-modality=pointer` it scopes the
16
+ * color to transparent, which a hard-coded outline would override.
12
17
  */
13
18
  const QA_BRAND_PALETTE = {
14
19
  brand: "#3D9E9A",
@@ -82,7 +87,7 @@ export const QA_SURFACE_STYLES = String.raw `
82
87
  .dsh-qa-onboarding__continue{appearance:none;min-width:164px;padding:10px 18px;border:0;border-radius:999px;background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast);font:inherit;font-size:14px;font-weight:600;line-height:20px;cursor:pointer;transition:background .14s,transform .14s}
83
88
  .dsh-qa-onboarding__continue:hover{background:var(--dsh-qa-accent-hover)}
84
89
  .dsh-qa-onboarding__continue:active{transform:translateY(1px)}
85
- .dsh-qa-onboarding__continue:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:3px}
90
+ .dsh-qa-onboarding__continue:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-brand-primary));outline-offset:3px}
86
91
  @media (max-width:600px){.dsh-qa-onboarding{padding:14px}.dsh-qa-onboarding__panel{grid-template-columns:1fr;gap:12px;padding:22px;border-radius:15px}.dsh-qa-onboarding__mark{width:38px;height:38px;border-radius:11px}.dsh-qa-onboarding__title{font-size:18px}.dsh-qa-onboarding__actions{margin-top:18px}.dsh-qa-onboarding__continue{width:100%}}
87
92
  .dsh-qa-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}
88
93
  .dsh-qa-workspace{position:relative;display:flex;flex:1;min-width:0;min-height:0;overflow:hidden}
@@ -98,12 +103,12 @@ export const QA_SURFACE_STYLES = String.raw `
98
103
  .dsh-qa-sidebar__name{min-width:0;overflow:hidden;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:18px;text-overflow:ellipsis;white-space:nowrap}
99
104
  .dsh-qa-sidebar__collapse,.dsh-qa-sidebar__expand{appearance:none;display:grid;place-items:center;flex:none;width:26px;height:26px;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
100
105
  .dsh-qa-sidebar__collapse:hover,.dsh-qa-sidebar__expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
101
- .dsh-qa-sidebar__collapse:focus-visible,.dsh-qa-sidebar__expand:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
106
+ .dsh-qa-sidebar__collapse:focus-visible,.dsh-qa-sidebar__expand:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
102
107
  .dsh-qa-sidebar__collapse svg,.dsh-qa-sidebar__expand svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round;transition:transform .16s}.dsh-qa-sidebar__expand svg{transform:rotate(180deg)}
103
108
  .dsh-qa-sidebar__newbar{flex:none;padding:2px 12px 10px}
104
109
  .dsh-qa-sidebar__new{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;padding:8px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;font-weight:500;line-height:18px;cursor:pointer;transition:border-color .12s,background .12s}
105
110
  .dsh-qa-sidebar__new:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}
106
- .dsh-qa-sidebar__new:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
111
+ .dsh-qa-sidebar__new:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
107
112
  .dsh-qa-sidebar__new:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}
108
113
  .dsh-qa-sidebar__new svg{width:14px;height:14px;flex:none;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
109
114
  .dsh-qa-sidebar__search{position:relative;flex:none;padding:0 12px 10px}
@@ -111,12 +116,14 @@ export const QA_SURFACE_STYLES = String.raw `
111
116
  .dsh-qa-sidebar__search input{display:block;width:100%;height:34px;min-width:0;padding:0 34px 0 32px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:18px;-webkit-appearance:none;appearance:none}
112
117
  .dsh-qa-sidebar__search input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
113
118
  .dsh-qa-sidebar__search input::placeholder{color:var(--dsw-alias-label-tertiary)}
114
- .dsh-qa-sidebar__search input:focus{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px;border-color:transparent}
119
+ .dsh-qa-sidebar__search input:focus{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px;border-color:transparent}
115
120
  .dsh-qa-sidebar__search-clear{position:absolute;top:17px;right:18px;display:grid;place-items:center;width:24px;height:24px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer;transform:translateY(-50%)}
116
121
  .dsh-qa-sidebar__search-clear:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
117
- .dsh-qa-sidebar__search-clear:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
122
+ .dsh-qa-sidebar__search-clear:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
118
123
  .dsh-qa-sidebar__search-clear svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round}
119
124
  .dsh-qa-sidebar__list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 8px 12px}
125
+ .dsh-qa-sidebar__list:focus{outline:none}
126
+ .dsh-qa-sidebar__list:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
120
127
  .dsh-qa-sidebar__group{margin-top:6px}
121
128
  .dsh-qa-sidebar__group:first-child{margin-top:0}
122
129
  .dsh-qa-sidebar__group-name{padding:4px 6px 2px;color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:600;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@@ -124,20 +131,20 @@ export const QA_SURFACE_STYLES = String.raw `
124
131
  .dsh-qa-sidebar__item{position:relative;display:flex;align-items:center;width:100%;padding:2px;border-radius:8px}
125
132
  .dsh-qa-sidebar__item:hover,.dsh-qa-sidebar__item--active{background:var(--dsw-alias-bg-layer-2)}
126
133
  .dsh-qa-sidebar__item-main{appearance:none;display:flex;align-items:center;gap:8px;width:100%;min-width:0;border:0;background:0 0;cursor:pointer;text-align:left;font:inherit;padding:7px 8px;border-radius:8px}
127
- .dsh-qa-sidebar__item-main:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
128
- .dsh-qa-sidebar__item-delete{appearance:none;position:absolute;top:50%;right:4px;display:flex;align-items:center;justify-content:center;width:26px;height:26px;border:0;background:var(--dsw-alias-bg-layer-2);cursor:pointer;color:var(--dsw-alias-label-tertiary);padding:5px;border-radius:6px;opacity:0;transform:translateY(-50%);transition:opacity .12s}
129
- .dsh-qa-sidebar__item:hover .dsh-qa-sidebar__item-delete,.dsh-qa-sidebar__item-delete:focus-visible{opacity:1}
134
+ .dsh-qa-sidebar__item-main:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
135
+ .dsh-qa-sidebar__item-delete{appearance:none;position:absolute;top:50%;right:4px;display:flex;align-items:center;justify-content:center;width:26px;height:26px;border:0;background:var(--dsw-alias-bg-layer-2);cursor:pointer;color:var(--dsw-alias-label-tertiary);padding:5px;border-radius:6px;opacity:0;pointer-events:none;transform:translateY(-50%);transition:opacity .12s}
136
+ .dsh-qa-sidebar__item:hover .dsh-qa-sidebar__item-delete,.dsh-qa-sidebar__item-delete:focus-visible{opacity:1;pointer-events:auto}
130
137
  .dsh-qa-sidebar__item-delete:hover{color:var(--dsw-alias-label-primary)}
131
138
  .dsh-qa-sidebar__item-audit{appearance:none;flex:none;display:inline-flex;align-items:center;gap:4px;height:22px;margin-right:4px;padding:0 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font:inherit;font-size:11px;line-height:16px;cursor:pointer;transition:border-color .12s,color .12s}
132
139
  .dsh-qa-sidebar__item-audit--with-delete{margin-right:28px}
133
140
  .dsh-qa-sidebar__item-audit:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
134
- .dsh-qa-sidebar__item-audit:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
141
+ .dsh-qa-sidebar__item-audit:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
135
142
  .dsh-qa-sidebar__item-audit-check{width:11px;height:11px;flex:none;color:var(--dsw-alias-state-success-primary)}
136
143
  .dsh-qa-sidebar__item-audit-verdict{font-weight:600}
137
144
  .dsh-qa-sidebar__item-audit-verdict--good{color:var(--dsw-alias-state-success-primary)}
138
145
  .dsh-qa-sidebar__item-audit-verdict--warn{color:var(--dsw-alias-state-warn-primary)}
139
146
  .dsh-qa-sidebar__item-audit-verdict--bad{color:var(--dsw-alias-state-error-primary)}
140
- .dsh-qa-sidebar__item-delete:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
147
+ .dsh-qa-sidebar__item-delete:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
141
148
  .dsh-qa-sidebar__item-delete svg{width:14px;height:14px;display:block;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
142
149
  .dsh-qa-sidebar__item-title{flex:1;min-width:0;overflow:hidden;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}
143
150
  .dsh-qa-sidebar__item--active .dsh-qa-sidebar__item-title{color:var(--dsw-alias-label-primary);font-weight:500}
@@ -146,15 +153,15 @@ export const QA_SURFACE_STYLES = String.raw `
146
153
  .dsh-qa-sidebar__footer{flex:none;padding:8px 16px 12px;border-top:1px solid var(--dsw-alias-border-l2)}
147
154
  .dsh-qa-sidebar__version{appearance:none;display:inline-flex;align-items:center;padding:2px 0;border:0;background:0 0;color:var(--dsw-alias-label-tertiary);font:inherit;font-size:12px;line-height:16px;cursor:pointer;transition:color .12s}
148
155
  .dsh-qa-sidebar__version:hover{color:var(--dsw-alias-label-primary)}
149
- .dsh-qa-sidebar__version:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px;border-radius:4px}
156
+ .dsh-qa-sidebar__version:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px;border-radius:4px}
150
157
  .dsh-qa-sidebar__account{display:flex;align-items:center;gap:6px;min-width:0;margin-bottom:6px}
151
158
  .dsh-qa-sidebar__account-name{appearance:none;min-width:0;overflow:hidden;padding:0;border:0;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;line-height:16px;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;transition:color .12s}
152
159
  .dsh-qa-sidebar__account-name:hover{color:var(--dsw-alias-label-primary)}
153
- .dsh-qa-sidebar__account-name:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px;border-radius:4px}
160
+ .dsh-qa-sidebar__account-name:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px;border-radius:4px}
154
161
  .dsh-qa-sidebar__account-role{flex:none;padding:1px 6px;border-radius:999px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-tertiary);font-size:10px;font-weight:500;line-height:15px}
155
162
  .dsh-qa-sidebar__account-exit{appearance:none;display:grid;place-items:center;flex:none;width:24px;height:24px;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
156
163
  .dsh-qa-sidebar__account-exit:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
157
- .dsh-qa-sidebar__account-exit:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
164
+ .dsh-qa-sidebar__account-exit:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
158
165
  .dsh-qa-sidebar__account-exit svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
159
166
  .dsh-qa-auth{align-items:center;justify-content:center;padding:24px}
160
167
  .dsh-qa-auth__card{display:flex;flex-direction:column;gap:14px;width:min(360px,100%);padding:28px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2);box-shadow:0 18px 48px var(--dsh-qa-overlay)}
@@ -165,7 +172,7 @@ export const QA_SURFACE_STYLES = String.raw `
165
172
  .dsh-qa-auth__tab{appearance:none;flex:1;padding:6px 0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;font-weight:500;line-height:18px;cursor:pointer;transition:background .12s,color .12s}
166
173
  .dsh-qa-auth__tab:hover{color:var(--dsw-alias-label-primary)}
167
174
  .dsh-qa-auth__tab--active{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}
168
- .dsh-qa-auth__tab:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
175
+ .dsh-qa-auth__tab:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
169
176
  .dsh-qa-auth__field{display:flex;flex-direction:column;gap:5px}
170
177
  .dsh-qa-auth__field span{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:16px}
171
178
  .dsh-qa-auth__field input{appearance:none;width:100%;padding:9px 11px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font:inherit;font-size:14px;line-height:20px}
@@ -174,13 +181,13 @@ export const QA_SURFACE_STYLES = String.raw `
174
181
  .dsh-qa-auth__error{margin:0;color:var(--dsh-qa-error);font-size:12px;line-height:17px}
175
182
  .dsh-qa-auth__submit{appearance:none;margin-top:2px;padding:10px 0;border:0;border-radius:9px;background:var(--dsh-qa-brand);color:var(--dsh-qa-accent-contrast);font:inherit;font-size:14px;font-weight:600;line-height:20px;cursor:pointer;transition:background .12s}
176
183
  .dsh-qa-auth__submit:hover{background:var(--dsh-qa-accent-hover)}
177
- .dsh-qa-auth__submit:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
184
+ .dsh-qa-auth__submit:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
178
185
  .dsh-qa-auth__submit:disabled{opacity:.6;cursor:default}
179
186
  .dsh-qa-auth__lead{margin:0;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}
180
187
  .dsh-qa-auth__notice{margin:0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:17px}
181
188
  .dsh-qa-auth__link{appearance:none;padding:0;border:0;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;line-height:17px;text-align:center;text-decoration:underline;cursor:pointer}
182
189
  .dsh-qa-auth__link:hover{color:var(--dsw-alias-label-primary)}
183
- .dsh-qa-auth__link:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
190
+ .dsh-qa-auth__link:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
184
191
  .dsh-qa-auth__link:disabled{opacity:.6;cursor:default}
185
192
  .dsh-qa-crash{align-items:center;justify-content:center;padding:24px}
186
193
  .dsh-qa-crash__card{display:flex;flex-direction:column;gap:12px;width:min(380px,100%);padding:28px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2);box-shadow:0 18px 48px var(--dsh-qa-overlay);text-align:center}
@@ -188,7 +195,7 @@ export const QA_SURFACE_STYLES = String.raw `
188
195
  .dsh-qa-crash__card p{margin:0;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:19px}
189
196
  .dsh-qa-crash__reload{appearance:none;margin-top:6px;padding:10px 0;border:0;border-radius:9px;background:var(--dsh-qa-brand);color:var(--dsh-qa-accent-contrast);font:inherit;font-size:14px;font-weight:600;line-height:20px;cursor:pointer;transition:background .12s}
190
197
  .dsh-qa-crash__reload:hover{background:var(--dsh-qa-accent-hover)}
191
- .dsh-qa-crash__reload:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
198
+ .dsh-qa-crash__reload:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
192
199
  .dsh-qa-modal{${QA_BRAND_TOKENS};position:fixed;inset:0;z-index:2147483600;display:grid;place-items:center;padding:24px;background:var(--dsh-qa-overlay)}
193
200
  .dsh-qa-modal *{box-sizing:border-box}
194
201
  .dsh-qa-modal__panel{display:flex;flex-direction:column;width:min(560px,100%);max-height:min(640px,calc(100vh - 48px));border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2);box-shadow:0 18px 48px var(--dsh-qa-overlay);overflow:hidden}
@@ -197,7 +204,7 @@ export const QA_SURFACE_STYLES = String.raw `
197
204
  .dsh-qa-modal__title{margin:0;color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:20px}
198
205
  .dsh-qa-modal__close{appearance:none;display:grid;place-items:center;flex:none;width:28px;height:28px;padding:0;border:0;border-radius:8px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
199
206
  .dsh-qa-modal__close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
200
- .dsh-qa-modal__close:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
207
+ .dsh-qa-modal__close:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
201
208
  .dsh-qa-modal__close svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
202
209
  .dsh-qa-audit-dialog{display:flex;flex-direction:column;min-height:0;height:100%}
203
210
  .dsh-qa-audit-dialog__body{flex:1;min-height:0;overflow:auto;padding:16px 18px}
@@ -206,10 +213,11 @@ export const QA_SURFACE_STYLES = String.raw `
206
213
  .dsh-qa-modal__footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:none;padding:12px 18px;border-top:1px solid var(--dsw-alias-border-l2)}
207
214
  .dsh-qa-modal__footer button{appearance:none;padding:8px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;font-weight:500;line-height:19px;cursor:pointer;transition:border-color .12s,background .12s,color .12s}
208
215
  .dsh-qa-modal__footer button:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
209
- .dsh-qa-modal__footer button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
216
+ .dsh-qa-modal__footer button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
210
217
  .dsh-qa-modal__footer button:disabled{opacity:.5;cursor:default}
211
218
  .dsh-qa-modal__footer .dsh-qa-modal__primary{border-color:transparent;background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast)}
212
219
  .dsh-qa-modal__footer .dsh-qa-modal__primary:hover:not(:disabled){border-color:transparent;background:var(--dsh-qa-accent-hover);color:var(--dsh-qa-accent-contrast)}
220
+ .dsh-qa-request-queue__notice{margin:12px 0 0;color:var(--dsw-alias-label-secondary);font-size:14px;line-height:1.6}
213
221
  .dsh-qa-changelog__entry{padding-top:10px}
214
222
  .dsh-qa-changelog__version{display:flex;align-items:baseline;gap:8px;margin:0 0 2px;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}
215
223
  .dsh-qa-changelog__date{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:16px}
@@ -227,7 +235,7 @@ export const QA_SURFACE_STYLES = String.raw `
227
235
  .dsh-qa-settings__tab{appearance:none;text-align:left;padding:8px 10px;border:0;border-radius:8px;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:19px;cursor:pointer}
228
236
  .dsh-qa-settings__tab:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
229
237
  .dsh-qa-settings__tab--active{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font-weight:600}
230
- .dsh-qa-settings__tab:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
238
+ .dsh-qa-settings__tab:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
231
239
  .dsh-qa-settings__content{min-width:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:16px 20px 0}
232
240
  .dsh-qa-settings__page{display:flex;flex-direction:column;gap:14px;min-height:100%;padding-bottom:22px}
233
241
  .dsh-qa-settings__lead{margin:0;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}
@@ -237,7 +245,7 @@ export const QA_SURFACE_STYLES = String.raw `
237
245
  .dsh-qa-settings__page-title{margin:0;color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:21px}
238
246
  .dsh-qa-settings__back{appearance:none;padding:4px 8px 4px 0;border:0;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:19px;cursor:pointer}
239
247
  .dsh-qa-settings__back:hover{color:var(--dsw-alias-label-primary)}
240
- .dsh-qa-settings__back:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
248
+ .dsh-qa-settings__back:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
241
249
  .dsh-qa-settings__section{display:flex;flex-direction:column;gap:10px;padding-top:12px;border-top:1px solid var(--dsw-alias-border-l2)}
242
250
  .dsh-qa-settings__section-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
243
251
  .dsh-qa-settings__section-title{margin:0;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:19px}
@@ -262,11 +270,11 @@ export const QA_SURFACE_STYLES = String.raw `
262
270
  .dsh-qa-settings__notice--warn{background:var(--dsh-qa-warning10);color:var(--dsh-qa-warning)}
263
271
  .dsh-qa-settings__notice--error{background:var(--dsh-qa-error10);color:var(--dsh-qa-error)}
264
272
  .dsh-qa-settings__link{appearance:none;padding:0;border:0;background:0 0;color:var(--dsh-qa-brand);font:inherit;font-size:12px;line-height:17px;text-decoration:underline;cursor:pointer}
265
- .dsh-qa-settings__link:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
273
+ .dsh-qa-settings__link:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
266
274
  .dsh-qa-settings__actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;position:sticky;bottom:0;margin:auto -20px -22px;padding:12px 20px;border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2)}
267
275
  .dsh-qa-settings__button{appearance:none;padding:8px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:19px;cursor:pointer;transition:color .12s,background .12s}
268
276
  .dsh-qa-settings__button:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}
269
- .dsh-qa-settings__button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
277
+ .dsh-qa-settings__button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
270
278
  .dsh-qa-settings__button:disabled{opacity:.6;cursor:default}
271
279
  .dsh-qa-settings__button--primary{border-color:transparent;background:var(--dsh-qa-brand);color:var(--dsh-qa-accent-contrast);font-weight:600}
272
280
  .dsh-qa-settings__button--primary:hover:not(:disabled){background:var(--dsh-qa-accent-hover);color:var(--dsh-qa-accent-contrast)}
@@ -280,7 +288,7 @@ export const QA_SURFACE_STYLES = String.raw `
280
288
  .dsh-qa-settings__row{margin:0}
281
289
  .dsh-qa-settings__row-button{appearance:none;display:flex;flex-direction:column;gap:4px;width:100%;padding:11px 13px;border:1px solid var(--dsw-alias-border-l2);border-radius:11px;background:var(--dsw-alias-bg-layer-3);text-align:left;cursor:pointer;transition:border-color .12s,background .12s}
282
290
  .dsh-qa-settings__row-button:hover{border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-bg-layer-2)}
283
- .dsh-qa-settings__row-button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
291
+ .dsh-qa-settings__row-button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
284
292
  .dsh-qa-settings__row-title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:600;line-height:20px}
285
293
  .dsh-qa-settings__row-description{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:19px}
286
294
  .dsh-qa-settings__row-meta{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}
@@ -308,7 +316,7 @@ export const QA_SURFACE_STYLES = String.raw `
308
316
  .dsh-qa-starters__item>.dsh-qa-settings__field{grid-column:1}
309
317
  .dsh-qa-starters__remove{appearance:none;grid-column:2;grid-row:1;align-self:end;flex:none;width:28px;height:28px;margin-bottom:6px;display:flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:8px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
310
318
  .dsh-qa-starters__remove:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsh-qa-error)}
311
- .dsh-qa-starters__remove:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
319
+ .dsh-qa-starters__remove:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
312
320
  .dsh-qa-starters__remove svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
313
321
  .dsh-qa-toolpicker__list{display:flex;flex-direction:column;gap:2px;max-height:min(52vh,440px);margin:8px 0 0;padding:0;list-style:none;overflow-y:auto}
314
322
  .dsh-qa-toolpicker__group{padding:8px 0 3px;color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:600;line-height:16px}
@@ -337,29 +345,29 @@ export const QA_SURFACE_STYLES = String.raw `
337
345
  .dsh-qa-header__agents:disabled{opacity:.45;cursor:default}
338
346
  .dsh-qa-header__agents[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
339
347
  .dsh-qa-header__agents svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
340
- .dsh-qa-header__agents:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
348
+ .dsh-qa-header__agents:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
341
349
  .dsh-qa-agentview{display:flex;align-items:center;gap:8px;flex:none;padding:6px 28px;border-bottom:1px solid var(--dsh-qa-info30);background:var(--dsh-qa-info10);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}
342
350
  .dsh-qa-header__viewing{display:inline-flex;align-items:center;gap:7px;flex:none;padding:3px 10px;border-radius:999px;background:var(--dsh-qa-info10);color:var(--dsh-qa-info);font-size:13px;line-height:20px;white-space:nowrap}
343
351
  .dsh-qa-header__viewing > svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
344
352
  .dsh-qa-header__back{border:0;background:transparent;padding:0;color:var(--dsh-qa-info);font:inherit;font-size:13px;font-weight:500;line-height:20px;cursor:pointer}
345
353
  .dsh-qa-header__back:hover{text-decoration:underline}
346
- .dsh-qa-header__back:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
354
+ .dsh-qa-header__back:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
347
355
  .dsh-qa-agentview strong{color:var(--dsw-alias-label-primary);font-weight:600}
348
356
  .dsh-qa-agentview__icon{width:16px;height:16px;flex:none;fill:none;stroke:var(--dsh-qa-info);stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
349
357
  .dsh-qa-agentview button{margin-left:auto;flex:none;padding:4px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsh-qa-info);font:inherit;font-size:13px;font-weight:500;cursor:pointer}
350
358
  .dsh-qa-agentview button:hover{background:color-mix(in srgb,var(--dsh-qa-info) 12%,transparent)}
351
- .dsh-qa-agentview button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
359
+ .dsh-qa-agentview button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
352
360
  .dsh-qa-agents{flex:none;display:flex;flex-direction:column;width:360px;min-height:0;border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base)}
353
361
  .dsh-qa-agents__head{display:flex;align-items:center;justify-content:space-between;flex:none;padding:14px 12px 10px 16px;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}
354
362
  .dsh-qa-agents__head button{appearance:none;display:grid;place-items:center;width:26px;height:26px;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
355
363
  .dsh-qa-agents__head button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
356
- .dsh-qa-agents__head button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
364
+ .dsh-qa-agents__head button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
357
365
  .dsh-qa-agents__head button svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round}
358
366
  .dsh-qa-agents__list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 10px 12px}
359
367
  .dsh-qa-agents__item{display:flex;align-items:center;gap:10px;width:100%;margin:0 0 6px;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);font:inherit;text-align:left;cursor:pointer}
360
368
  .dsh-qa-agents__item:hover{border-color:var(--dsw-alias-label-dimmed)}
361
369
  .dsh-qa-agents__item--active{border-color:var(--dsh-qa-brand)}
362
- .dsh-qa-agents__item:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
370
+ .dsh-qa-agents__item:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
363
371
  .dsh-qa-agents__dot{width:8px;height:8px;flex:none;border-radius:999px;background:var(--dsw-alias-label-tertiary)}
364
372
  .dsh-qa-agents__dot--running{background:var(--dsh-qa-success)}
365
373
  .dsh-qa-agents__text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
@@ -372,32 +380,46 @@ export const QA_SURFACE_STYLES = String.raw `
372
380
  .dsh-qa-header__sources:disabled{opacity:.45;cursor:default}
373
381
  .dsh-qa-header__sources[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
374
382
  .dsh-qa-header__sources svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
375
- .dsh-qa-header__sources:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
383
+ .dsh-qa-header__sources:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
376
384
  .dsh-qa-header__files{display:inline-flex;align-items:center;gap:6px;flex:none;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:20px;cursor:pointer}
377
385
  .dsh-qa-header__files:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
378
386
  .dsh-qa-header__files:disabled{opacity:.45;cursor:default}
379
387
  .dsh-qa-header__files[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
380
388
  .dsh-qa-header__files svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
381
- .dsh-qa-header__files:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
389
+ .dsh-qa-header__files:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
382
390
  .dsh-qa-header__settings{display:inline-flex;align-items:center;gap:6px;flex:none;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:20px;cursor:pointer}
383
391
  .dsh-qa-header__settings:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
384
392
  .dsh-qa-header__settings svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
385
- .dsh-qa-header__settings:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
393
+ .dsh-qa-header__settings:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
386
394
  .dsh-qa-role-selector select,.dsh-qa-header__admin{height:30px;padding:4px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;line-height:20px;cursor:pointer}
387
395
  .dsh-qa-role-selector select:hover,.dsh-qa-header__admin:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
388
- .dsh-qa-role-selector select:focus-visible,.dsh-qa-header__admin:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
396
+ .dsh-qa-role-selector select:focus-visible,.dsh-qa-header__admin:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
397
+ /* The surface's own palette choice, sized to the role control it sits beside.
398
+ Every colour here is a themed alias, so the control reads the same in the
399
+ light and the dark palette it is switching between. The pressed cube borrows
400
+ the pairing .dsh-qa-preview__toggle already ships for its own aria-pressed
401
+ state — bg-layer-1 on a bg-layer-2 track, icon lifted to label-primary —
402
+ because an unknown var(--dsw-alias-*) drops its whole declaration at
403
+ computed-value time without a word of complaint, and the only symptom would
404
+ be a theme switcher that never shows which theme is on. */
405
+ .dsh-qa-theme{display:inline-flex;align-items:center;gap:2px;flex:none;height:30px;padding:2px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-2)}
406
+ .dsh-qa-theme__option{appearance:none;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:0;border-radius:6px;background:0 0;color:var(--dsw-alias-label-secondary);cursor:pointer}
407
+ .dsh-qa-theme__option:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
408
+ .dsh-qa-theme__option[aria-pressed="true"]{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary)}
409
+ .dsh-qa-theme__option:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
410
+ .dsh-qa-theme__option svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
389
411
  .dsh-qa-header__admin{white-space:nowrap}
390
412
  .dsh-qa-admin-preview{position:absolute;z-index:8;right:20px;bottom:14px;display:flex;align-items:center;gap:8px;padding:5px 6px 5px 12px;border:1px solid var(--dsh-qa-warning);border-radius:999px;background:var(--dsh-qa-warning10);color:var(--dsw-alias-label-primary);font-size:11px;font-weight:700;letter-spacing:.04em}
391
413
  .dsh-qa-admin-preview__exit{appearance:none;border:1px solid var(--dsh-qa-warning);border-radius:999px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font:inherit;font-size:11px;font-weight:600;letter-spacing:.02em;padding:2px 9px;cursor:pointer}
392
414
  .dsh-qa-admin-preview__exit:hover{border-color:var(--dsw-alias-label-dimmed)}
393
- .dsh-qa-admin-preview__exit:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
415
+ .dsh-qa-admin-preview__exit:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
394
416
  .dsh-qa-role-selector__notice{margin:0;color:var(--dsw-alias-label-secondary);font-size:14px;line-height:1.6}
395
417
  .dsh-qa-admin{${QA_BRAND_TOKENS};position:fixed;inset:0;z-index:2147483000;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font-family:inherit}
396
418
  .dsh-qa-admin *{box-sizing:border-box}
397
419
  .dsh-qa-admin button,.dsh-qa-admin input,.dsh-qa-admin textarea,.dsh-qa-admin select{font:inherit}
398
420
  .dsh-qa-admin__header{display:flex;align-items:center;justify-content:space-between;min-height:64px;padding:10px 24px;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2)}
399
421
  .dsh-qa-admin__header>div{display:flex;flex-direction:column;gap:2px}.dsh-qa-admin__header strong{font-size:16px}.dsh-qa-admin__header span{color:var(--dsw-alias-label-tertiary);font-size:12px}
400
- .dsh-qa-admin button{padding:7px 11px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);cursor:pointer}.dsh-qa-admin button:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}.dsh-qa-admin button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}.dsh-qa-admin button:disabled{opacity:.45;cursor:default}
422
+ .dsh-qa-admin button{padding:7px 11px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);cursor:pointer}.dsh-qa-admin button:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}.dsh-qa-admin button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}.dsh-qa-admin button:disabled{opacity:.45;cursor:default}
401
423
  .dsh-qa-admin__layout{display:grid;grid-template-columns:220px minmax(0,1fr);flex:1;min-height:0}.dsh-qa-admin__layout>nav{display:flex;flex-direction:column;gap:4px;padding:24px 14px;border-right:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2)}.dsh-qa-admin__layout>nav strong{padding:0 10px 10px;color:var(--dsw-alias-label-tertiary);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.dsh-qa-admin__layout>nav button{text-align:left;border-color:transparent;background:transparent}.dsh-qa-admin__layout>nav button[aria-current="page"]{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary);font-weight:600}
402
424
  .dsh-qa-admin__content,.dsh-qa-role-editor{min-width:0;overflow-y:auto;padding:30px clamp(20px,4vw,56px) 90px}.dsh-qa-admin__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin:0 0 24px}.dsh-qa-admin__title-row h1,.dsh-qa-admin__title-row h2{margin:0 0 6px;font-size:24px}.dsh-qa-admin__title-row p{margin:0;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.dsh-qa-admin__primary{border-color:transparent!important;background:var(--dsh-qa-accent)!important;color:var(--dsh-qa-accent-contrast)!important;font-weight:600}.dsh-qa-admin__danger{color:var(--dsh-qa-error)!important}.dsh-qa-admin__back{margin:0 0 12px;padding-left:0!important;border:0!important;background:transparent!important;color:var(--dsh-qa-accent)!important}
403
425
  .dsh-qa-role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.dsh-qa-role-card{display:flex;flex-direction:column;gap:16px;min-width:0;padding:18px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2)}.dsh-qa-role-card__head{display:flex;align-items:flex-start;gap:10px}.dsh-qa-role-card__head>span{font-size:22px}.dsh-qa-role-card__head>div{flex:1;min-width:0}.dsh-qa-role-card h2{margin:0;font-size:17px}.dsh-qa-role-card code{color:var(--dsw-alias-label-tertiary);font-size:11px}.dsh-qa-role-card em{padding:2px 7px;border-radius:999px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-size:10px;font-style:normal}.dsh-qa-role-card>p{min-height:38px;margin:0;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:19px}.dsh-qa-role-card__counts{display:flex;flex-wrap:wrap;gap:8px;color:var(--dsw-alias-label-tertiary);font-size:11px}.dsh-qa-role-card__actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}.dsh-qa-role-card__actions button{padding:5px 8px;font-size:11px}
@@ -418,7 +440,7 @@ export const QA_SURFACE_STYLES = String.raw `
418
440
  .dsh-qa-panel-launcher__button{appearance:none;display:grid;place-items:center;width:30px;height:30px;padding:0;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer}
419
441
  .dsh-qa-panel-launcher__button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
420
442
  .dsh-qa-panel-launcher__button[aria-pressed="true"]{background:var(--dsw-alias-bg-module-platform);color:var(--dsh-qa-accent)}
421
- .dsh-qa-panel-launcher__button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
443
+ .dsh-qa-panel-launcher__button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
422
444
  .dsh-qa-panel-launcher__button svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}
423
445
  .dsh-qa-header__reset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}
424
446
  .dsh-qa-header__reset:disabled{opacity:.45;cursor:default}
@@ -434,7 +456,7 @@ export const QA_SURFACE_STYLES = String.raw `
434
456
  .dsh-qa-extension-panel__header h2{flex:1;min-width:0;overflow:hidden;margin:0;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:600;line-height:20px;text-overflow:ellipsis;white-space:nowrap}
435
457
  .dsh-qa-extension-panel__close{appearance:none;display:grid;place-items:center;flex:none;width:30px;height:30px;padding:0;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}
436
458
  .dsh-qa-extension-panel__close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
437
- .dsh-qa-extension-panel__close:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
459
+ .dsh-qa-extension-panel__close:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
438
460
  .dsh-qa-extension-panel__close svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
439
461
  .dsh-qa-extension-panel__bodies,.dsh-qa-extension-panel__body{position:relative;flex:1;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}
440
462
  .dsh-qa-extension-panel__body[hidden]{display:none}
@@ -456,7 +478,7 @@ export const QA_SURFACE_STYLES = String.raw `
456
478
  .dsh-qa-variants button{display:grid;place-items:center;width:24px;height:24px;padding:0;border:0;border-radius:7px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}
457
479
  .dsh-qa-variants button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
458
480
  .dsh-qa-variants button:disabled{opacity:.4;cursor:default}
459
- .dsh-qa-variants button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-1px}
481
+ .dsh-qa-variants button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-1px}
460
482
  .dsh-qa-variants button svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
461
483
  .dsh-qa-variants span{min-width:34px;text-align:center;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:20px;font-variant-numeric:tabular-nums}
462
484
  .dsh-qa-panel{flex:none;display:flex;flex-direction:column;width:360px;min-height:0;border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base)}
@@ -466,23 +488,23 @@ export const QA_SURFACE_STYLES = String.raw `
466
488
  .dsh-qa-panel__tab:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
467
489
  .dsh-qa-panel__tab--active{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
468
490
  .dsh-qa-panel__tab--active span{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary)}
469
- .dsh-qa-panel__tab:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
491
+ .dsh-qa-panel__tab:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
470
492
  .dsh-qa-panel__close{appearance:none;display:grid;place-items:center;width:26px;height:26px;margin-left:auto;flex:none;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
471
493
  .dsh-qa-panel__close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
472
- .dsh-qa-panel__close:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
494
+ .dsh-qa-panel__close:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
473
495
  .dsh-qa-panel__close svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round}
474
496
  .dsh-qa-panel__body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
475
497
  .dsh-qa-sourcespanel{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
476
498
  .dsh-qa-sourcespanel__all{appearance:none;flex:none;align-self:flex-start;margin:2px 12px 10px 16px;padding:0;border:0;background:transparent;color:var(--dsh-qa-accent);font:inherit;font-size:12px;cursor:pointer}
477
499
  .dsh-qa-sourcespanel__all:hover{text-decoration:underline}
478
- .dsh-qa-sourcespanel__all:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
500
+ .dsh-qa-sourcespanel__all:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
479
501
  .dsh-qa-files{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 10px 12px}
480
502
  .dsh-qa-files__empty{margin:12px 6px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}
481
503
  .dsh-qa-files__group{margin:0 0 14px}
482
504
  .dsh-qa-files__group h3{display:flex;align-items:center;gap:7px;margin:6px 4px 8px;color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600;line-height:18px}
483
505
  .dsh-qa-files__jump{appearance:none;display:grid;place-items:center;width:22px;height:22px;flex:none;padding:0;border:0;border-radius:6px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
484
506
  .dsh-qa-files__jump:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
485
- .dsh-qa-files__jump:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
507
+ .dsh-qa-files__jump:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
486
508
  .dsh-qa-files__jump svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
487
509
  .dsh-qa-files__items{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
488
510
  .dsh-qa-files__workspace{margin:0 0 14px}
@@ -492,12 +514,12 @@ export const QA_SURFACE_STYLES = String.raw `
492
514
  .dsh-qa-ws__crumb{appearance:none;padding:1px 3px;border:0;border-radius:5px;background:0 0;color:var(--dsh-qa-accent);font:inherit;font-size:12px;cursor:pointer}
493
515
  .dsh-qa-ws__crumb:hover{background:var(--dsw-alias-interactive-bg-hover)}
494
516
  .dsh-qa-ws__crumb[aria-current=true]{color:var(--dsw-alias-label-primary);font-weight:600;cursor:default}
495
- .dsh-qa-ws__crumb:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
517
+ .dsh-qa-ws__crumb:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
496
518
  .dsh-qa-ws__list{display:flex;flex-direction:column;gap:2px;margin:0;padding:0;list-style:none}
497
519
  .dsh-qa-ws__row{min-width:0}
498
520
  .dsh-qa-ws__entry{appearance:none;display:flex;align-items:center;gap:7px;width:100%;box-sizing:border-box;padding:5px 7px;border:0;border-radius:8px;background:0 0;color:var(--dsw-alias-label-primary);font:inherit;font-size:12px;line-height:17px;text-align:left;cursor:pointer}
499
521
  .dsh-qa-ws__entry:hover{background:var(--dsw-alias-interactive-bg-hover)}
500
- .dsh-qa-ws__entry:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
522
+ .dsh-qa-ws__entry:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
501
523
  .dsh-qa-ws__icon{display:grid;place-items:center;flex:none;color:var(--dsw-alias-label-tertiary)}
502
524
  .dsh-qa-ws__entry[data-kind=directory] .dsh-qa-ws__icon{color:var(--dsh-qa-accent)}
503
525
  .dsh-qa-ws__icon svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
@@ -508,7 +530,7 @@ export const QA_SURFACE_STYLES = String.raw `
508
530
  .dsh-qa-ws__preview-head{display:flex;align-items:center;gap:7px;min-width:0}
509
531
  .dsh-qa-ws__back{appearance:none;flex:none;padding:1px 3px;border:0;border-radius:5px;background:0 0;color:var(--dsh-qa-accent);font:inherit;font-size:12px;cursor:pointer}
510
532
  .dsh-qa-ws__back:hover{background:var(--dsw-alias-interactive-bg-hover)}
511
- .dsh-qa-ws__back:focus-visible,.dsh-qa-ws__toggle:focus-visible,.dsh-qa-ws__download:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
533
+ .dsh-qa-ws__back:focus-visible,.dsh-qa-ws__toggle:focus-visible,.dsh-qa-ws__download:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
512
534
  .dsh-qa-ws__preview-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600}
513
535
  .dsh-qa-ws__download{appearance:none;flex:none;padding:2px 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font:inherit;font-size:11px;cursor:pointer}
514
536
  .dsh-qa-ws__download:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
@@ -519,7 +541,7 @@ export const QA_SURFACE_STYLES = String.raw `
519
541
  .dsh-qa-ws__pdf{width:100%;height:62vh;min-height:240px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3)}
520
542
  .dsh-qa-ws__expand{appearance:none;display:grid;place-items:center;flex:none;width:24px;height:24px;padding:0;border:0;border-radius:6px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
521
543
  .dsh-qa-ws__expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
522
- .dsh-qa-ws__expand:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
544
+ .dsh-qa-ws__expand:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
523
545
  .dsh-qa-ws__expand svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
524
546
  .dsh-qa-ws__expanded{display:flex;flex-direction:column;gap:8px;min-width:0}
525
547
  .dsh-qa-ws__expanded .dsh-qa-ws__text{max-height:none;font-size:12px}
@@ -540,7 +562,7 @@ button.dsh-qa-sources__item{display:flex;gap:10px;width:100%;margin:0 0 8px;padd
540
562
  .dsh-qa-sources__kind{display:grid;place-items:center;width:18px;height:18px;flex:none;margin-top:1px;color:var(--dsw-alias-label-tertiary)}
541
563
  .dsh-qa-sources__kind svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
542
564
  .dsh-qa-sources__item:hover{border-color:var(--dsw-alias-label-dimmed)}
543
- .dsh-qa-sources__item:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
565
+ .dsh-qa-sources__item:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
544
566
  .dsh-qa-sources__text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
545
567
  .dsh-qa-sources__title{overflow:hidden;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:18px;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}
546
568
  a.dsh-qa-sources__title:hover{text-decoration:underline}
@@ -550,14 +572,14 @@ a.dsh-qa-sources__title:hover{text-decoration:underline}
550
572
  .dsh-qa-sourcedetail__head{display:flex;align-items:center;gap:8px;flex:none;padding:2px 2px 8px}
551
573
  .dsh-qa-sourcedetail__back{display:grid;place-items:center;width:26px;height:26px;flex:none;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
552
574
  .dsh-qa-sourcedetail__back:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
553
- .dsh-qa-sourcedetail__back:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
575
+ .dsh-qa-sourcedetail__back:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
554
576
  .dsh-qa-sourcedetail__back svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
555
577
  .dsh-qa-sourcedetail__kind{display:grid;place-items:center;width:16px;height:16px;flex:none;color:var(--dsw-alias-label-tertiary)}
556
578
  .dsh-qa-sourcedetail__kind svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
557
579
  .dsh-qa-sourcedetail__title{min-width:0;overflow:hidden;flex:1;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px;text-overflow:ellipsis;white-space:nowrap}
558
580
  .dsh-qa-sourcedetail__open{flex:none;padding:3px 10px;border:1px solid var(--dsh-qa-accent);border-radius:999px;color:var(--dsh-qa-accent);font-size:12px;font-weight:500;line-height:18px;text-decoration:none}
559
581
  .dsh-qa-sourcedetail__open:hover{background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast)}
560
- .dsh-qa-sourcedetail__open:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
582
+ .dsh-qa-sourcedetail__open:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
561
583
  .dsh-qa-sourcedetail__target{flex:none;margin:0 2px 8px;overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}
562
584
  .dsh-qa-sourcedetail__body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;padding:12px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-size:12px;line-height:19px;white-space:pre-wrap;overflow-wrap:anywhere}
563
585
  .dsh-qa-sourcedetail__body a{color:var(--dsh-qa-accent);text-decoration:underline}
@@ -606,7 +628,7 @@ span.dsh-qa-message__image[data-state="loading"]{animation:dsh-qa-spin 1.2s line
606
628
  .dsh-qa-message--assistant .dsh-qa-message__content{width:100%;padding:2px 0}
607
629
  .dsh-qa-message__sources{appearance:none;margin-top:10px;padding:4px 9px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;line-height:18px;cursor:pointer}
608
630
  .dsh-qa-message__sources:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
609
- .dsh-qa-message__sources:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
631
+ .dsh-qa-message__sources:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
610
632
  .dsh-qa-message--system .dsh-qa-message__content{padding:7px 11px;border-radius:9px;background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}
611
633
  .dsh-qa-message[data-status="info"] .dsh-qa-message__content{color:var(--dsh-qa-info)}
612
634
  .dsh-qa-message[data-status="error"] .dsh-qa-message__content{color:var(--dsh-qa-error)}
@@ -614,7 +636,7 @@ span.dsh-qa-message__image[data-state="loading"]{animation:dsh-qa-spin 1.2s line
614
636
  .dsh-qa-message--user .dsh-qa-message__actions{justify-content:flex-end}
615
637
  .dsh-qa-message__actions button{display:grid;place-items:center;width:28px;height:28px;padding:5px;border:0;border-radius:999px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}
616
638
  .dsh-qa-message__actions button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}
617
- .dsh-qa-message__actions button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
639
+ .dsh-qa-message__actions button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
618
640
  .dsh-qa-message__actions svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round}
619
641
  .dsh-qa-message__actions button[data-active]{color:var(--dsh-qa-accent)}
620
642
  .dsh-qa-message__actions button[data-active]:hover{color:var(--dsh-qa-accent)}
@@ -632,7 +654,7 @@ span.dsh-qa-message__image[data-state="loading"]{animation:dsh-qa-spin 1.2s line
632
654
  .dsh-qa-rail__mark--preview::before{width:18px;background:var(--dsw-alias-label-tertiary)}
633
655
  .dsh-qa-rail__mark--busy::before{animation:dsh-qa-rail-busy 1s ease-in-out infinite}
634
656
  .dsh-qa-rail__mark--active::before{width:20px;background:var(--dsw-alias-label-primary)}
635
- .dsh-qa-rail__mark:focus-visible{outline:1px solid var(--dsh-qa-accent);outline-offset:2px}
657
+ .dsh-qa-rail__mark:focus-visible{outline:var(--dsw-focus-ring-width, 1px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
636
658
  .dsh-qa-rail__mark:focus-visible::before{width:20px;background:var(--dsh-qa-accent)}
637
659
  .dsh-qa-rail__preview{position:absolute;top:clamp(0px,calc(var(--dsh-qa-rail-pos) + var(--dsh-qa-rail-inset) - var(--dsh-qa-rail-scroll-top) - var(--dsh-qa-rail-preview-height)/2),calc(100% - var(--dsh-qa-rail-preview-height)));right:calc(100% + 10px);box-sizing:border-box;width:min(300px,60vw);max-height:var(--dsh-qa-rail-preview-height);overflow:hidden;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);box-shadow:var(--dsw-shadow-lv2);pointer-events:none;animation:dsh-qa-rail-preview-enter 120ms ease-out;transition:top 140ms cubic-bezier(.2,.8,.2,1)}
638
660
  .dsh-qa-rail__preview-prompt,.dsh-qa-rail__preview-response{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical}
@@ -644,7 +666,7 @@ span.dsh-qa-message__image[data-state="loading"]{animation:dsh-qa-spin 1.2s line
644
666
  @media (max-width:900px){.dsh-qa-rail{display:none}}
645
667
  .dsh-qa-srcref{position:relative;display:inline-flex;align-items:center;gap:5px;max-width:320px;margin:0 1px;padding:2px 9px 2px 7px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:18px;font-weight:500;text-decoration:none;vertical-align:baseline;cursor:pointer;transition:border-color .12s,color .12s}
646
668
  a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
647
- .dsh-qa-srcref:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
669
+ .dsh-qa-srcref:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
648
670
  .dsh-qa-srcref__icon{display:grid;place-items:center;width:14px;height:14px;flex:none;color:var(--dsw-alias-label-tertiary)}
649
671
  .dsh-qa-srcref__icon svg{width:13px;height:13px;display:block;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
650
672
  .dsh-qa-srcref__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@@ -694,25 +716,9 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
694
716
  .dsh-qa-md-code__lang{min-width:0;overflow:hidden;color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code,ui-monospace,SFMono-Regular,Consolas,monospace);font-size:11px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}
695
717
  .dsh-qa-md-code__copy{appearance:none;flex:none;padding:0;border:0;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:11px;line-height:18px;cursor:pointer}
696
718
  .dsh-qa-md-code__copy:hover{color:var(--dsw-alias-label-primary)}
697
- .dsh-qa-md-code__copy:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
719
+ .dsh-qa-md-code__copy:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
698
720
  .dsh-qa-md-code pre{overflow-x:auto;margin:0;padding:16px;border:0;border-radius:0 0 12px 12px;background:transparent;font-family:var(--ds-font-family-code,ui-monospace,SFMono-Regular,Consolas,monospace);font-size:var(--dsw-font-markdown-code-block-font-size,11px);line-height:var(--dsw-font-markdown-code-block-line-height,19px);white-space:pre-wrap;word-break:break-word}
699
721
  .dsh-qa-md-code pre code{display:block;padding:0;border:0;background:transparent;font:inherit}
700
- .dsh-qa-mermaid{position:relative;overflow:hidden;margin:16px 0;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}
701
- .dsh-qa-mermaid__toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 8px 14px;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);font-size:12px;line-height:20px}
702
- .dsh-qa-mermaid__actions{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}
703
- .dsh-qa-mermaid__actions button{appearance:none;padding:3px 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer}
704
- .dsh-qa-mermaid__actions button:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
705
- .dsh-qa-mermaid__actions button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
706
- .dsh-qa-mermaid__viewport{min-height:180px;max-height:68vh;overflow:auto;overscroll-behavior:contain;padding:20px;background:var(--dsw-alias-bg-layer-1)}
707
- .dsh-qa-mermaid__canvas{min-width:320px;margin:auto;transition:width .16s ease}
708
- .dsh-qa-mermaid__canvas svg{display:block;width:100%;max-width:none!important;height:auto;margin:auto}
709
- .dsh-qa-mermaid__loading{display:grid;place-items:center;min-height:140px;color:var(--dsw-alias-label-tertiary)}
710
- .dsh-qa-mermaid>.dsh-qa-md-code{margin:0;border-radius:0;border-top:1px solid var(--dsw-alias-border-l2)}
711
- .dsh-qa-mermaid--error{padding:12px}
712
- .dsh-qa-mermaid--error>p{margin:0 0 10px;color:var(--dsh-qa-error)}
713
- .dsh-qa-mermaid--error>.dsh-qa-md-code{margin:0;border-radius:10px;border-top:0}
714
- .dsh-qa-mermaid--expanded{position:fixed;inset:16px;z-index:1000;display:flex;flex-direction:column;margin:0;box-shadow:var(--dsw-shadow-lv3)}
715
- .dsh-qa-mermaid--expanded .dsh-qa-mermaid__viewport{flex:1;max-height:none}
716
722
  .dsh-qa-md-tok[data-tok="comment"]{color:var(--shiki-token-comment)}
717
723
  .dsh-qa-md-tok[data-tok="string"]{color:var(--shiki-token-string)}
718
724
  .dsh-qa-md-tok[data-tok="keyword"]{color:var(--shiki-token-keyword)}
@@ -732,6 +738,8 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
732
738
  .dsh-qa-md-table tbody tr:nth-child(even){background:var(--dsw-alias-bg-layer-2)}
733
739
  .dsh-qa-md-math{overflow-x:auto;overflow-y:hidden;margin:16px 0;text-align:center}
734
740
  .dsh-qa-md-math .katex-display{margin:0}
741
+ .dsh-qa-md-math--pending{text-align:left}
742
+ .dsh-qa-md .dsh-qa-md-math--pending>code{display:block;padding:0;border:0;border-radius:0;background:transparent;color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,ui-monospace,SFMono-Regular,Consolas,monospace);font-size:var(--dsw-font-markdown-code-block-font-size,12px);line-height:var(--dsw-font-markdown-code-block-line-height,19px);white-space:pre-wrap;overflow-wrap:anywhere}
735
743
  .dsh-qa-md-fn-ref{margin:0 1px;font-size:.8em;line-height:0;vertical-align:super}
736
744
  .dsh-qa-md-footnotes{margin:20px 0 0;padding-top:12px;border-top:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);font-size:.9em}
737
745
  .dsh-qa-md-footnotes ol{margin:0;padding-left:22px}
@@ -745,7 +753,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
745
753
  .dsh-qa-notice__summary{display:flex;align-items:center;gap:7px;min-height:32px;padding:4px 10px;list-style:none;color:var(--dsw-alias-label-secondary);font-size:13px;cursor:pointer}
746
754
  .dsh-qa-notice__summary::-webkit-details-marker{display:none}
747
755
  .dsh-qa-notice__summary:hover{color:var(--dsw-alias-label-primary)}
748
- .dsh-qa-notice__summary:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
756
+ .dsh-qa-notice__summary:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
749
757
  .dsh-qa-notice__icon{width:15px;height:15px;flex:none;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}
750
758
  .dsh-qa-notice__title{flex:1;min-width:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;white-space:nowrap}
751
759
  .dsh-qa-notice__chevron{width:13px;height:13px;flex:none;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;transition:transform .16s ease}
@@ -759,7 +767,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
759
767
  .dsh-qa-work__toggle:hover{color:var(--dsw-alias-label-primary)}
760
768
  .dsh-qa-work[data-state="error"] .dsh-qa-work__toggle{color:var(--dsh-qa-error)}
761
769
  .dsh-qa-work[data-state="error"] .dsh-qa-work__toggle:hover{color:var(--dsh-qa-error)}
762
- .dsh-qa-work__toggle:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
770
+ .dsh-qa-work__toggle:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
763
771
  .dsh-qa-work__chevron{width:14px;height:14px;flex:none;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;transition:transform .16s ease}
764
772
  .dsh-qa-work__chevron[data-open],.dsh-qa-work-tool[open]>.dsh-qa-work-item .dsh-qa-work__chevron{transform:rotate(90deg)}
765
773
  .dsh-qa-work__spinner,.dsh-qa-work-item__spinner{width:13px;height:13px;flex:none;border:1.5px solid var(--dsw-alias-border-l2);border-top-color:var(--dsw-alias-label-secondary);border-radius:50%;animation:dsh-qa-spin .9s linear infinite}
@@ -770,7 +778,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
770
778
  .dsh-qa-work-tool>summary{list-style:none;cursor:pointer}
771
779
  .dsh-qa-work-tool>summary::-webkit-details-marker{display:none}
772
780
  .dsh-qa-work-tool>summary:hover{background:var(--dsw-alias-interactive-bg-hover)}
773
- .dsh-qa-work-tool>summary:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-1px}
781
+ .dsh-qa-work-tool>summary:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-1px}
774
782
  .dsh-qa-work-item__icon{display:grid;place-items:center;width:16px;height:16px;flex:none;color:var(--dsw-alias-label-tertiary)}
775
783
  .dsh-qa-work-item__icon svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}
776
784
  .dsh-qa-work-item__icon[data-state="ok"]{color:var(--dsh-qa-success,var(--dsw-alias-label-secondary))}
@@ -804,7 +812,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
804
812
  .dsh-qa-approval__button{appearance:none;padding:7px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;font-weight:600;line-height:18px;cursor:pointer}
805
813
  .dsh-qa-approval__button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}
806
814
  .dsh-qa-approval__button:disabled{opacity:.5;cursor:default}
807
- .dsh-qa-approval__button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
815
+ .dsh-qa-approval__button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
808
816
  .dsh-qa-approval__button--primary{border-color:transparent;background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast)}
809
817
  .dsh-qa-approval__button--primary:hover:not(:disabled){background:var(--dsh-qa-accent-hover)}
810
818
  .dsh-qa-questions{display:flex;flex-direction:column;gap:8px;width:100%;margin-bottom:10px}
@@ -826,14 +834,14 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
826
834
  .dsh-qa-question__custom{display:flex;flex-direction:column;gap:4px}
827
835
  .dsh-qa-question__custom span{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}
828
836
  .dsh-qa-question__custom textarea{width:100%;resize:vertical;padding:8px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:19px}
829
- .dsh-qa-question__custom textarea:focus-visible{outline:2px solid var(--dsh-qa-info);outline-offset:1px}
837
+ .dsh-qa-question__custom textarea:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-info));outline-offset:1px}
830
838
  .dsh-qa-question__fieldset:disabled{opacity:.6}
831
839
  .dsh-qa-question__error{margin:0;color:var(--dsh-qa-error);font-size:12px;line-height:17px}
832
840
  .dsh-qa-question__actions{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}
833
841
  .dsh-qa-question__button{appearance:none;padding:7px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;font-weight:600;line-height:18px;cursor:pointer}
834
842
  .dsh-qa-question__button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}
835
843
  .dsh-qa-question__button:disabled{opacity:.5;cursor:default}
836
- .dsh-qa-question__button:focus-visible{outline:2px solid var(--dsh-qa-info);outline-offset:1px}
844
+ .dsh-qa-question__button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-info));outline-offset:1px}
837
845
  .dsh-qa-question__button--primary{border-color:transparent;background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast)}
838
846
  .dsh-qa-question__button--primary:hover:not(:disabled){background:var(--dsh-qa-accent-hover)}
839
847
  .dsh-qa-questions__bar{display:flex;align-items:center;justify-content:space-between;gap:8px}
@@ -841,6 +849,31 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
841
849
  .dsh-qa-question__button--stop{display:inline-flex;align-items:center;gap:6px;flex:none}
842
850
  .dsh-qa-question__button--stop svg{width:13px;height:13px;flex:none;fill:currentColor}
843
851
  .dsh-qa-composer-slot[hidden]{display:none}
852
+ .dsh-qa-queue{display:flex;flex-direction:column;gap:6px;width:100%;margin-bottom:8px;padding:7px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2)}
853
+ .dsh-qa-queue__header{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:0 2px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;line-height:17px;cursor:pointer}
854
+ .dsh-qa-queue__header:hover:not(:disabled){color:var(--dsw-alias-label-primary)}
855
+ .dsh-qa-queue__header:disabled{cursor:default;opacity:.6}
856
+ .dsh-qa-queue__header:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
857
+ .dsh-qa-queue__chevron{display:grid;place-items:center;flex:none;width:14px;height:14px;color:var(--dsw-alias-label-tertiary)}
858
+ .dsh-qa-queue__list{display:flex;flex-direction:column;gap:4px;max-height:168px;margin:0;padding:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;list-style:none}
859
+ .dsh-qa-queue__list[hidden]{display:none}
860
+ .dsh-qa-queue__row{display:flex;align-items:center;gap:8px;min-width:0;padding-top:4px;border-top:1px solid var(--dsw-alias-border-l2)}
861
+ .dsh-qa-queue__row:first-child{padding-top:0;border-top:0}
862
+ .dsh-qa-queue__text{display:flex;align-items:center;gap:6px;flex:1;min-width:0}
863
+ .dsh-qa-queue__preview{flex:1;min-width:0;color:var(--dsw-alias-label-primary);font-size:13px;line-height:19px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
864
+ .dsh-qa-queue__files{display:inline-flex;align-items:center;gap:3px;flex:none;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}
865
+ .dsh-qa-queue__status{flex:none;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}
866
+ .dsh-qa-queue__error{margin:0;color:var(--dsh-qa-error);font-size:12px;line-height:17px}
867
+ .dsh-qa-queue__editor{display:block;flex:1;min-width:0;max-height:120px;margin:-2px 0;padding:4px 8px;resize:none;overflow-y:auto;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:19px;outline:none}
868
+ .dsh-qa-queue__editor:focus{border-color:var(--dsh-qa-accent)}
869
+ .dsh-qa-queue__actions{display:flex;align-items:center;gap:2px;flex:none}
870
+ .dsh-qa-queue__action{display:grid;place-items:center;width:26px;height:26px;padding:0;border:0;border-radius:7px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}
871
+ .dsh-qa-queue__action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
872
+ .dsh-qa-queue__action:disabled{opacity:.4;cursor:default}
873
+ .dsh-qa-queue__action:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
874
+ .dsh-qa-queue__action--danger:hover:not(:disabled){color:var(--dsh-qa-error)}
875
+ .dsh-qa-queue__chevron svg,.dsh-qa-queue__action svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
876
+ .dsh-qa-queue__files svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
844
877
  .dsh-qa-footer{position:relative;flex:none;padding:28px 16px max(12px,env(safe-area-inset-bottom));background:linear-gradient(180deg,color-mix(in srgb,var(--dsw-alias-bg-base) 0%,transparent) 0,var(--dsw-alias-bg-base) 28px)}
845
878
  .dsh-qa-footer__inner{width:100%;max-width:var(--dsh-qa-content-width);margin:0 auto}
846
879
  .dsh-qa-composer-wrap{display:flex;flex-direction:column;gap:10px;width:100%}
@@ -850,7 +883,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
850
883
  .dsh-qa-quick-questions button{flex:none;max-width:min(360px,80vw);padding:8px 13px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
851
884
  .dsh-qa-quick-questions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
852
885
  .dsh-qa-quick-questions button:disabled{opacity:.5;cursor:default}
853
- .dsh-qa-quick-questions button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
886
+ .dsh-qa-quick-questions button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
854
887
  .dsh-qa-composer-wrap--drag .dsh-qa-composer{border-color:var(--dsh-qa-accent);border-style:dashed;background:color-mix(in srgb,var(--dsh-qa-accent) 6%,var(--dsw-specific-input-major))}
855
888
  .dsh-qa-composer__images{display:flex;flex-wrap:wrap;gap:8px}
856
889
  .dsh-qa-composer__files{display:flex;flex-wrap:wrap;gap:8px}
@@ -861,19 +894,19 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
861
894
  .dsh-qa-file__meta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}
862
895
  .dsh-qa-file button{display:grid;place-items:center;flex:none;width:18px;height:18px;padding:0;border:0;border-radius:999px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}
863
896
  .dsh-qa-file button:hover{color:var(--dsh-qa-error)}
864
- .dsh-qa-file button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
897
+ .dsh-qa-file button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
865
898
  .dsh-qa-file button svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round}
866
899
  .dsh-qa-composer__image{position:relative;display:block;width:64px;height:64px;flex:none}
867
900
  .dsh-qa-composer__image img{display:block;width:100%;height:100%;object-fit:cover;border-radius:10px;border:1px solid var(--dsw-alias-border-l2)}
868
901
  .dsh-qa-composer__image button{position:absolute;top:-6px;right:-6px;display:grid;place-items:center;width:18px;height:18px;padding:0;border:0;border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);cursor:pointer;box-shadow:var(--dsw-shadow-lv2)}
869
902
  .dsh-qa-composer__image button:hover{color:var(--dsh-qa-error)}
870
- .dsh-qa-composer__image button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
903
+ .dsh-qa-composer__image button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
871
904
  .dsh-qa-composer__image button svg{width:9px;height:9px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round}
872
905
  .dsh-qa-composer__attachment-error{margin:0;color:var(--dsh-qa-error);font-size:12px;line-height:18px}
873
906
  .dsh-qa-composer__attach{display:grid;place-items:center;flex:none;width:30px;height:30px;padding:0;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}
874
907
  .dsh-qa-composer__attach:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
875
908
  .dsh-qa-composer__attach:disabled{opacity:.4;cursor:default}
876
- .dsh-qa-composer__attach:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
909
+ .dsh-qa-composer__attach:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:1px}
877
910
  .dsh-qa-composer__attach svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
878
911
  .dsh-qa-slash{display:flex;flex-direction:column;gap:2px;width:100%;max-height:min(46vh,320px);overflow-y:auto;overscroll-behavior:contain;padding:6px;border:1px solid var(--dsw-alias-border-l2);border-radius:16px;background:var(--dsw-alias-bg-layer-2);box-shadow:var(--dsw-shadow-lv2)}
879
912
  .dsh-qa-slash__empty,.dsh-qa-slash__hint{margin:0;padding:8px 10px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}
@@ -911,10 +944,27 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
911
944
  .dsh-qa-composer__action--stop{background:var(--dsh-qa-error)}
912
945
  .dsh-qa-composer__action--stop svg{fill:currentColor;stroke:none}
913
946
  .dsh-qa-composer__action:disabled{opacity:.4;cursor:default}
914
- .dsh-qa-composer__action:focus-visible,.dsh-qa-error button:focus-visible,.dsh-qa-header__reset:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
947
+ .dsh-qa-composer__action:focus-visible,.dsh-qa-error button:focus-visible,.dsh-qa-header__reset:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
948
+ .dsh-qa-turn-notice{${QA_BRAND_TOKENS};position:fixed;right:16px;bottom:16px;z-index:2147483400;display:flex;flex-direction:column;gap:8px;width:min(320px,calc(100vw - 32px));pointer-events:none}
949
+ .dsh-qa-turn-notice__item{pointer-events:auto;display:flex;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);box-shadow:var(--dsw-shadow-lv2);overflow:hidden}
950
+ .dsh-qa-turn-notice__open{flex:1;min-width:0;appearance:none;font:inherit;text-align:left;background:0 0;border:0;padding:10px 4px 10px 12px;display:flex;flex-direction:column;gap:2px;cursor:pointer;color:inherit}
951
+ .dsh-qa-turn-notice__state{color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:600;letter-spacing:.04em}
952
+ .dsh-qa-turn-notice__chat{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
953
+ .dsh-qa-turn-notice__dismiss{flex:none;appearance:none;background:0 0;border:0;padding:0 12px;display:flex;align-items:center;color:var(--dsw-alias-label-tertiary);cursor:pointer}
954
+ .dsh-qa-turn-notice__dismiss:hover{color:var(--dsw-alias-label-primary)}
955
+ .dsh-qa-turn-notice__dismiss svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
956
+ .dsh-qa-turn-notice__open:focus-visible,.dsh-qa-turn-notice__dismiss:focus-visible,.dsh-qa-turn-notice__offer button:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
957
+ .dsh-qa-turn-notice__offer{pointer-events:auto;display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-3);box-shadow:var(--dsw-shadow-lv2)}
958
+ .dsh-qa-turn-notice__offer p{margin:0;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:1.5}
959
+ .dsh-qa-turn-notice__offer button{appearance:none;align-self:flex-start;font:inherit;font-size:12px;font-weight:600;color:var(--dsh-qa-accent-contrast);background:var(--dsh-qa-accent);border:0;border-radius:8px;padding:6px 10px;cursor:pointer}
960
+ .dsh-qa-turn-notice__offer button:hover{background:var(--dsh-qa-accent-hover)}
915
961
  @media (hover:hover){.dsh-qa-message__actions .dsh-qa-message__meta{opacity:0;transition:opacity 80ms ease}.dsh-qa-message:hover .dsh-qa-message__actions .dsh-qa-message__meta,.dsh-qa-message:focus-within .dsh-qa-message__actions .dsh-qa-message__meta,.dsh-qa-message__actions[data-persistent] .dsh-qa-message__meta{opacity:1}}.dsh-qa-message__actions[data-persistent] .dsh-qa-message__meta{opacity:1}
916
962
  @media (max-width:760px){.dsh-qa-admin__header{min-height:56px;padding:8px 14px}.dsh-qa-admin__layout{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr)}.dsh-qa-admin__layout>nav{flex-direction:row;overflow-x:auto;padding:8px;border-right:0;border-bottom:1px solid var(--dsw-alias-border-l2)}.dsh-qa-admin__layout>nav strong{display:none}.dsh-qa-admin__layout>nav button{white-space:nowrap}.dsh-qa-admin__content,.dsh-qa-role-editor{padding:20px 14px 76px}.dsh-qa-admin__title-row{flex-direction:column}.dsh-qa-role-grid{grid-template-columns:1fr}.dsh-qa-role-editor__general{grid-template-columns:1fr}.dsh-qa-skill-detail__grid{grid-template-columns:1fr}.dsh-qa-role-editor__wide{grid-column:auto}.dsh-qa-admin__savebar{bottom:-76px;margin:24px -14px -76px;padding:10px 14px}.dsh-qa-admin__savebar>span{display:none}.dsh-qa-audit li{grid-template-columns:1fr 1fr}.dsh-qa-capabilities__toolbar{align-items:stretch;flex-direction:column}.dsh-qa-capabilities__toolbar>input{width:100%}}
917
- @media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-panel,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{--dsh-qa-bleed:0px;max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-message--user .dsh-qa-message__content{max-width:88%;font-size:15px}.dsh-qa-message__content{font-size:14px}.dsh-qa-footer{padding-left:10px;padding-right:10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.dsh-qa-composer{min-height:84px;padding-top:12px}.dsh-qa-composer__hint{font-size:0}.dsh-qa-composer__hint::after{content:"Enter: отправить";font-size:11px}}
963
+ /* The phone layout: the sidebar yields to the conversation, and the header
964
+ row — title, role, palette, action cluster — is wider than the viewport with
965
+ every child refusing to shrink, so it wraps instead of pushing «Настройки»
966
+ past the clipped edge. */
967
+ @media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-panel,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-header__title-row{flex-wrap:wrap;row-gap:6px}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{--dsh-qa-bleed:0px;max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-message--user .dsh-qa-message__content{max-width:88%;font-size:15px}.dsh-qa-message__content{font-size:14px}.dsh-qa-footer{padding-left:10px;padding-right:10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.dsh-qa-composer{min-height:84px;padding-top:12px}.dsh-qa-composer__hint{font-size:0}.dsh-qa-composer__hint::after{content:"Enter: отправить";font-size:11px}}
918
968
  @media (max-height:480px) and (orientation:landscape){.dsh-qa-header__inner{padding-top:6px}.dsh-qa-header__tabs{display:none}.dsh-qa-transcript__inner{padding-top:12px}.dsh-qa-footer{padding-top:12px}.dsh-qa-composer{min-height:72px;gap:4px;padding-top:8px}}
919
969
  @media (prefers-reduced-motion:reduce){.dsh-qa-message__cursor,.dsh-qa-message__pending-spinner,.dsh-qa-work__spinner,.dsh-qa-work-item__spinner,.dsh-qa-command__spinner{animation:none}.dsh-qa-work__chevron{transition:none}.dsh-qa-rail__frame,.dsh-qa-rail__pos,.dsh-qa-rail__mark::before,.dsh-qa-rail__mark--busy::before,.dsh-qa-rail__preview{transition:none;animation:none}}
920
970
  ${QA_ADMIN_CONSOLE_STYLES}