issue-flow 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 (162) hide show
  1. package/dist/agent-OX3KPHE4.js +30 -0
  2. package/dist/{analyze-WS47UYGN.js → analyze-WIND2SEB.js} +21 -18
  3. package/dist/{analyze-WS47UYGN.js.map → analyze-WIND2SEB.js.map} +1 -1
  4. package/dist/{apply-OS62UWRN.js → apply-JNOI2LR4.js} +14 -11
  5. package/dist/{apply-OS62UWRN.js.map → apply-JNOI2LR4.js.map} +1 -1
  6. package/dist/{bench-SA3BOME5.js → bench-B4VZON7E.js} +30 -26
  7. package/dist/{bench-SA3BOME5.js.map → bench-B4VZON7E.js.map} +1 -1
  8. package/dist/{chunk-PIVGJM6K.js → chunk-2IQ6M4ZE.js} +11 -11
  9. package/dist/{chunk-QCXPNSEL.js → chunk-3BWZO4YI.js} +2 -2
  10. package/dist/chunk-3WFZETIM.js +163 -0
  11. package/dist/chunk-3WFZETIM.js.map +1 -0
  12. package/dist/{chunk-6FDFRNXZ.js → chunk-67YIU2VB.js} +25 -20
  13. package/dist/chunk-67YIU2VB.js.map +1 -0
  14. package/dist/{chunk-TM67EHSV.js → chunk-6BENHR2I.js} +19 -19
  15. package/dist/chunk-6BENHR2I.js.map +1 -0
  16. package/dist/{chunk-IYV6KNVF.js → chunk-6QYMSNVA.js} +66 -240
  17. package/dist/chunk-6QYMSNVA.js.map +1 -0
  18. package/dist/{chunk-IV5SS4JN.js → chunk-76MMPJ53.js} +9 -7
  19. package/dist/{chunk-IV5SS4JN.js.map → chunk-76MMPJ53.js.map} +1 -1
  20. package/dist/{chunk-LZ6GFQAG.js → chunk-B72RQZBV.js} +35 -25
  21. package/dist/chunk-B72RQZBV.js.map +1 -0
  22. package/dist/{chunk-KQHB7ZT3.js → chunk-BEZ5BA5U.js} +82 -16
  23. package/dist/chunk-BEZ5BA5U.js.map +1 -0
  24. package/dist/{chunk-BQDQTIM7.js → chunk-BRCNQXYQ.js} +4 -4
  25. package/dist/{chunk-ARFVHC2F.js → chunk-CGKLE6WR.js} +115 -23
  26. package/dist/chunk-CGKLE6WR.js.map +1 -0
  27. package/dist/{chunk-BHJCGWQX.js → chunk-F6TOYSYY.js} +9 -9
  28. package/dist/chunk-G5EK2XRN.js +25 -0
  29. package/dist/chunk-G5EK2XRN.js.map +1 -0
  30. package/dist/{chunk-TX5WIVYP.js → chunk-HAKDLR6N.js} +6 -1
  31. package/dist/chunk-HAKDLR6N.js.map +1 -0
  32. package/dist/{chunk-DIG5XKQQ.js → chunk-J3SOTUVI.js} +2 -2
  33. package/dist/{chunk-SNTTOQAD.js → chunk-JN6D3MY6.js} +2 -2
  34. package/dist/{chunk-MIVHK5YI.js → chunk-KMRFRXIT.js} +3 -3
  35. package/dist/{chunk-5TB6KLC2.js → chunk-KT7JKOXB.js} +8 -8
  36. package/dist/{chunk-NEZZ6KDR.js → chunk-LBGHI4S2.js} +49 -2
  37. package/dist/chunk-LBGHI4S2.js.map +1 -0
  38. package/dist/{chunk-3XLCNVMD.js → chunk-LEW4QM74.js} +2 -2
  39. package/dist/{chunk-IHIEXUTC.js → chunk-LFEQIZLB.js} +85 -10
  40. package/dist/chunk-LFEQIZLB.js.map +1 -0
  41. package/dist/{chunk-TVN2JVOF.js → chunk-OOVG2KBY.js} +3 -3
  42. package/dist/{chunk-7KD66LIM.js → chunk-OR43364P.js} +3 -3
  43. package/dist/{chunk-J62QSVP6.js → chunk-PBTA3QQX.js} +8 -7
  44. package/dist/{chunk-J62QSVP6.js.map → chunk-PBTA3QQX.js.map} +1 -1
  45. package/dist/{chunk-664Y3NDX.js → chunk-PHW2YV6N.js} +8 -8
  46. package/dist/{chunk-PV4OX5TC.js → chunk-PZTWU277.js} +11 -11
  47. package/dist/{chunk-HJGGNLWI.js → chunk-QD4VOILZ.js} +9 -9
  48. package/dist/{chunk-CNBYCMSU.js → chunk-QJ5UZAH5.js} +27 -18
  49. package/dist/{chunk-CNBYCMSU.js.map → chunk-QJ5UZAH5.js.map} +1 -1
  50. package/dist/{chunk-HQAHNIAR.js → chunk-QK7WUO7A.js} +14 -14
  51. package/dist/{chunk-UJ7XWK7J.js → chunk-QZVKRDJY.js} +16 -14
  52. package/dist/{chunk-UJ7XWK7J.js.map → chunk-QZVKRDJY.js.map} +1 -1
  53. package/dist/{chunk-FZDR7CGH.js → chunk-REO3PXXO.js} +3 -3
  54. package/dist/{chunk-UOCPC2Y2.js → chunk-RVO7L4FX.js} +4 -4
  55. package/dist/{chunk-QXDNBYQF.js → chunk-SZMHCEYV.js} +21 -10
  56. package/dist/chunk-SZMHCEYV.js.map +1 -0
  57. package/dist/chunk-TYRNTSPJ.js +243 -0
  58. package/dist/chunk-TYRNTSPJ.js.map +1 -0
  59. package/dist/{agent-BXRIEKVM.js → chunk-UJ3L2MS7.js} +22 -22
  60. package/dist/chunk-UJ3L2MS7.js.map +1 -0
  61. package/dist/{chunk-37N2RJW2.js → chunk-V7MO5EDS.js} +3 -3
  62. package/dist/{chunk-HEF2RMKN.js → chunk-WB2X37MO.js} +18 -16
  63. package/dist/{chunk-HEF2RMKN.js.map → chunk-WB2X37MO.js.map} +1 -1
  64. package/dist/{chunk-OPNGPUKJ.js → chunk-X44FKNKP.js} +133 -42
  65. package/dist/chunk-X44FKNKP.js.map +1 -0
  66. package/dist/cli.js +43 -40
  67. package/dist/cli.js.map +1 -1
  68. package/dist/{config-MEM2IWWN.js → config-HMFMCY2M.js} +12 -9
  69. package/dist/{conventions-WV4NDXGH.js → conventions-NJF2OPVQ.js} +14 -11
  70. package/dist/{conventions-WV4NDXGH.js.map → conventions-NJF2OPVQ.js.map} +1 -1
  71. package/dist/diagnostics-THH42ZMP.js +23 -0
  72. package/dist/execute-KFNNZZHI.js +35 -0
  73. package/dist/{generate-MVQI7A45.js → generate-FW5C6NP7.js} +23 -20
  74. package/dist/{generate-MVQI7A45.js.map → generate-FW5C6NP7.js.map} +1 -1
  75. package/dist/{git-YRVRUN3C.js → git-W72QQ6GT.js} +4 -2
  76. package/dist/init-HTN4V67Q.js +24 -0
  77. package/dist/{operations-LU6JA3BX.js → operations-BCFOBH42.js} +17 -14
  78. package/dist/{operations-LU6JA3BX.js.map → operations-BCFOBH42.js.map} +1 -1
  79. package/dist/{permissions-7NMDFU27.js → permissions-4AKNQZHK.js} +4 -4
  80. package/dist/plan-SIZLGA4V.js +34 -0
  81. package/dist/{policy-JSYEK5B2.js → policy-DT6Q6ZVM.js} +13 -10
  82. package/dist/{policy-JSYEK5B2.js.map → policy-DT6Q6ZVM.js.map} +1 -1
  83. package/dist/pr-OMWCGUOW.js +39 -0
  84. package/dist/pr-review-N24CZPKR.js +32 -0
  85. package/dist/prd-5OFTZAHJ.js +33 -0
  86. package/dist/{ps-TNE44R5V.js → ps-RFORTCUD.js} +11 -8
  87. package/dist/{ps-TNE44R5V.js.map → ps-RFORTCUD.js.map} +1 -1
  88. package/dist/{recorder-XGF55WXI.js → recorder-KCCPMKQG.js} +5 -4
  89. package/dist/registry-GLPXOMFG.js +15 -0
  90. package/dist/{resume-QMEPMSZW.js → resume-M5RLKP4I.js} +44 -40
  91. package/dist/{resume-QMEPMSZW.js.map → resume-M5RLKP4I.js.map} +1 -1
  92. package/dist/review-YM4JAABY.js +35 -0
  93. package/dist/{routing-2ZUMZPJB.js → routing-NNT5WKGX.js} +13 -10
  94. package/dist/{routing-2ZUMZPJB.js.map → routing-NNT5WKGX.js.map} +1 -1
  95. package/dist/run-PZUKHPQK.js +54 -0
  96. package/dist/run-PZUKHPQK.js.map +1 -0
  97. package/dist/session-publisher-T7EI3CIP.js +11 -0
  98. package/dist/session-publisher-T7EI3CIP.js.map +1 -0
  99. package/dist/{state-manager-X3PT3FGT.js → state-manager-GQH32C44.js} +3 -3
  100. package/dist/state-manager-GQH32C44.js.map +1 -0
  101. package/dist/{usage-VCFLDA5Y.js → usage-V2CHE5PY.js} +13 -10
  102. package/dist/{usage-VCFLDA5Y.js.map → usage-V2CHE5PY.js.map} +1 -1
  103. package/dist/{web-XVHLX62B.js → web-EA3KGNFN.js} +18 -14
  104. package/dist/{web-XVHLX62B.js.map → web-EA3KGNFN.js.map} +1 -1
  105. package/package.json +1 -1
  106. package/web/AGENTS.md +150 -11
  107. package/web/public/app.css +343 -110
  108. package/web/public/app.js +408 -18
  109. package/web/public/index.html +44 -1
  110. package/dist/agent-BXRIEKVM.js.map +0 -1
  111. package/dist/chunk-6FDFRNXZ.js.map +0 -1
  112. package/dist/chunk-ARFVHC2F.js.map +0 -1
  113. package/dist/chunk-IHIEXUTC.js.map +0 -1
  114. package/dist/chunk-IYV6KNVF.js.map +0 -1
  115. package/dist/chunk-KQHB7ZT3.js.map +0 -1
  116. package/dist/chunk-LZ6GFQAG.js.map +0 -1
  117. package/dist/chunk-NEZZ6KDR.js.map +0 -1
  118. package/dist/chunk-OPNGPUKJ.js.map +0 -1
  119. package/dist/chunk-QXDNBYQF.js.map +0 -1
  120. package/dist/chunk-TM67EHSV.js.map +0 -1
  121. package/dist/chunk-TX5WIVYP.js.map +0 -1
  122. package/dist/execute-NITIHHCK.js +0 -31
  123. package/dist/init-OKWEC3EV.js +0 -21
  124. package/dist/plan-LEJJF3DE.js +0 -31
  125. package/dist/pr-HPVUZ7S3.js +0 -36
  126. package/dist/pr-review-R2QZBT3F.js +0 -29
  127. package/dist/prd-5O6GYCC6.js +0 -30
  128. package/dist/registry-LGPE53QD.js +0 -15
  129. package/dist/review-YKWD6SNN.js +0 -32
  130. package/dist/run-YU4TR62R.js +0 -50
  131. /package/dist/{config-MEM2IWWN.js.map → agent-OX3KPHE4.js.map} +0 -0
  132. /package/dist/{chunk-PIVGJM6K.js.map → chunk-2IQ6M4ZE.js.map} +0 -0
  133. /package/dist/{chunk-QCXPNSEL.js.map → chunk-3BWZO4YI.js.map} +0 -0
  134. /package/dist/{chunk-BQDQTIM7.js.map → chunk-BRCNQXYQ.js.map} +0 -0
  135. /package/dist/{chunk-BHJCGWQX.js.map → chunk-F6TOYSYY.js.map} +0 -0
  136. /package/dist/{chunk-DIG5XKQQ.js.map → chunk-J3SOTUVI.js.map} +0 -0
  137. /package/dist/{chunk-SNTTOQAD.js.map → chunk-JN6D3MY6.js.map} +0 -0
  138. /package/dist/{chunk-MIVHK5YI.js.map → chunk-KMRFRXIT.js.map} +0 -0
  139. /package/dist/{chunk-5TB6KLC2.js.map → chunk-KT7JKOXB.js.map} +0 -0
  140. /package/dist/{chunk-3XLCNVMD.js.map → chunk-LEW4QM74.js.map} +0 -0
  141. /package/dist/{chunk-TVN2JVOF.js.map → chunk-OOVG2KBY.js.map} +0 -0
  142. /package/dist/{chunk-7KD66LIM.js.map → chunk-OR43364P.js.map} +0 -0
  143. /package/dist/{chunk-664Y3NDX.js.map → chunk-PHW2YV6N.js.map} +0 -0
  144. /package/dist/{chunk-PV4OX5TC.js.map → chunk-PZTWU277.js.map} +0 -0
  145. /package/dist/{chunk-HJGGNLWI.js.map → chunk-QD4VOILZ.js.map} +0 -0
  146. /package/dist/{chunk-HQAHNIAR.js.map → chunk-QK7WUO7A.js.map} +0 -0
  147. /package/dist/{chunk-FZDR7CGH.js.map → chunk-REO3PXXO.js.map} +0 -0
  148. /package/dist/{chunk-UOCPC2Y2.js.map → chunk-RVO7L4FX.js.map} +0 -0
  149. /package/dist/{chunk-37N2RJW2.js.map → chunk-V7MO5EDS.js.map} +0 -0
  150. /package/dist/{execute-NITIHHCK.js.map → config-HMFMCY2M.js.map} +0 -0
  151. /package/dist/{git-YRVRUN3C.js.map → diagnostics-THH42ZMP.js.map} +0 -0
  152. /package/dist/{init-OKWEC3EV.js.map → execute-KFNNZZHI.js.map} +0 -0
  153. /package/dist/{permissions-7NMDFU27.js.map → git-W72QQ6GT.js.map} +0 -0
  154. /package/dist/{plan-LEJJF3DE.js.map → init-HTN4V67Q.js.map} +0 -0
  155. /package/dist/{pr-HPVUZ7S3.js.map → permissions-4AKNQZHK.js.map} +0 -0
  156. /package/dist/{pr-review-R2QZBT3F.js.map → plan-SIZLGA4V.js.map} +0 -0
  157. /package/dist/{prd-5O6GYCC6.js.map → pr-OMWCGUOW.js.map} +0 -0
  158. /package/dist/{recorder-XGF55WXI.js.map → pr-review-N24CZPKR.js.map} +0 -0
  159. /package/dist/{registry-LGPE53QD.js.map → prd-5OFTZAHJ.js.map} +0 -0
  160. /package/dist/{review-YKWD6SNN.js.map → recorder-KCCPMKQG.js.map} +0 -0
  161. /package/dist/{run-YU4TR62R.js.map → registry-GLPXOMFG.js.map} +0 -0
  162. /package/dist/{state-manager-X3PT3FGT.js.map → review-YM4JAABY.js.map} +0 -0
