@qaick/runner 0.31.2 → 0.32.1

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 (34) hide show
  1. package/package-dist/package.json +9 -5
  2. package/package-dist/src/ScreenshotButton.d.ts +5 -0
  3. package/package-dist/src/ScreenshotButton.d.ts.map +1 -0
  4. package/package-dist/src/ScreenshotButton.js +54 -0
  5. package/package-dist/src/ScreenshotButton.js.map +1 -0
  6. package/package-dist/src/ThemeToggle.d.ts +6 -0
  7. package/package-dist/src/ThemeToggle.d.ts.map +1 -0
  8. package/package-dist/src/ThemeToggle.js +6 -0
  9. package/package-dist/src/ThemeToggle.js.map +1 -0
  10. package/package-dist/src/runner/HeaderHelp.d.ts +7 -0
  11. package/package-dist/src/runner/HeaderHelp.d.ts.map +1 -0
  12. package/package-dist/src/runner/HeaderHelp.js +33 -0
  13. package/package-dist/src/runner/HeaderHelp.js.map +1 -0
  14. package/package-dist/src/runner/RunnerModule.d.ts +16 -1
  15. package/package-dist/src/runner/RunnerModule.d.ts.map +1 -1
  16. package/package-dist/src/runner/RunnerModule.js +67 -15
  17. package/package-dist/src/runner/RunnerModule.js.map +1 -1
  18. package/package-dist/src/runner/catalog.d.ts +6 -0
  19. package/package-dist/src/runner/catalog.d.ts.map +1 -1
  20. package/package-dist/src/runner/catalog.js +38 -8
  21. package/package-dist/src/runner/catalog.js.map +1 -1
  22. package/package-dist/src/runner/loaded-target.d.ts +13 -2
  23. package/package-dist/src/runner/loaded-target.d.ts.map +1 -1
  24. package/package-dist/src/runner/loaded-target.js +20 -4
  25. package/package-dist/src/runner/loaded-target.js.map +1 -1
  26. package/package-dist/src/runner/studio-hierarchy-loader.d.ts.map +1 -1
  27. package/package-dist/src/runner/studio-hierarchy-loader.js +17 -3
  28. package/package-dist/src/runner/studio-hierarchy-loader.js.map +1 -1
  29. package/package-dist/src/shared/application-menu.d.ts +63 -0
  30. package/package-dist/src/shared/application-menu.d.ts.map +1 -0
  31. package/package-dist/src/shared/application-menu.js +16 -0
  32. package/package-dist/src/shared/application-menu.js.map +1 -0
  33. package/package-dist/styles.css +217 -73
  34. package/package.json +9 -5