@@ -1,48 +1,137 @@
1
1
  /* Interface do monitoramento web do issue-flow.
2
2
  Autocontida: sem fontes externas, sem CDN — funciona offline. */
3
3
 
4
+ /* ---- Paleta ----
5
+
6
+ Tokens nomeados por papel (superfície, texto, borda, acento, estado, foco),
7
+ nunca por local de uso: mexer na hierarquia visual não exige inventar uma cor
8
+ por componente. `:root` carrega a paleta clara **inteira** — nenhum token
9
+ pode ter sua única definição dentro de um `@media` ou de um `[data-theme]`,
10
+ ou o tema oposto fica sem ele. */
11
+
4
12
  :root {
5
- --bg: #f4f5f7;
6
- --card: #ffffff;
7
- --fg: #1a1f27;
8
- --muted: #6b7280;
13
+ /* Esquema dos controles nativos. Os blocos de tema escuro abaixo o
14
+ sobrescrevem. */
15
+ color-scheme: light;
16
+
17
+ /* Superfície: página, cartão elevado e recesso neutro. */
18
+ --surface-page: #f4f5f7;
19
+ --surface: #ffffff;
20
+ --surface-sunken: #e5e7eb;
21
+
22
+ /* Texto. `--text-subtle` está reservado para uma terceira hierarquia
23
+ (legendas, metadados) que o painel ainda não usa — mas já cumpre 4,5:1
24
+ sobre as três superfícies, para poder ser usado sem nova auditoria.
25
+ Os três são medidos contra a superfície mais escura do tema claro
26
+ (`--surface-sunken`); ver a tabela de contraste em `web/AGENTS.md`. */
27
+ --text: #1a1f27;
28
+ --text-muted: #4b5563;
29
+ --text-subtle: #5f6773;
30
+
31
+ /* Borda. `--border-strong` está reservado para separadores que precisem
32
+ vencer o ruído de uma lista densa; hoje nenhum precisa. */
9
33
  --border: #e2e5ea;
34
+ --border-strong: #c7ccd4;
35
+
36
+ /* Acento. `--accent-text` é o texto sobre um preenchimento sólido de acento
37
+ ou de estado (hoje: o banner de desconexão). */
10
38
  --accent: #4f46e5;
11
- --ok: #16a34a;
12
- --warn: #b45309;
13
- --warn-bg: #fef3c7;
14
- --err: #dc2626;
15
- --err-bg: #fee2e2;
16
- --run: #2563eb;
17
- --run-bg: #dbeafe;
18
- --ok-bg: #dcfce7;
19
- --idle-bg: #e5e7eb;
39
+ --accent-text: #ffffff;
40
+
41
+ /* Estado: a cor do texto/ícone e a superfície que a acompanha no badge.
42
+ No tema claro as quatro cores ficam no nível 700 da escala — é o mais
43
+ claro que atende 4,5:1 sobre a própria superfície do badge. O limiar é
44
+ 4,5:1 e não 3:1 porque `.badge` é 0.78rem/600, abaixo de texto grande. */
45
+ --state-ok: #15803d;
46
+ --state-ok-surface: #dcfce7;
47
+ --state-run: #1d4ed8;
48
+ --state-run-surface: #dbeafe;
49
+ --state-warn: #b45309;
50
+ --state-warn-surface: #fef3c7;
51
+ --state-error: #b91c1c;
52
+ --state-error-surface: #fee2e2;
53
+
54
+ /* Foco por teclado: o anel de `:focus-visible`. Precisa de 3:1 contra o que
55
+ estiver adjacente (a superfície ao redor do anel), não de 4,5:1 — é um
56
+ componente gráfico, não texto. */
57
+ --focus-ring: #4f46e5;
58
+
20
59
  --shadow: 0 1px 2px rgb(0 0 0 / 0.06);
21
60
  --overlay: rgb(0 0 0 / 0.45);
22
61
  }