@@ -1,41 +1,41 @@
1
- :root { font-family: Inter, ui-sans-serif, system-ui, sans-serif; color: #182234; background: #f7f8fc; font-size: 13px; color-scheme: light; }
1
+ :root { font-family: Inter, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, sans-serif; line-height: 1.45; -webkit-font-smoothing: antialiased; color: #182234; background: #f7f8fc; font-size: 13px; color-scheme: light; }
2
2
  :root[data-theme='dark'] { color: #e6edf7; background: #111827; color-scheme: dark; }
3
- * { box-sizing: border-box; } body { margin: 0; min-width: 1120px; } button, select { font: inherit; }
3
+ * { box-sizing: border-box; } body { margin: 0; min-width: 980px; } button, select { font: inherit; }
4
4
  .runner-shell { height: 100vh; min-height: 100vh; display: grid; grid-template-rows: 44px minmax(0, 1fr); } .runner-header { display: flex; align-items: center; gap: 18px; padding: 0 12px 0 16px; border-bottom: 1px solid #cbd1d8; background: #fff; font-size: 13px; }
5
- .runner-brand { display: flex; align-items: baseline; gap: 6px; flex: none; } .runner-brand-mark { color: #4f46d8; font-size: 13px; font-weight: 700; letter-spacing: .04em; } .runner-brand-product { color: #182234; font-size: 13px; font-weight: 500; } .runner-brand .about-button { height: 25px; margin-left: 6px; padding: 0 9px; border: 0; border-radius: 4px; background: transparent; color: #34435b; font-size: 12px; font-weight: 650; } .runner-brand .about-button:hover { background: #f0f3f8; color: #182234; } .runner-logo { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 8px; color: white; background: #4f46d8; font-size: 13px; } .alpha-label { color: #70809a; font-size: 13px; } .header-spacer, .panel-spacer { flex: 1; }
6
- .engine-status { display: flex; align-items: center; gap: 7px; color: #14804a; font-size: 12px; font-weight: 700; } .engine-status i { width: 8px; height: 8px; border-radius: 50%; background: #19a463; }
7
- .theme-picker { display: flex; align-items: center; gap: 7px; color: #617089; font-size: 12px; font-weight: 700; } .theme-picker select { min-width: 82px; height: 30px; padding: 0 8px; border: 1px solid #cfd5dd; border-radius: 6px; background: white; color: #182234; }
8
- .runner-main { display: grid; grid-template-columns: 218px minmax(560px, 1fr) 350px; min-height: 0; overflow: hidden; } .runner-nav, .inspector { min-height: 0; overflow-y: auto; background: #fff; } .runner-nav { padding: 18px 12px; border-right: 1px solid #cbd1d8; }
9
- .nav-label, .eyebrow { color: #8794a8; font-size: 11px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; } .nav-label { margin: 4px 12px 10px; }
10
- .nav-item { display: flex; align-items: center; gap: 10px; padding: 11px 12px; border-radius: 7px; color: #34435b; font-size: 14px; text-decoration: none; cursor: pointer; } .nav-item span { width: 20px; text-align: center; } .nav-item.active { color: #3f37b8; background: #e8eeff; font-weight: 700; }
5
+ .runner-brand { display: flex; align-items: baseline; gap: 6px; flex: none; } .runner-brand-mark { color: #4f46d8; font-size: 13px; font-weight: 500; letter-spacing: .04em; } .runner-brand-product { color: #182234; font-size: 13px; font-weight: 500; } .runner-brand .about-button { height: 25px; margin-left: 6px; padding: 0 9px; border: 0; border-radius: 4px; background: transparent; color: #34435b; font-size: 12px; font-weight: 650; } .runner-brand .about-button:hover { background: #f0f3f8; color: #182234; } .runner-logo { width: 30px; height: 28px; display: grid; place-items: center; border-radius: 8px; color: white; background: #4f46d8; font-size: 13px; } .alpha-label { color: #70809a; font-size: 13px; } .header-spacer, .panel-spacer { flex: 1; }
6
+ .engine-status { display: flex; align-items: center; gap: 7px; color: #14804a; font-size: 12px; font-weight: 500; } .engine-status i { width: 8px; height: 8px; border-radius: 50%; background: #19a463; }
7
+ .theme-picker { display: flex; align-items: center; gap: 7px; color: #617089; font-size: 12px; font-weight: 500; } .theme-picker select { min-width: 82px; height: 28px; padding: 0 8px; border: 1px solid #cfd5dd; border-radius: 5px; background: white; color: #182234; }
8
+ .runner-main { display: grid; grid-template-columns: 218px minmax(0, 1fr) 334px; min-height: 0; overflow: hidden; } .runner-nav, .inspector { min-height: 0; overflow-y: auto; background: #fff; } .runner-nav { padding: 18px 12px; border-right: 1px solid #cbd1d8; }
9
+ .nav-label, .eyebrow { color: #8794a8; font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; } .nav-label { margin: 4px 12px 10px; }
10
+ .nav-item { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 5px; color: #34435b; font-size: 12px; text-decoration: none; cursor: pointer; } .nav-item span { width: 20px; text-align: center; } .nav-item.active { color: #3f37b8; background: #e8eeff; font-weight: 500; }
11
11
  .package-card { margin: 24px 8px 0; padding: 12px; border: 1px solid #e5e7eb; border-radius: 8px; background: #f8faff; } .package-card small { display: block; color: #77869b; } .package-card strong { display: block; margin: 5px 0; font-size: 12px; overflow-wrap: anywhere; }
12
- .runner-workspace { min-height: 0; overflow-y: auto; padding: 26px 30px; background: #f7f8fc; } .eyebrow { color: #7c8aa0; } h1 { margin: 5px 0 4px; font-size: 25px; letter-spacing: -.02em; } .description { margin: 0; color: #617089; }
13
- .run-controls { display: flex; align-items: end; flex-wrap: wrap; gap: 10px 14px; margin-top: 25px; } label { display: grid; gap: 6px; color: #617089; font-size: 12px; font-weight: 700; } select { min-width: 145px; height: 36px; padding: 0 10px; border: 1px solid #cfd5dd; border-radius: 6px; background: white; color: #182234; }
14
- .button { height: 36px; padding: 0 15px; border: 1px solid #cfd5dd; border-radius: 6px; background: white; color: #334560; font-weight: 700; cursor: pointer; } .button.primary { border-color: #4f46d8; background: #4f46d8; color: white; } .button.dry-run { border-color: #8a9fc4; color: #315da9; background: #eef3fc; } .button.stop { color: #b33a30; }
15
- .file-button { position: relative; display: inline-grid; height: 36px; padding: 0 15px; place-items: center; border: 1px solid #cfd5dd; border-radius: 6px; background: white; color: #334560; cursor: pointer; } .file-button input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; } .load-error { margin: 12px 0 -8px; color: #b33a30; font-size: 12px; font-weight: 700; }
16
- .inputs-panel { margin-top: 18px; } .input-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; padding: 16px; } .input-field { color: #617089; } .input-field input { width: 100%; height: 34px; padding: 0 9px; border: 1px solid #cfd5dd; border-radius: 6px; color: #182234; background: #fff; font: inherit; font-weight: 500; } .input-hint { color: #7a899d; font-size: 11px; }
17
- .history-view-banner { margin-top: 12px; padding: 9px 12px; border: 1px solid #b9cbed; border-radius: 6px; color: #315da9; background: #eaf2ff; font-size: 12px; font-weight: 700; }
18
- .panel { margin-top: 24px; border: 1px solid #e5e7eb; border-radius: 8px; background: white; overflow: hidden; } .panel-heading { display: flex; align-items: center; gap: 10px; padding: 14px 16px; border-bottom: 1px solid #e5e7eb; } h2 { margin: 0; font-size: 16px; } .running { color: #14804a; font-size: 12px; font-weight: 750; } .stopped { color: #b33a30; font-size: 12px; font-weight: 750; }
19
- table { width: 100%; border-collapse: collapse; font-size: 13px; } th { padding: 10px 14px; color: #7b899d; background: #fafbfd; font-size: 11px; text-align: left; text-transform: uppercase; letter-spacing: .04em; } td { padding: 13px 14px; border-top: 1px solid #edf0f7; } tr.parent-row td { background: #ffffff; } tr.nested-row td { background: #f3f7fd; } tr.selected td { background: #dce8ff !important; border-top-color: #9db9ed; } tr.selected td:first-child { border-left: 4px solid #4f46d8; } tr.selected .hierarchy-name { color: #173e91; font-weight: 700; } tbody tr { cursor: pointer; }
20
- .hierarchy-hint { display: flex; align-items: center; gap: 10px; padding: 9px 16px; border-bottom: 1px solid #dbe6fa; color: #315da9; background: #f2f6ff; font-size: 11px; } .hierarchy-hint span { color: #637897; } .hierarchy-action { padding: 4px 7px; border: 1px solid #b9cbed; border-radius: 4px; color: #315da9; background: #fff; font-size: 10px; font-weight: 700; cursor: pointer; } .hierarchy-action:first-of-type { margin-left: auto; } .hierarchy-name { display: inline-flex; align-items: center; gap: 7px; min-height: 22px; } .collapse-toggle { display: inline-grid; width: 18px; height: 18px; place-items: center; padding: 0; border: 1px solid #9eb5df; border-radius: 4px; color: #315da9; background: #eaf1ff; font-size: 14px; line-height: 1; cursor: pointer; } .branch-marker { color: #5d82ca; font-size: 18px; font-weight: 400; } .kind-label { display: inline-flex; padding: 3px 5px; border-radius: 4px; color: #6c7890; background: #edf0f7; font-size: 9px; font-weight: 800; letter-spacing: .05em; } .nested-label { color: #315da9; background: #e5efff; } .nested-row td:first-child { border-left: 3px solid #8eaded; } .parent-row td:first-child { border-left: 3px solid transparent; }
12
+ .runner-workspace { min-height: 0; overflow-y: auto; padding: 20px 24px; background: #f7f8fc; } .eyebrow { color: #7c8aa0; } h1 { margin: 5px 0 4px; font-size: 22px; letter-spacing: -.02em; } .description { margin: 0; color: #617089; }
13
+ .run-controls { display: flex; align-items: end; flex-wrap: wrap; gap: 8px 12px; margin-top: 20px; } label { display: grid; gap: 6px; color: #617089; font-size: 12px; font-weight: 500; } select { min-width: 145px; height: 28px; padding: 0 10px; border: 1px solid #cfd5dd; border-radius: 5px; background: white; color: #182234; }
14
+ .button { height: 28px; padding: 0 10px; border: 1px solid #cfd5dd; border-radius: 5px; background: white; color: #334560; font-weight: 500; cursor: pointer; } .button.primary { border-color: #4f46d8; background: #4f46d8; color: white; } .button.dry-run { border-color: #8a9fc4; color: #315da9; background: #eef3fc; } .button.stop { color: #b33a30; }
15
+ .file-button { position: relative; display: inline-grid; height: 28px; padding: 0 10px; place-items: center; border: 1px solid #cfd5dd; border-radius: 5px; background: white; color: #334560; cursor: pointer; } .file-button input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; } .load-error { margin: 12px 0 -8px; color: #b33a30; font-size: 12px; font-weight: 500; }
16
+ .inputs-panel { margin-top: 18px; } .input-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; padding: 16px; } .input-field { color: #617089; } .input-field input { width: 100%; height: 28px; padding: 0 9px; border: 1px solid #cfd5dd; border-radius: 5px; color: #182234; background: #fff; font: inherit; font-weight: 500; } .input-hint { color: #7a899d; font-size: 11px; }
17
+ .history-view-banner { margin-top: 12px; padding: 9px 12px; border: 1px solid #b9cbed; border-radius: 5px; color: #315da9; background: #eaf2ff; font-size: 12px; font-weight: 500; }
18
+ .panel { margin-top: 24px; border: 1px solid #e5e7eb; border-radius: 8px; background: white; overflow: hidden; } .panel-heading { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-bottom: 1px solid #e5e7eb; } h2 { margin: 0; font-size: 16px; } .running { color: #14804a; font-size: 12px; font-weight: 600; } .stopped { color: #b33a30; font-size: 12px; font-weight: 600; }
19
+ table { width: 100%; border-collapse: collapse; font-size: 13px; } th { padding: 10px 14px; color: #7b899d; background: #fafbfd; font-size: 11px; text-align: left; text-transform: uppercase; letter-spacing: .04em; } td { padding: 10px 12px; border-top: 1px solid #edf0f7; } tr.parent-row td { background: #ffffff; } tr.nested-row td { background: #f3f7fd; } tr.selected td { background: #dce8ff !important; border-top-color: #9db9ed; } tr.selected td:first-child { border-left: 4px solid #4f46d8; } tr.selected .hierarchy-name { color: #173e91; font-weight: 500; } tbody tr { cursor: pointer; }
20
+ .hierarchy-hint { display: flex; align-items: center; gap: 10px; padding: 9px 16px; border-bottom: 1px solid #dbe6fa; color: #315da9; background: #f2f6ff; font-size: 11px; } .hierarchy-hint span { color: #637897; } .hierarchy-action { padding: 4px 7px; border: 1px solid #b9cbed; border-radius: 4px; color: #315da9; background: #fff; font-size: 10px; font-weight: 500; cursor: pointer; } .hierarchy-action:first-of-type { margin-left: auto; } .hierarchy-name { display: inline-flex; align-items: center; gap: 7px; min-height: 22px; } .collapse-toggle { display: inline-grid; width: 18px; height: 18px; place-items: center; padding: 0; border: 1px solid #9eb5df; border-radius: 4px; color: #315da9; background: #eaf1ff; font-size: 14px; line-height: 1; cursor: pointer; } .branch-marker { color: #5d82ca; font-size: 18px; font-weight: 400; } .kind-label { display: inline-flex; padding: 3px 5px; border-radius: 4px; color: #6c7890; background: #edf0f7; font-size: 9px; font-weight: 600; letter-spacing: .05em; } .nested-label { color: #315da9; background: #e5efff; } .nested-row td:first-child { border-left: 3px solid #8eaded; } .parent-row td:first-child { border-left: 3px solid transparent; }
21
21
  .step-icon { display: inline-grid; width: 20px; height: 20px; margin-right: 7px; place-items: center; border-radius: 50%; color: white; background: #18a15d; font-size: 11px; } .nested-row .step-icon { margin-left: 18px; } .nested-row .hierarchy-name { padding-left: 0 !important; } .step-icon.waiting { background: #efaa18; } .step-icon.skipped { color: #62738c; background: #edf1f6; } .step-icon.failed, .step-icon.cancelled { background: #c94b42; } .step-icon.pending { border: 2px solid #aab6c7; background: transparent; }
22
- .selected-label { display: inline-flex; margin-left: 8px; padding: 3px 5px; border-radius: 4px; color: #3f37b8; background: #c4d7ff; font-size: 9px; font-weight: 800; letter-spacing: .05em; }
23
- .status { display: inline-flex; padding: 4px 8px; border-radius: 5px; font-size: 10px; font-weight: 800; letter-spacing: .03em; } .status.finished { color: #14804a; background: #e7f6ed; } .status.waiting { color: #98660b; background: #fff2d5; } .status.pending, .status.skipped { color: #62738c; background: #edf1f6; } .status.failed, .status.cancelled { color: #a33a32; background: #ffebe8; }
22
+ .selected-label { display: inline-flex; margin-left: 8px; padding: 3px 5px; border-radius: 4px; color: #3f37b8; background: #c4d7ff; font-size: 9px; font-weight: 600; letter-spacing: .05em; }
23
+ .status { display: inline-flex; padding: 4px 8px; border-radius: 5px; font-size: 10px; font-weight: 600; letter-spacing: .03em; } .status.finished { color: #14804a; background: #e7f6ed; } .status.waiting { color: #98660b; background: #fff2d5; } .status.pending, .status.skipped { color: #62738c; background: #edf1f6; } .status.failed, .status.cancelled { color: #a33a32; background: #ffebe8; }
24
24
  .loop-row td { background: #f5f8fe; border-top: 1px solid #c8d7f0; border-bottom: 1px solid #dce6f6; } .loop-row td:first-child { border-left: 3px solid #668bd2; border-radius: 9px 0 0 0; } .loop-row td:last-child { border-right: 1px solid #c8d7f0; border-radius: 0 9px 0 0; } .loop-icon { color: #fff; background: #668bd2; font-size: 15px; } .loop-label { color: #315da9; background: #e7efff; } .loop-progress { display: flex; align-items: center; flex-wrap: wrap; gap: 5px 8px; min-width: 220px; margin-bottom: 4px; color: #315da9; font-size: 10px; letter-spacing: .02em; } .loop-progress small { flex-basis: 100%; color: #71839c; font-size: 10px; } .loop-bar { width: 92px; height: 6px; overflow: hidden; border-radius: 99px; background: #dce6f6; } .loop-bar i { display: block; height: 100%; border-radius: inherit; background: #668bd2; transition: width .2s ease; } .loop-content td { border-top: 0; border-bottom: 0; background: #ffffff; } .loop-content td:first-child { border-left: 3px solid #c8d7f0; } .loop-content td:last-child { border-right: 1px solid #c8d7f0; } .loop-end td { border-bottom: 1px solid #c8d7f0; } .loop-end td:first-child { border-radius: 0 0 0 9px; } .loop-end td:last-child { border-radius: 0 0 9px 0; }
25
25
  .event-panel { margin-top: 18px; } .event-row td { padding: 9px 14px; font-size: 12px; } code { color: #294d9c; font-family: ui-monospace, monospace; font-size: 11px; }
26
- .inspector { padding: 22px 18px; border-left: 1px solid #cbd1d8; } .inspector h2 { font-size: 17px; } .selected-detail-name { margin: 6px 0 0; color: #3f37b8; font-size: 13px; } .run-id { margin: 5px 0 20px; color: #7a899d; font-family: ui-monospace, monospace; font-size: 10px; } .inspector-section { padding: 17px 0; border-top: 1px solid #e5e7eb; } .inspector-section h3 { margin: 0 0 11px; font-size: 13px; }
26
+ .inspector { padding: 20px 16px; border-left: 1px solid #cbd1d8; } .inspector h2 { font-size: 17px; } .selected-detail-name { margin: 6px 0 0; color: #3f37b8; font-size: 13px; } .run-id { margin: 5px 0 20px; color: #7a899d; font-family: ui-monospace, monospace; font-size: 10px; } .inspector-section { padding: 14px 0; border-top: 1px solid #e5e7eb; } .inspector-section h3 { margin: 0 0 11px; font-size: 13px; }
27
27
  .selection-nav { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 10px; } .selection-nav .button { padding: 5px 8px; font-size: 11px; }
28
28
  .parallel-event { color: #617089; font-size: 10px; }
29
29
  .event-filter { min-width: 120px; padding: 6px 8px; font-size: 11px; }
30
- .key-values { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid #e0e6ef; border-radius: 6px; overflow: hidden; font-size: 12px; } .key-values span { padding: 9px 10px; border-bottom: 1px solid #e9edf3; } .key-values span:nth-child(odd) { color: #63738a; background: #fafbfd; } .key-values span:nth-last-child(-n+2) { border-bottom: 0; }
31
- .iteration-history { display: grid; gap: 7px; } .iteration-entry { display: grid; gap: 3px; padding: 9px 10px; border: 1px solid #e5e7eb; border-radius: 6px; background: #ffffff; font-size: 11px; } .iteration-entry span { color: #637897; font-size: 10px; } .iteration-entry small { color: #71839c; line-height: 1.35; } .timing-details { display: grid; gap: 4px; margin-top: 8px; padding: 9px 10px; border: 1px solid #e5e7eb; border-radius: 6px; color: #637897; background: #ffffff; font-size: 10px; } .timing-details strong { color: #34435b; font-size: 11px; }
32
- .notice { padding: 12px; border-radius: 6px; color: #59708e; background: #edf0f7; font-size: 12px; line-height: 1.5; } .draft-badge { position: fixed; right: 18px; bottom: 14px; padding: 7px 10px; border: 1px solid #e5c987; border-radius: 5px; color: #85600e; background: #fff7df; font-size: 11px; font-weight: 750; }
33
- .about-button { height: 30px; padding: 0 10px; border: 1px solid #cfd5dd; border-radius: 6px; background: white; color: #34435b; font-size: 12px; font-weight: 700; cursor: pointer; }
30
+ .key-values { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid #e0e6ef; border-radius: 5px; overflow: hidden; font-size: 12px; } .key-values span { padding: 9px 10px; border-bottom: 1px solid #e9edf3; } .key-values span:nth-child(odd) { color: #63738a; background: #fafbfd; } .key-values span:nth-last-child(-n+2) { border-bottom: 0; }
31
+ .iteration-history { display: grid; gap: 7px; } .iteration-entry { display: grid; gap: 3px; padding: 9px 10px; border: 1px solid #e5e7eb; border-radius: 5px; background: #ffffff; font-size: 11px; } .iteration-entry span { color: #637897; font-size: 10px; } .iteration-entry small { color: #71839c; line-height: 1.35; } .timing-details { display: grid; gap: 4px; margin-top: 8px; padding: 9px 10px; border: 1px solid #e5e7eb; border-radius: 5px; color: #637897; background: #ffffff; font-size: 10px; } .timing-details strong { color: #34435b; font-size: 11px; }
32
+ .notice { padding: 12px; border-radius: 5px; color: #59708e; background: #edf0f7; font-size: 12px; line-height: 1.5; } .draft-badge { position: fixed; right: 18px; bottom: 14px; padding: 7px 10px; border: 1px solid #e5c987; border-radius: 5px; color: #85600e; background: #fff7df; font-size: 11px; font-weight: 600; }
33
+ .about-button { height: 28px; padding: 0 10px; border: 1px solid #cfd5dd; border-radius: 5px; background: white; color: #34435b; font-size: 12px; font-weight: 500; cursor: pointer; }
34
34
  .about-backdrop { position: fixed; inset: 0; z-index: 20; display: grid; place-items: center; background: rgb(7 12 24 / 48%); }
35
35
  .about-dialog { position: relative; width: min(360px, calc(100vw - 40px)); padding: 28px; border: 1px solid #e5e7eb; border-radius: 12px; background: white; color: #34435b; box-shadow: 0 20px 60px rgb(0 0 0 / 24%); text-align: center; }
36
36
  .about-dialog .runner-logo { margin: 0 auto 14px; }.about-dialog h2 { margin: 0 0 8px; color: #182234; }.about-dialog p { margin: 0 0 8px; color: #617089; line-height: 1.5; }.about-dialog small { color: #8794a8; }.about-dialog footer { margin-top: 24px; color: #7a899d; font-size: 11px; }.about-close { position: absolute; top: 10px; right: 12px; border: 0; background: transparent; color: #7a899d; font-size: 22px; cursor: pointer; }
37
- .error-notice { padding: 12px; border: 1px solid #f0c5c1; border-radius: 6px; color: #9d332b; background: #fff1ef; font-size: 12px; line-height: 1.5; } .dry-run-issues { display: grid; gap: 8px; } .dry-run-issues .error-notice { font-size: 11px; } .dry-run-issues small { display: block; margin-top: 5px; color: inherit; opacity: .8; }
38
- .validation-panel { display: flex; gap: 11px; align-items: flex-start; margin-top: 18px; padding: 13px 16px; border: 1px solid; border-radius: 8px; font-size: 12px; } .validation-panel strong { display: block; } .validation-panel small { display: block; margin-top: 3px; color: inherit; opacity: .8; } .validation-pass { border-color: #b9dfca; color: #176d41; background: #effaf3; } .validation-failed { display: grid; gap: 11px; border-color: #edc2bd; color: #963b33; background: #fff5f3; } .validation-heading { display: flex; gap: 11px; align-items: flex-start; } .validation-icon, .issue-icon { display: inline-grid; flex: 0 0 auto; width: 22px; height: 22px; place-items: center; border-radius: 50%; color: white; background: #1b9a5b; font-size: 14px; font-weight: 800; } .validation-failed .validation-icon, .issue-icon { background: #c94b42; } .validation-issues { display: grid; gap: 6px; padding-left: 33px; } .validation-issue { display: flex; gap: 8px; align-items: flex-start; padding: 8px 9px; border: 1px solid #f0d1cd; border-radius: 5px; background: rgba(255,255,255,.55); } .validation-issue .issue-icon { width: 16px; height: 16px; font-size: 12px; } .validation-issue span, .validation-issue small { display: block; } .validation-issue strong { font-size: 10px; letter-spacing: .04em; } .validation-issue span { margin-top: 2px; font-size: 11px; } .validation-issue small { margin-top: 3px; opacity: .75; }
37
+ .error-notice { padding: 12px; border: 1px solid #f0c5c1; border-radius: 5px; color: #9d332b; background: #fff1ef; font-size: 12px; line-height: 1.5; } .dry-run-issues { display: grid; gap: 8px; } .dry-run-issues .error-notice { font-size: 11px; } .dry-run-issues small { display: block; margin-top: 5px; color: inherit; opacity: .8; }
38
+ .validation-panel { display: flex; gap: 11px; align-items: flex-start; margin-top: 18px; padding: 13px 16px; border: 1px solid; border-radius: 8px; font-size: 12px; } .validation-panel strong { display: block; } .validation-panel small { display: block; margin-top: 3px; color: inherit; opacity: .8; } .validation-pass { border-color: #b9dfca; color: #176d41; background: #effaf3; } .validation-failed { display: grid; gap: 11px; border-color: #edc2bd; color: #963b33; background: #fff5f3; } .validation-heading { display: flex; gap: 11px; align-items: flex-start; } .validation-icon, .issue-icon { display: inline-grid; flex: 0 0 auto; width: 22px; height: 22px; place-items: center; border-radius: 50%; color: white; background: #1b9a5b; font-size: 14px; font-weight: 600; } .validation-failed .validation-icon, .issue-icon { background: #c94b42; } .validation-issues { display: grid; gap: 6px; padding-left: 33px; } .validation-issue { display: flex; gap: 8px; align-items: flex-start; padding: 8px 9px; border: 1px solid #f0d1cd; border-radius: 5px; background: rgba(255,255,255,.55); } .validation-issue .issue-icon { width: 16px; height: 16px; font-size: 12px; } .validation-issue span, .validation-issue small { display: block; } .validation-issue strong { font-size: 10px; letter-spacing: .04em; } .validation-issue span { margin-top: 2px; font-size: 11px; } .validation-issue small { margin-top: 3px; opacity: .75; }
39
39
 
40
40
  .event-search { min-width: 180px; }
41
41
  .empty-state { margin: 0; padding: 18px; color: var(--muted-text); }
@@ -43,25 +43,25 @@ table { width: 100%; border-collapse: collapse; font-size: 13px; } th { padding:
43
43
  .history-panel table { width: 100%; }
44
44
  .history-meta { display: block; margin-top: 3px; color: #71839c; font-size: 10px; }
45
45
  .history-retention { display: flex; align-items: center; gap: 6px; font-size: 11px; }
46
- .history-retention select { min-width: 92px; height: 30px; font-size: 11px; }
46
+ .history-retention select { min-width: 92px; height: 28px; font-size: 11px; }
47
47
  .history-delete { margin-left: 6px; color: #a33a32; }
48
48
  .validation-issue[data-step-id] { cursor: pointer; }
49
- .branch-path { display: grid; gap: 6px; margin-top: 8px; padding: 9px 10px; border: 1px solid #e5e7eb; border-radius: 6px; background: #ffffff; font-size: 11px; }
49
+ .branch-path { display: grid; gap: 6px; margin-top: 8px; padding: 9px 10px; border: 1px solid #e5e7eb; border-radius: 5px; background: #ffffff; font-size: 11px; }
50
50
  .branch-path-row { display: grid; grid-template-columns: auto 1fr auto; gap: 7px; align-items: center; }
51
51
  .branch-path-row small { color: #71839c; font-size: 10px; }
52
52
  .parallel-details { color: #637897; }
53
53
  .parallel-details > span { font-size: 10px; }
54
- .result-summary { display: grid; gap: 4px; margin-top: 8px; padding: 9px 10px; border: 1px solid #e5e7eb; border-radius: 6px; color: #637897; background: #ffffff; font-size: 10px; }
54
+ .result-summary { display: grid; gap: 4px; margin-top: 8px; padding: 9px 10px; border: 1px solid #e5e7eb; border-radius: 5px; color: #637897; background: #ffffff; font-size: 10px; }
55
55
  .result-summary strong { color: #34435b; font-size: 11px; }
56
56
  .demo-entry { padding: 7px 10px; border: 1px solid var(--border); border-radius: 5px; background: var(--panel); color: var(--accent); font-size: 12px; font-weight: 650; text-decoration: none; }
57
57
 
58
58
  .breakpoint-toggle { border: 0; background: transparent; color: var(--muted, #718096); cursor: pointer; margin-left: .4rem; padding: 0 .2rem; }
59
- .breakpoint-toggle.active { color: #d64545; font-weight: 700; }
59
+ .breakpoint-toggle.active { color: #d64545; font-weight: 500; }
60
60
  .inspector-actions { display: flex; gap: .5rem; flex-wrap: wrap; margin-top: .75rem; }
61
61
  .attempt-history { display: grid; gap: .35rem; }
62
- .debug-session-badge { height: 36px; display: inline-flex; align-items: center; padding: 0 .65rem; border: 1px solid #e5a4a4; border-radius: 6px; color: #a83232; background: #fff4f4; font-size: 11px; font-weight: 800; }
63
- .execution-menu-label { color: #637897; font-size: 11px; font-weight: 700; }
64
- .local-control { height: 30px; padding: 0 9px; font-size: 11px; }
62
+ .debug-session-badge { height: 28px; display: inline-flex; align-items: center; padding: 0 .65rem; border: 1px solid #e5a4a4; border-radius: 5px; color: #a83232; background: #fff4f4; font-size: 11px; font-weight: 600; }
63
+ .execution-menu-label { color: #637897; font-size: 11px; font-weight: 500; }
64
+ .local-control { height: 28px; padding: 0 9px; font-size: 11px; }
65
65
  .local-control.active { border-color: #d78383; color: #a83232; background: #fff4f4; }
66
66
  .runner-context-menu { position: fixed; z-index: 20; min-width: 170px; padding: 6px; border: 1px solid #cbd6e6; border-radius: 7px; background: #fff; box-shadow: 0 8px 24px rgba(28, 47, 76, .18); }
67
67
  .runner-context-menu strong { display: block; padding: 7px 9px 5px; color: #637897; font-size: 10px; text-transform: uppercase; letter-spacing: .05em; }
@@ -82,13 +82,15 @@ table { width: 100%; border-collapse: collapse; font-size: 13px; } th { padding:
82
82
  .runner-header .about-button:hover,
83
83
  .runner-header .demo-entry:hover { background: var(--runner-surface-3); color: var(--runner-ink); }
84
84
  .runner-header .demo-entry { display: inline-flex; align-items: center; text-decoration: none; }
85
- .theme-picker { gap: 7px; color: var(--runner-ink-2); font-size: 12px; font-weight: 700; white-space: nowrap; }
86
- .theme-picker select { min-width: 82px; height: 30px; padding: 0 8px; border-color: var(--runner-line); border-radius: 6px; background: var(--runner-surface); color: var(--runner-ink); font: inherit; font-weight: 400; }
85
+ .theme-picker { gap: 7px; color: var(--runner-ink-2); font-size: 12px; font-weight: 500; white-space: nowrap; }
86
+ .theme-picker select { min-width: 82px; height: 28px; padding: 0 8px; border-color: var(--runner-line); border-radius: 5px; background: var(--runner-surface); color: var(--runner-ink); font: inherit; font-weight: 400; }
87
87
 
88
88
  /* Keep Runner aligned with the shared QAICK Studio design tokens. These are
89
89
  Runner-scoped names so the integrated stylesheet does not overwrite Studio's
90
90
  own variables. Execution statuses retain their semantic colours below. */
91
91
  :root {
92
+ --runner-chrome: #fff;
93
+ --runner-primary-label: #fff;
92
94
  --runner-blue: #4f46d8;
93
95
  --runner-blue-strong: #3f37b8;
94
96
  --runner-blue-soft: #e8eeff;
@@ -116,30 +118,32 @@ table { width: 100%; border-collapse: collapse; font-size: 13px; } th { padding:
116
118
  }
117
119
 
118
120
  :root[data-theme='dark'] {
119
- --runner-blue: #8b9cff;
120
- --runner-blue-strong: #aab5ff;
121
- --runner-blue-soft: #252c4b;
122
- --runner-blue-line: #4a5684;
123
- --runner-ink: #edf1f8;
124
- --runner-ink-2: #c8d1e2;
125
- --runner-muted: #9da9bd;
126
- --runner-faint: #7d899e;
127
- --runner-surface: #171b24;
128
- --runner-surface-2: #1d2230;
129
- --runner-surface-3: #282f3e;
130
- --runner-canvas: #11151d;
131
- --runner-pane-explorer: #1b202a;
132
- --runner-pane-properties: #1d222c;
133
- --runner-heading: #252c37;
134
- --runner-divider: #3b4555;
135
- --runner-line: #303949;
136
- --runner-line-strong: #465267;
137
- --runner-ok: #67d39a;
138
- --runner-ok-soft: #1b382b;
139
- --runner-warn: #e8bd66;
140
- --runner-warn-soft: #3a301d;
141
- --runner-fail: #ff8d83;
142
- --runner-fail-soft: #402522;
121
+ --runner-blue: #8e80f6;
122
+ --runner-blue-strong: #a193fa;
123
+ --runner-blue-soft: #272725;
124
+ --runner-blue-line: #635a9d;
125
+ --runner-ink: #f1f0ec;
126
+ --runner-ink-2: #cbc9c1;
127
+ --runner-muted: #a6a49d;
128
+ --runner-faint: #94928b;
129
+ --runner-surface: #181817;
130
+ --runner-surface-2: #20201e;
131
+ --runner-surface-3: #272725;
132
+ --runner-canvas: #111110;
133
+ --runner-pane-explorer: #161615;
134
+ --runner-pane-properties: #181817;
135
+ --runner-heading: #20201e;
136
+ --runner-divider: #30302d;
137
+ --runner-line: #30302d;
138
+ --runner-line-strong: #484842;
139
+ --runner-ok: #6fb98f;
140
+ --runner-ok-soft: #1b2720;
141
+ --runner-warn: #d6a85f;
142
+ --runner-warn-soft: #292319;
143
+ --runner-fail: #e58e86;
144
+ --runner-fail-soft: #302321;
145
+ --runner-chrome: #141413;
146
+ --runner-primary-label: #111110;
143
147
  }
144
148
 
145
149
  :root,
@@ -188,7 +192,7 @@ label { color: var(--runner-muted); }
188
192
  .runner-nav { border-color: var(--runner-divider); background: var(--runner-pane-explorer); }
189
193
  .inspector { border-color: var(--runner-divider); background: var(--runner-pane-properties); }
190
194
  .nav-item { color: var(--runner-muted); }
191
- .nav-item.active { color: var(--runner-ink); background: var(--runner-surface-3); font-weight: 700; }
195
+ .nav-item.active { color: var(--runner-ink); background: var(--runner-surface-3); font-weight: 500; }
192
196
  .package-card,
193
197
  .notice { border-color: var(--runner-line); background: var(--runner-surface-3); color: var(--runner-muted); }
194
198
  .button:hover,
@@ -234,19 +238,6 @@ code { color: var(--runner-blue-strong); }
234
238
  .status.cancelled,
235
239
  .validation-failed { color: var(--runner-fail); background: var(--runner-fail-soft); }
236
240
  .error-notice { border-color: color-mix(in srgb, var(--runner-fail) 35%, var(--runner-surface)); color: var(--runner-fail); background: var(--runner-fail-soft); }
237
- :root[data-theme='dark'] .runner-header,
238
- :root[data-theme='dark'] .runner-nav,
239
- :root[data-theme='dark'] .inspector,
240
- :root[data-theme='dark'] .panel,
241
- :root[data-theme='dark'] .button,
242
- :root[data-theme='dark'] select,
243
- :root[data-theme='dark'] .input-field input,
244
- :root[data-theme='dark'] .about-button,
245
- :root[data-theme='dark'] .about-dialog { background: var(--runner-surface); color: var(--runner-ink); }
246
- :root[data-theme='dark'] .runner-workspace { background: var(--runner-surface-2); }
247
- :root[data-theme='dark'] .package-card,
248
- :root[data-theme='dark'] .notice,
249
- :root[data-theme='dark'] .kind-label { background: var(--runner-surface-3); color: var(--runner-ink-2); }
250
241
 
251
242
  .invocation-branches { display:grid; gap:8px; margin-bottom:12px; }
252
243
  .invocation-branch { display:flex; align-items:start; justify-content:space-between; gap:8px; }
@@ -258,6 +249,159 @@ code { color: var(--runner-blue-strong); }
258
249
  .iteration-history summary:focus-visible { outline:2px solid currentColor; outline-offset:2px; }
259
250
  .iteration-history pre { overflow-x:auto; max-width:100%; }
260
251
 
252
+
253
+ /* Studio control/surface conventions, applied across existing Runner controls. */
254
+ .runner-header { background: var(--runner-chrome); }
255
+ .runner-workspace { background: var(--runner-canvas); min-width: 0; }
256
+ .runner-nav { background: var(--runner-pane-explorer); }
257
+ .inspector { background: var(--runner-pane-properties); min-width: 0; }
258
+ .runner-brand-mark { font-weight: 700; }
259
+ .runner-nav .nav-item.active { color: var(--runner-blue); background: var(--runner-blue-soft); }
260
+ .button, .file-button, .about-button, .hierarchy-action, .collapse-toggle,
261
+ select, .input-field input, .event-search {
262
+ font-family: inherit;
263
+ font-size: 12px;
264
+ font-weight: 500;
265
+ border-color: var(--runner-line-strong);
266
+ border-radius: 5px;
267
+ background: var(--runner-surface);
268
+ color: var(--runner-ink-2);
269
+ }
270
+ .button, .file-button, .about-button { transition: background 120ms ease, color 120ms ease, border-color 120ms ease; }
271
+ .button:hover:not(:disabled), .file-button:hover, .about-button:hover:not(:disabled),
272
+ .hierarchy-action:hover:not(:disabled), .collapse-toggle:hover:not(:disabled) {
273
+ background: var(--runner-surface-3); color: var(--runner-ink); border-color: var(--runner-line-strong);
274
+ }
275
+ .button.primary, .button.resume-highlight {
276
+ border-color: var(--runner-blue); background: var(--runner-blue); color: var(--runner-primary-label);
277
+ }
278
+ .button.primary:hover:not(:disabled), .button.resume-highlight:hover:not(:disabled) {
279
+ border-color: var(--runner-blue-strong); background: var(--runner-blue-strong); color: var(--runner-primary-label);
280
+ }
281
+ .button.dry-run { color: var(--runner-blue); border-color: var(--runner-blue-line); background: var(--runner-blue-soft); }
282
+ .button.stop, .history-delete, .load-error, .stopped, .breakpoint-toggle.active { color: var(--runner-fail); }
283
+ .button:disabled, .about-button:disabled, .hierarchy-action:disabled {
284
+ color: var(--runner-faint); cursor: not-allowed;
285
+ }
286
+ .button.primary:disabled, .button.resume-highlight:disabled { border-color: transparent; background: var(--runner-surface-3); box-shadow: none; }
287
+ :is(button, select, input, a, summary):focus-visible { outline: 2px solid var(--runner-blue); outline-offset: 2px; }
288
+ .file-button:focus-within { outline: 2px solid var(--runner-blue); outline-offset: 2px; }
289
+ input[type='checkbox'] { accent-color: var(--runner-blue); }
290
+ .event-search { height: 28px; padding: 0 8px; border: 1px solid var(--runner-line-strong); min-width: 0; }
291
+ .panel-heading { background: var(--runner-surface-2); }
292
+ .panel-heading h2, .inspector h2 { font-size: 14px; font-weight: 600; }
293
+ .nav-label, .eyebrow, th { font-size: 10px; font-weight: 600; letter-spacing: .05em; }
294
+ .package-card { margin: 20px 0 0; background: var(--runner-surface-2); }
295
+ .description, .about-dialog p, .about-dialog small, .about-dialog footer, .history-meta,
296
+ .parallel-event, .execution-menu-label, .empty-state { color: var(--runner-muted); }
297
+ .status.pending, .status.skipped { color: var(--runner-muted); background: var(--runner-surface-3); }
298
+ .selected-label { color: var(--runner-blue); background: var(--runner-blue-soft); }
299
+ .step-icon { background: var(--runner-ok); color: var(--runner-surface); }
300
+ .step-icon.pending { border-color: var(--runner-faint); background: transparent; }
301
+ .step-icon.waiting { background: var(--runner-warn); }
302
+ .step-icon.failed, .step-icon.cancelled, .validation-failed .validation-icon, .issue-icon, .breakpoint-marker { background: var(--runner-fail); }
303
+ .step-icon.skipped { color: var(--runner-muted); background: var(--runner-surface-3); }
304
+ .validation-pass { border-color: var(--runner-ok); }
305
+ .validation-failed, .validation-issue { border-color: var(--runner-fail); }
306
+ .validation-issue { color: var(--runner-fail); background: var(--runner-fail-soft); }
307
+ .validation-pass .validation-icon { background: var(--runner-ok); }
308
+ .key-values span { border-color: var(--runner-line); overflow-wrap: anywhere; min-width: 0; }
309
+ .history-view-banner { border-color: var(--runner-blue-line); color: var(--runner-blue); background: var(--runner-blue-soft); }
310
+ .debug-session-badge, .local-control.active { border-color: var(--runner-fail); color: var(--runner-fail); background: var(--runner-fail-soft); }
311
+ .loop-row td { background: var(--runner-surface-2); border-color: var(--runner-line); }
312
+ .loop-content td, .loop-end td { border-color: var(--runner-line); }
313
+ .loop-row td:first-child, .loop-row td:last-child, .nested-row td:first-child { border-color: var(--runner-blue-line); }
314
+ .loop-icon, .loop-bar i { background: var(--runner-blue); }
315
+ .loop-progress, .branch-marker { color: var(--runner-blue); }
316
+ .loop-progress small { color: var(--runner-muted); }
317
+ .loop-bar { background: var(--runner-blue-soft); }
318
+ .runner-context-menu { box-shadow: 0 18px 44px -16px rgb(16 24 40 / .3); }
319
+ .runner-context-menu strong, .runner-context-menu button { color: var(--runner-ink-2); }
320
+ .runner-context-menu button:hover { background: var(--runner-surface-3); color: var(--runner-ink); }
321
+ .about-close { color: var(--runner-muted); }
322
+ .about-backdrop { background: rgb(0 0 0 / 48%); }
323
+ /* UX-004/007: preserve every pane while keeping the workspace readable. */
324
+ .runner-shell { grid-template-rows: auto minmax(0, 1fr); }
325
+ .runner-header { min-height: 44px; flex-wrap: wrap; gap: 6px 12px; padding-block: 6px; }
326
+ .runner-header > span:has(> button) { flex-shrink: 0; }
327
+ .runner-main { grid-template-columns: 200px minmax(0, 1fr) 320px; }
328
+ .runner-workspace { scrollbar-gutter: stable; }
329
+ .runner-nav, .inspector { scrollbar-gutter: stable; }
330
+ .runner-nav .nav-item { white-space: nowrap; }
331
+ .run-controls { display: grid; gap: 12px; margin-top: 18px; }
332
+ .run-settings { display: grid; grid-template-columns: minmax(180px, 2fr) repeat(3, minmax(120px, 1fr)); gap: 8px 12px; }
333
+ .run-settings label { min-width: 0; font-weight: 500; gap: 5px; }
334
+ .run-settings select { min-width: 0; width: 100%; }
335
+ .run-actions { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; padding-bottom: 4px; }
336
+ .run-actions :is(.button, .file-button) { white-space: nowrap; flex-shrink: 0; }
337
+ .run-actions .primary { font-weight: 600; }
338
+ .panel { margin-top: 18px; }
339
+ .panel-heading { flex-wrap: wrap; gap: 8px; }
340
+ .panel-heading .run-status, .panel-heading .running, .panel-heading .stopped { white-space: nowrap; font-weight: 600; }
341
+ .execution-menu-label { flex: 1 1 180px; font-size: 11px; line-height: 1.4; }
342
+ .table-scroll { width: 100%; max-width: 100%; overflow-x: auto; overscroll-behavior-x: contain; }
343
+ .table-scroll:focus-visible { outline: 2px solid var(--runner-blue); outline-offset: -2px; }
344
+ .table-scroll table { min-width: 580px; }
345
+ .table-scroll th { white-space: nowrap; }
346
+ .table-scroll td { vertical-align: top; }
347
+ .table-scroll td:first-child { white-space: nowrap; }
348
+ .hierarchy-name { flex-wrap: nowrap; }
349
+ .hierarchy-name > span:not(.branch-marker) { white-space: nowrap; }
350
+ .kind-label, .selected-label, .status { white-space: nowrap; }
351
+ .hierarchy-hint { flex-wrap: wrap; gap: 6px 10px; }
352
+ .hierarchy-hint > span { flex: 1 1 180px; }
353
+ .hierarchy-hint .hierarchy-action { white-space: nowrap; }
354
+ .event-search { flex: 1 1 120px; width: 140px; max-width: 220px; }
355
+ .event-filter { min-width: 110px; }
356
+ .history-panel table { min-width: 640px; }
357
+ .history-panel td:first-child { white-space: normal; min-width: 180px; max-width: 280px; }
358
+ .history-panel td:last-child { min-width: 220px; }
359
+ .history-panel td:last-child .button { margin: 0 4px 4px 0; white-space: nowrap; }
360
+ .history-meta { overflow-wrap: anywhere; line-height: 1.5; }
361
+ .inspector h2 { font-size: 14px; }
362
+ .inspector-section { padding: 12px 0; }
363
+ .inspector-section h3 { margin-bottom: 8px; }
364
+ .run-id { overflow-wrap: anywhere; margin-bottom: 14px; line-height: 1.5; }
365
+ .key-values { grid-template-columns: minmax(80px, .85fr) minmax(0, 1.15fr); }
366
+ .key-values span { padding: 7px 8px; }
367
+ .selected-detail-name { overflow-wrap: anywhere; }
368
+ .input-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
369
+ .input-grid > div, .input-field { min-width: 0; }
370
+ .input-grid input[type='checkbox'] { justify-self: start; }
371
+ .input-field input:focus { border-color: var(--runner-blue); }
372
+ .input-field input:disabled { color: var(--runner-faint); background: var(--runner-surface-2); }
373
+ .input-field input::placeholder, .event-search::placeholder { color: var(--runner-faint); opacity: 1; }
374
+ .runner-context-menu { max-width: calc(100vw - 24px); }
375
+ @media (max-width: 1240px) {
376
+ .run-settings { grid-template-columns: repeat(2, minmax(0, 1fr)); }
377
+ }
378
+ @media (max-width: 1100px) {
379
+ .runner-main { grid-template-columns: 170px minmax(0, 1fr) 280px; }
380
+ .runner-workspace { padding: 16px; }
381
+ .runner-nav { padding: 14px 8px; }
382
+ .nav-item { gap: 6px; padding-inline: 8px; }
383
+ .inspector { padding: 16px 12px; }
384
+ .input-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
385
+ .panel-heading .panel-spacer { display: none; }
386
+ .panel-heading h2 { flex: 1 1 auto; }
387
+ .execution-menu-label { order: 3; flex-basis: 100%; }
388
+ .hierarchy-hint > span { order: 1; flex-basis: 100%; }
389
+ .hierarchy-hint .hierarchy-action { flex-shrink: 0; }
390
+ }
391
+
392
+ /* Shared compact toolbar rhythm; application commands remain workspace-specific. */
393
+ .runner-header { gap: 6px 12px; }
394
+ .runner-theme-toggle { display: inline-grid; place-items: center; width: 28px; height: 28px; padding: 0; flex-shrink: 0; border: 0; border-radius: 4px; color: var(--runner-ink-2); background: transparent; cursor: pointer; }
395
+ .runner-theme-toggle:hover { color: var(--runner-ink); background: var(--runner-surface-3); }
396
+ .runner-help { position: relative; flex-shrink: 0; }
397
+ .runner-help-menu { position: absolute; z-index: 20; right: 0; top: calc(100% + 4px); min-width: 170px; padding: 4px; border: 1px solid var(--runner-line); border-radius: 5px; background: var(--runner-surface); box-shadow: 0 8px 24px rgb(25 32 45 / 18%); }
398
+ .runner-help-menu :is(a,button) { display: block; width: 100%; padding: 7px 10px; border: 0; border-radius: 3px; background: transparent; color: var(--runner-ink); font: inherit; text-align: left; text-decoration: none; white-space: nowrap; cursor: pointer; }
399
+ .runner-help-menu :is(a,button):hover { background: var(--runner-surface-3); }
400
+
401
+ .runner-authoring-source { grid-column: 1 / -1; min-width: 0; }
402
+ .runner-authoring-source .run-settings { max-width: 40rem; }
403
+ .runner-authoring-source .notice, .runner-authoring-source [role="alert"] { max-width: 80ch; }
404
+
261
405
  .runner-demo { min-height: 100vh; padding: 24px 32px 34px; box-sizing: border-box; background: #edf2f8; color: #243654; }
262
406
  .runner-demo-title { display: flex; align-items: center; justify-content: space-between; max-width: 1420px; margin: 0 auto 24px; }
263
407
  .runner-demo-title div { display: flex; align-items: baseline; gap: 14px; }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@qaick/runner",
3
3
  "description": "Reusable QAick Runner module and standalone execution application.",
4
- "version": "0.31.2",
4
+ "version": "0.32.1",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "package-dist",
@@ -31,6 +31,10 @@
31
31
  "./studio-artifacts": {
32
32
  "types": "./package-dist/src/runner/studio-artifact-loader.d.ts",
33
33
  "import": "./package-dist/src/runner/studio-artifact-loader.js"
34
+ },
35
+ "./application-menu": {
36
+ "types": "./package-dist/src/shared/application-menu.d.ts",
37
+ "import": "./package-dist/src/shared/application-menu.js"
34
38
  }
35
39
  },
36
40
  "scripts": {
@@ -58,10 +62,10 @@
58
62
  "publish:release": "npm run check:package && npm publish --tag latest"
59
63
  },
60
64
  "dependencies": {
61
- "@qaick/contract": "0.4.1",
62
- "@qaick/executor": "0.2.5",
63
- "@qaick/http-executor": "0.2.5",
64
- "@qaick/runtime": "0.2.6",
65
+ "@qaick/contract": "0.5.0",
66
+ "@qaick/executor": "0.2.6",
67
+ "@qaick/http-executor": "0.2.6",
68
+ "@qaick/runtime": "0.2.7",
65
69
  "zustand": "^5.0.15"
66
70
  },
67
71
  "peerDependencies": {