23
62
 
63
+ /* ---- Tema escuro ----
64
+
65
+ Dois blocos gêmeos: o do sistema e o forçado pelo controle do painel.
66
+ **Os dois carregam exatamente a mesma lista de overrides e precisam mudar
67
+ juntos** — mexeu em um, mexa no outro. Só entram aqui os tokens cujo valor
68
+ muda; o que é igual nos dois temas fica só em `:root`.
69
+
70
+ O guarda `:not([data-theme='light'])` é o que faz a escolha manual vencer o
71
+ sistema: com o SO em escuro e o tema forçado em claro, o `@media` não
72
+ sobrescreve nada.
73
+
74
+ `color-scheme` vai dentro de cada bloco (e não no `<html>` nem num `<meta>`)
75
+ porque é ele que manda nos controles nativos — `<select>`, `<progress>`,
76
+ barras de rolagem — e precisa acompanhar o tema efetivo, não o do SO. */
77
+
24
78
  @media (prefers-color-scheme: dark) {
25
- :root {
26
- --bg: #0f1218;
27
- --card: #171c24;
28
- --fg: #e5e9f0;
29
- --muted: #8b93a1;
79
+ :root:not([data-theme='light']) {
80
+ color-scheme: dark;
81
+
82
+ --surface-page: #0f1218;
83
+ --surface: #171c24;
84
+ --surface-sunken: #262d38;
85
+ --text: #e5e9f0;
86
+ --text-muted: #9aa1ad;
87
+ --text-subtle: #8f97a5;
30
88
  --border: #262d38;
31
89
  --accent: #818cf8;
32
- --ok: #4ade80;
33
- --warn: #fbbf24;
34
- --warn-bg: #3a2d10;
35
- --err: #f87171;
36
- --err-bg: #3b1a1a;
37
- --run: #60a5fa;
38
- --run-bg: #172a45;
39
- --ok-bg: #14301f;
40
- --idle-bg: #262d38;
90
+ /* No escuro os preenchimentos sólidos (acento e estado) são claros, então
91
+ o texto sobre eles inverte — branco sobre `--state-error` daria 2,98:1
92
+ no banner de desconexão. */
93
+ --accent-text: #0f1218;
94
+ --state-ok: #4ade80;
95
+ --state-ok-surface: #14301f;
96
+ --state-run: #60a5fa;
97
+ --state-run-surface: #172a45;
98
+ --state-warn: #fbbf24;
99
+ --state-warn-surface: #3a2d10;
100
+ --state-error: #f87171;
101
+ --state-error-surface: #3b1a1a;
102
+ --focus-ring: #818cf8;
41
103
  --shadow: none;
42
104
  --overlay: rgb(0 0 0 / 0.65);
43
105
  }
44
106
  }
45
107
 
108
+ /* Gêmeo do bloco acima — mesma lista de overrides, mudam juntos. */
109
+ :root[data-theme='dark'] {
110
+ color-scheme: dark;
111
+
112
+ --surface-page: #0f1218;
113
+ --surface: #171c24;
114
+ --surface-sunken: #262d38;
115
+ --text: #e5e9f0;
116
+ --text-muted: #9aa1ad;
117
+ --text-subtle: #8f97a5;
118
+ --border: #262d38;
119
+ --accent: #818cf8;
120
+ /* Ver o comentário do bloco gêmeo acima. */
121
+ --accent-text: #0f1218;
122
+ --state-ok: #4ade80;
123
+ --state-ok-surface: #14301f;
124
+ --state-run: #60a5fa;
125
+ --state-run-surface: #172a45;
126
+ --state-warn: #fbbf24;
127
+ --state-warn-surface: #3a2d10;
128
+ --state-error: #f87171;
129
+ --state-error-surface: #3b1a1a;
130
+ --focus-ring: #818cf8;
131
+ --shadow: none;
132
+ --overlay: rgb(0 0 0 / 0.65);
133
+ }
134
+
46
135
  * {
47
136
  box-sizing: border-box;
48
137
  }
@@ -53,8 +142,8 @@
53
142
 
54
143
  body {
55
144
  margin: 0;
56
- background: var(--bg);
57
- color: var(--fg);
145
+ background: var(--surface-page);
146
+ color: var(--text);
58
147
  font: 15px/1.5 system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
59
148
  }
60
149
 
@@ -79,11 +168,11 @@ main > *,
79
168
  }
80
169
 
81
170
  .muted {
82
- color: var(--muted);
171
+ color: var(--text-muted);
83
172
  }
84
173
 
85
174
  .card {
86
- background: var(--card);
175
+ background: var(--surface);
87
176
  border: 1px solid var(--border);
88
177
  border-radius: 10px;
89
178
  padding: 16px;
@@ -104,7 +193,7 @@ h2 {
104
193
  font-weight: 600;
105
194
  text-transform: uppercase;
106
195
  letter-spacing: 0.06em;
107
- color: var(--muted);
196
+ color: var(--text-muted);
108
197
  }
109
198
 
110
199
  a {
@@ -133,14 +222,14 @@ a:hover {
133
222
  padding: 8px 14px;
134
223
  font: inherit;
135
224
  font-weight: 600;
136
- color: var(--muted);
225
+ color: var(--text-muted);
137
226
  cursor: pointer;
138
227
  border-radius: 6px 6px 0 0;
139
228
  }
140
229
 
141
230
  .tab:hover {
142
- color: var(--fg);
143
- background: var(--card);
231
+ color: var(--text);
232
+ background: var(--surface);
144
233
  }
145
234
 
146
235
  .tab.is-active {
@@ -199,17 +288,18 @@ a:hover {
199
288
  }
200
289
 
201
290
  .refresh-control,
291
+ .theme-control,
202
292
  .log-filter-control {
203
293
  font-size: 0.82rem;
204
- color: var(--muted);
294
+ color: var(--text-muted);
205
295
  display: inline-flex;
206
296
  align-items: center;
207
297
  gap: 6px;
208
298
  }
209
299
 
210
300
  select {
211
- background: var(--card);
212
- color: var(--fg);
301
+ background: var(--surface);
302
+ color: var(--text);
213
303
  border: 1px solid var(--border);
214
304
  border-radius: 6px;
215
305
  padding: 3px 6px;
@@ -230,23 +320,23 @@ select {
230
320
  }
231
321
 
232
322
  .status-idle {
233
- background: var(--idle-bg);
234
- color: var(--muted);
323
+ background: var(--surface-sunken);
324
+ color: var(--text-muted);
235
325
  }
236
326
 
237
327
  .status-running {
238
- background: var(--run-bg);
239
- color: var(--run);
328
+ background: var(--state-run-surface);
329
+ color: var(--state-run);
240
330
  }
241
331
 
242
332
  .status-completed {
243
- background: var(--ok-bg);
244
- color: var(--ok);
333
+ background: var(--state-ok-surface);
334
+ color: var(--state-ok);
245
335
  }
246
336
 
247
337
  .status-failed {
248
- background: var(--err-bg);
249
- color: var(--err);
338
+ background: var(--state-error-surface);
339
+ color: var(--state-error);
250
340
  }
251
341
 
252
342
  /* ---- Banner de desconexão ---- */
@@ -255,8 +345,8 @@ select {
255
345
  position: sticky;
256
346
  top: 0;
257
347
  z-index: 10;
258
- background: var(--err);
259
- color: #fff;
348
+ background: var(--state-error);
349
+ color: var(--accent-text);
260
350
  text-align: center;
261
351
  padding: 8px 16px;
262
352
  font-weight: 600;
@@ -265,25 +355,25 @@ select {
265
355
  /* ---- Erros e avisos em destaque ---- */
266
356
 
267
357
  .alerts {
268
- border-color: var(--err);
358
+ border-color: var(--state-error);
269
359
  }
270
360
 
271
361
  .alert-entry {
272
- border-left: 3px solid var(--err);
362
+ border-left: 3px solid var(--state-error);
273
363
  padding: 4px 10px;
274
364
  margin: 6px 0;
275
365
  border-radius: 0 6px 6px 0;
276
- background: var(--err-bg);
366
+ background: var(--state-error-surface);
277
367
  }
278
368
 
279
369
  .alert-entry.level-warn {
280
- border-left-color: var(--warn);
281
- background: var(--warn-bg);
370
+ border-left-color: var(--state-warn);
371
+ background: var(--state-warn-surface);
282
372
  }
283
373
 
284
374
  .alert-count {
285
375
  font-size: 0.82rem;
286
- color: var(--muted);
376
+ color: var(--text-muted);
287
377
  margin: 0 0 4px;
288
378
  }
289
379
 
@@ -310,26 +400,26 @@ select {
310
400
  }
311
401
 
312
402
  .label-badge {
313
- background: var(--idle-bg);
314
- color: var(--fg);
403
+ background: var(--surface-sunken);
404
+ color: var(--text);
315
405
  text-transform: none;
316
406
  font-weight: 500;
317
407
  letter-spacing: normal;
318
408
  }
319
409
 
320
410
  .state-open {
321
- background: var(--run-bg);
322
- color: var(--run);
411
+ background: var(--state-run-surface);
412
+ color: var(--state-run);
323
413
  }
324
414
 
325
415
  .state-closed {
326
- background: var(--ok-bg);
327
- color: var(--ok);
416
+ background: var(--state-ok-surface);
417
+ color: var(--state-ok);
328
418
  }
329
419
 
330
420
  .state-unknown {
331
- background: var(--idle-bg);
332
- color: var(--muted);
421
+ background: var(--surface-sunken);
422
+ color: var(--text-muted);
333
423
  }
334
424
 
335
425
  .issue-description {
@@ -351,23 +441,23 @@ select {
351
441
  }
352
442
 
353
443
  .story-status-backlog {
354
- background: var(--idle-bg);
355
- color: var(--muted);
444
+ background: var(--surface-sunken);
445
+ color: var(--text-muted);
356
446
  }
357
447
 
358
448
  .story-status-in_progress {
359
- background: var(--run-bg);
360
- color: var(--run);
449
+ background: var(--state-run-surface);
450
+ color: var(--state-run);
361
451
  }
362
452
 
363
453
  .story-status-in_review {
364
- background: var(--warn-bg);
365
- color: var(--warn);
454
+ background: var(--state-warn-surface);
455
+ color: var(--state-warn);
366
456
  }
367
457
 
368
458
  .story-status-done {
369
- background: var(--ok-bg);
370
- color: var(--ok);
459
+ background: var(--state-ok-surface);
460
+ color: var(--state-ok);
371
461
  }
372
462
 
373
463
  .story-deps {
@@ -409,7 +499,7 @@ progress {
409
499
  }
410
500
 
411
501
  .now-grid dt {
412
- color: var(--muted);
502
+ color: var(--text-muted);
413
503
  font-size: 0.86rem;
414
504
  }
415
505
 
@@ -425,7 +515,7 @@ progress {
425
515
  width: 8px;
426
516
  height: 8px;
427
517
  border-radius: 50%;
428
- background: var(--run);
518
+ background: var(--state-run);
429
519
  margin-right: 6px;
430
520
  animation: pulse 1.4s ease-in-out infinite;
431
521
  }
@@ -464,7 +554,7 @@ progress {
464
554
 
465
555
  .history-type {
466
556
  flex: 0 0 9rem;
467
- color: var(--muted);
557
+ color: var(--text-muted);
468
558
  }
469
559
 
470
560
  .history-message {
@@ -501,26 +591,26 @@ progress {
501
591
  "User stories". A borda esquerda usa box-shadow (não border) para não
502
592
  deslocar o conteúdo do item ao ganhar/perder a classe. */
503
593
  .story-executing {
504
- background: var(--run-bg);
594
+ background: var(--state-run-surface);
505
595
  border-radius: 6px;
506
- box-shadow: inset 3px 0 0 0 var(--run);
596
+ box-shadow: inset 3px 0 0 0 var(--state-run);
507
597
  padding-left: 9px;
508
598
  }
509
599
 
510
600
  .icon-completed {
511
- color: var(--ok);
601
+ color: var(--state-ok);
512
602
  }
513
603
 
514
604
  .icon-running {
515
- color: var(--run);
605
+ color: var(--state-run);
516
606
  }
517
607
 
518
608
  .icon-failed {
519
- color: var(--err);
609
+ color: var(--state-error);
520
610
  }
521
611
 
522
612
  .icon-pending {
523
- color: var(--muted);
613
+ color: var(--text-muted);
524
614
  }
525
615
 
526
616
  .item-main {
@@ -535,7 +625,7 @@ progress {
535
625
  }
536
626
 
537
627
  .item-error {
538
- color: var(--err);
628
+ color: var(--state-error);
539
629
  font-size: 0.85rem;
540
630
  white-space: pre-wrap;
541
631
  word-break: break-word;
@@ -543,7 +633,7 @@ progress {
543
633
 
544
634
  .item-side {
545
635
  flex: none;
546
- color: var(--muted);
636
+ color: var(--text-muted);
547
637
  font-size: 0.84rem;
548
638
  font-variant-numeric: tabular-nums;
549
639
  /* Com duração + tokens + custo o slot fica bem mais largo; alinhar à
@@ -597,7 +687,7 @@ progress {
597
687
 
598
688
  .log-time {
599
689
  flex: none;
600
- color: var(--muted);
690
+ color: var(--text-muted);
601
691
  }
602
692
 
603
693
  .log-level {
@@ -607,15 +697,15 @@ progress {
607
697
  }
608
698
 
609
699
  .level-info .log-level {
610
- color: var(--muted);
700
+ color: var(--text-muted);
611
701
  }
612
702
 
613
703
  .level-warn .log-level {
614
- color: var(--warn);
704
+ color: var(--state-warn);
615
705
  }
616
706
 
617
707
  .level-error .log-level {
618
- color: var(--err);
708
+ color: var(--state-error);
619
709
  }
620
710
 
621
711
  .log-message {
@@ -635,7 +725,7 @@ progress {
635
725
  }
636
726
 
637
727
  .kanban-column {
638
- background: var(--bg);
728
+ background: var(--surface-page);
639
729
  border: 1px solid var(--border);
640
730
  border-radius: 8px;
641
731
  padding: 10px;
@@ -657,13 +747,13 @@ progress {
657
747
  font-weight: 600;
658
748
  text-transform: uppercase;
659
749
  letter-spacing: 0.06em;
660
- color: var(--muted);
750
+ color: var(--text-muted);
661
751
  }
662
752
 
663
753
  .kanban-column-count {
664
754
  flex: none;
665
- background: var(--idle-bg);
666
- color: var(--muted);
755
+ background: var(--surface-sunken);
756
+ color: var(--text-muted);
667
757
  border-radius: 999px;
668
758
  padding: 0 7px;
669
759
  font-size: 0.74rem;
@@ -677,7 +767,7 @@ progress {
677
767
  justify-items: start;
678
768
  width: 100%;
679
769
  text-align: left;
680
- background: var(--card);
770
+ background: var(--surface);
681
771
  border: 1px solid var(--border);
682
772
  border-radius: 8px;
683
773
  padding: 10px;
@@ -695,7 +785,7 @@ progress {
695
785
  display: flex;
696
786
  align-items: center;
697
787
  gap: 2px;
698
- color: var(--muted);
788
+ color: var(--text-muted);
699
789
  font-size: 0.8rem;
700
790
  }
701
791
 
@@ -710,7 +800,7 @@ progress {
710
800
  continua no DOM para leitores de tela e para o drawer. */
711
801
  .kanban-card-desc {
712
802
  margin: 0;
713
- color: var(--muted);
803
+ color: var(--text-muted);
714
804
  font-size: 0.84rem;
715
805
  line-height: 1.4;
716
806
  overflow: hidden;
@@ -750,7 +840,7 @@ progress {
750
840
  z-index: 21;
751
841
  display: flex;
752
842
  flex-direction: column;
753
- background: var(--card);
843
+ background: var(--surface);
754
844
  border-left: 1px solid var(--border);
755
845
  padding: 16px;
756
846
  gap: 12px;
@@ -775,7 +865,7 @@ progress {
775
865
  font-size: 0.95rem;
776
866
  text-transform: none;
777
867
  letter-spacing: normal;
778
- color: var(--fg);
868
+ color: var(--text);
779
869
  overflow-wrap: anywhere;
780
870
  }
781
871
 
@@ -786,14 +876,14 @@ progress {
786
876
  border: none;
787
877
  padding: 2px 6px;
788
878
  font: inherit;
789
- color: var(--muted);
879
+ color: var(--text-muted);
790
880
  cursor: pointer;
791
881
  border-radius: 6px;
792
882
  }
793
883
 
794
884
  .drawer-close:hover {
795
- color: var(--fg);
796
- background: var(--idle-bg);
885
+ color: var(--text);
886
+ background: var(--surface-sunken);
797
887
  }
798
888
 
799
889
  /* A rolagem vive aqui, não na página: o drawer é fixo e ocupa a altura toda. */
@@ -822,7 +912,7 @@ progress {
822
912
  font-weight: 600;
823
913
  text-transform: uppercase;
824
914
  letter-spacing: 0.06em;
825
- color: var(--muted);
915
+ color: var(--text-muted);
826
916
  }
827
917
 
828
918
  .drawer-text {
@@ -842,10 +932,147 @@ progress {
842
932
  overflow-wrap: anywhere;
843
933
  }
844
934
 
935
+ .detail-row {
936
+ cursor: pointer;
937
+ border-radius: 8px;
938
+ transition: background 120ms ease, box-shadow 120ms ease;
939
+ }
940
+
941
+ .detail-row:hover {
942
+ background: var(--surface-sunken);
943
+ }
944
+
945
+ .detail-row:focus-visible,
946
+ .config-phase-row:focus-visible {
947
+ outline: 2px solid var(--focus-ring);
948
+ outline-offset: 2px;
949
+ }
950
+
951
+ .config-phase-grid {
952
+ display: grid;
953
+ gap: 1px;
954
+ margin-top: 1rem;
955
+ border: 1px solid var(--border);
956
+ border-radius: 10px;
957
+ overflow: hidden;
958
+ background: var(--border);
959
+ }
960
+
961
+ .config-phase-row {
962
+ display: grid;
963
+ grid-template-columns: minmax(5rem, 0.7fr) minmax(6rem, 1fr) minmax(8rem, 1.4fr) minmax(10rem, 1.4fr);
964
+ gap: 0.75rem;
965
+ align-items: center;
966
+ padding: 0.65rem 0.8rem;
967
+ border: 0;
968
+ color: var(--text);
969
+ background: var(--surface);
970
+ text-align: left;
971
+ cursor: pointer;
972
+ }
973
+
974
+ .config-phase-row:hover {
975
+ background: var(--surface-sunken);
976
+ }
977
+
978
+ .config-form {
979
+ display: grid;
980
+ grid-template-columns: minmax(8rem, 0.7fr) minmax(12rem, 1fr) auto minmax(10rem, 1fr);
981
+ gap: 0.65rem;
982
+ align-items: center;
983
+ margin-top: 1rem;
984
+ padding-top: 1rem;
985
+ border-top: 1px solid var(--border);
986
+ }
987
+
988
+ .config-form[hidden] {
989
+ display: none;
990
+ }
991
+
992
+ .config-form select,
993
+ .config-form input,
994
+ .config-save {
995
+ min-height: 2.25rem;
996
+ border: 1px solid var(--border-strong);
997
+ border-radius: 7px;
998
+ padding: 0.4rem 0.65rem;
999
+ color: var(--text);
1000
+ background: var(--surface);
1001
+ }
1002
+
1003
+ .config-save {
1004
+ color: var(--accent-text);
1005
+ border-color: var(--accent);
1006
+ background: var(--accent);
1007
+ cursor: pointer;
1008
+ }
1009
+
1010
+ .execution-timeline {
1011
+ display: grid;
1012
+ gap: 0.75rem;
1013
+ margin: 0;
1014
+ padding: 0;
1015
+ list-style: none;
1016
+ }
1017
+
1018
+ .execution-entry {
1019
+ padding: 0.8rem;
1020
+ border: 1px solid var(--border);
1021
+ border-radius: 9px;
1022
+ background: var(--surface-sunken);
1023
+ }
1024
+
1025
+ .execution-entry-head {
1026
+ display: flex;
1027
+ gap: 0.6rem;
1028
+ align-items: center;
1029
+ margin-bottom: 0.65rem;
1030
+ }
1031
+
1032
+ .execution-grid,
1033
+ .drawer-summary-grid {
1034
+ margin-top: 0.75rem;
1035
+ }
1036
+
1037
+ .process-output summary {
1038
+ cursor: pointer;
1039
+ color: var(--text-muted);
1040
+ }
1041
+
1042
+ .process-output-body {
1043
+ max-height: 22rem;
1044
+ overflow: auto;
1045
+ padding: 0.8rem;
1046
+ border-radius: 8px;
1047
+ color: var(--text);
1048
+ background: var(--surface-sunken);
1049
+ white-space: pre-wrap;
1050
+ overflow-wrap: anywhere;
1051
+ font-size: 0.75rem;
1052
+ line-height: 1.45;
1053
+ }
1054
+
1055
+ .commit-meta {
1056
+ display: block;
1057
+ margin-top: 0.2rem;
1058
+ font-size: 0.76rem;
1059
+ font-weight: 400;
1060
+ }
1061
+
1062
+ @media (max-width: 720px) {
1063
+ .config-phase-row {
1064
+ grid-template-columns: 1fr 1fr;
1065
+ }
1066
+
1067
+ .config-form {
1068
+ grid-template-columns: 1fr;
1069
+ }
1070
+ }
1071
+
845
1072
  /* ---- Diversos ---- */
846
1073
 
847
1074
  .empty {
848
- color: var(--muted);
1075
+ color: var(--text-muted);
849
1076
  font-style: italic;
850
1077
  margin: 0;
851
1078
  }
@@ -927,7 +1154,7 @@ progress {
927
1154
  .dashboard-card {
928
1155
  appearance: none;
929
1156
  text-align: left;
930
- background: var(--card);
1157
+ background: var(--surface);
931
1158
  border: 1px solid var(--border);
932
1159
  border-radius: 10px;
933
1160
  padding: 16px;
@@ -946,14 +1173,20 @@ progress {
946
1173
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
947
1174
  }
948
1175
 
949
- .dashboard-card:hover,
950
- .dashboard-card:focus-visible {
1176
+ /* Hover e foco por teclado precisam ser distinguíveis: o hover só acende a
1177
+ borda; o foco desenha um anel de `--focus-ring` destacado do cartão, que é
1178
+ visível mesmo em cima do hover. Era aqui que o `outline` estava suprimido. */
1179
+ .dashboard-card:hover {
951
1180
  border-color: var(--accent);
952
- outline: none;
1181
+ }
1182
+
1183
+ .dashboard-card:focus-visible {
1184
+ outline: 2px solid var(--focus-ring);
1185
+ outline-offset: 2px;
953
1186
  }
954
1187
 
955
1188
  .dashboard-card.is-live {
956
- border-color: var(--run);
1189
+ border-color: var(--state-run);
957
1190
  }
958
1191
 
959
1192
  .dashboard-card-head {
@@ -966,7 +1199,7 @@ progress {
966
1199
  .dashboard-project {
967
1200
  font-size: 0.82rem;
968
1201
  font-weight: 600;
969
- color: var(--muted);
1202
+ color: var(--text-muted);
970
1203
  overflow-wrap: anywhere;
971
1204
  }
972
1205
 
@@ -1004,14 +1237,14 @@ progress {
1004
1237
  flex-wrap: wrap;
1005
1238
  gap: 10px;
1006
1239
  font-size: 0.82rem;
1007
- color: var(--muted);
1240
+ color: var(--text-muted);
1008
1241
  font-variant-numeric: tabular-nums;
1009
1242
  }
1010
1243
 
1011
1244
  .dashboard-progress {
1012
1245
  display: block;
1013
1246
  height: 6px;
1014
- background: var(--idle-bg);
1247
+ background: var(--surface-sunken);
1015
1248
  border-radius: 999px;
1016
1249
  overflow: hidden;
1017
1250
  }
@@ -1019,7 +1252,7 @@ progress {
1019
1252
  .dashboard-progress-bar {
1020
1253
  display: block;
1021
1254
  height: 100%;
1022
- background: var(--run);
1255
+ background: var(--state-run);
1023
1256
  border-radius: 999px;
1024
1257
  transition: width 0.3s ease;
1025
1258
  }
@@ -1027,7 +1260,7 @@ progress {
1027
1260
  .dashboard-live-dot {
1028
1261
  font-size: 0.75rem;
1029
1262
  font-weight: 600;
1030
- color: var(--run);
1263
+ color: var(--state-run);
1031
1264
  text-transform: uppercase;
1032
1265
  letter-spacing: 0.04em;
1033
1266
  }
@@ -1039,7 +1272,7 @@ progress {
1039
1272
  height: 7px;
1040
1273
  margin-right: 6px;
1041
1274
  border-radius: 50%;
1042
- background: var(--run);
1275
+ background: var(--state-run);
1043
1276
  vertical-align: middle;
1044
1277
  animation: dashboard-pulse 1.4s ease-in-out infinite;
1045
1278
  }