@volter/twin-github 0.1.1 → 2.0.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 (215) hide show
  1. package/README.md +88 -36
  2. package/client/github-mirror.css +277 -319
  3. package/client/github-mirror.d.ts +418 -0
  4. package/client/github-mirror.js +485 -0
  5. package/client/github-mirror.tsx +153 -357
  6. package/client/pulls-rest.ts +159 -0
  7. package/client/pulls-workspace.tsx +841 -0
  8. package/dist/client/github-mirror.bundle.js +239 -0
  9. package/dist/client/github-mirror.css +916 -0
  10. package/dist/client/github-mirror.d.ts +418 -0
  11. package/dist/client/github-mirror.js +485 -0
  12. package/dist/client/github-mirror.tsx +1315 -0
  13. package/dist/client/pulls-rest.d.ts +42 -0
  14. package/dist/client/pulls-rest.js +140 -0
  15. package/dist/client/pulls-rest.ts +159 -0
  16. package/dist/client/pulls-workspace.bundle.js +22 -0
  17. package/dist/client/pulls-workspace.d.ts +114 -0
  18. package/dist/client/pulls-workspace.js +418 -0
  19. package/dist/client/pulls-workspace.tsx +841 -0
  20. package/dist/src/cli.d.ts +2 -0
  21. package/dist/src/cli.js +40 -0
  22. package/dist/src/generated/graphql-sdl.gen.json +1 -0
  23. package/dist/src/generated/graphql.gen.json +1 -0
  24. package/dist/src/generated/surface.gen.json +1 -0
  25. package/dist/src/generated/ui.gen.json +1 -0
  26. package/dist/src/github-budget.d.ts +69 -0
  27. package/dist/src/github-budget.js +172 -0
  28. package/dist/src/github-capabilities.d.ts +5 -0
  29. package/dist/src/github-capabilities.js +4468 -0
  30. package/dist/src/github-conformance.d.ts +43 -0
  31. package/dist/src/github-conformance.js +76 -0
  32. package/dist/src/github-connector.d.ts +307 -0
  33. package/dist/src/github-connector.js +1398 -0
  34. package/dist/src/github-events.d.ts +41 -0
  35. package/dist/src/github-events.js +230 -0
  36. package/dist/src/github-git-http.d.ts +49 -0
  37. package/dist/src/github-git-http.js +185 -0
  38. package/dist/src/github-git-plane.d.ts +114 -0
  39. package/dist/src/github-git-plane.js +407 -0
  40. package/dist/src/github-mirror-state.d.ts +2 -0
  41. package/dist/src/github-mirror-state.js +335 -0
  42. package/dist/src/github-mirror-ui.d.ts +20 -0
  43. package/dist/src/github-mirror-ui.js +101 -0
  44. package/dist/src/github-server.d.ts +14 -0
  45. package/dist/src/github-server.js +240 -0
  46. package/dist/src/github-shared.d.ts +12 -0
  47. package/dist/src/github-shared.js +21 -0
  48. package/dist/src/github-twin.d.ts +1411 -0
  49. package/dist/src/github-twin.js +4084 -0
  50. package/dist/src/github-ui-conformance.d.ts +4 -0
  51. package/dist/src/github-ui-conformance.js +105 -0
  52. package/dist/src/github-ui-structure.d.ts +18 -0
  53. package/dist/src/github-ui-structure.js +251 -0
  54. package/dist/src/graphql-wire.d.ts +22 -0
  55. package/dist/src/graphql-wire.js +89 -0
  56. package/dist/src/index.d.ts +17 -0
  57. package/dist/src/index.js +101 -0
  58. package/dist/src/manifest.d.ts +8 -0
  59. package/dist/src/manifest.js +597 -0
  60. package/dist/src/npm-registry.d.ts +7 -0
  61. package/dist/src/npm-registry.js +47 -0
  62. package/dist/src/screens/app-installation.d.ts +3 -0
  63. package/dist/src/screens/app-installation.js +166 -0
  64. package/dist/src/screens/app-manifest.d.ts +3 -0
  65. package/dist/src/screens/app-manifest.js +81 -0
  66. package/dist/src/screens/oauth.d.ts +15 -0
  67. package/dist/src/screens/oauth.js +257 -0
  68. package/dist/src/screens/session.d.ts +8 -0
  69. package/dist/src/screens/session.js +159 -0
  70. package/dist/src/semantics/actions.d.ts +2 -0
  71. package/dist/src/semantics/actions.js +413 -0
  72. package/dist/src/semantics/activity.d.ts +4 -0
  73. package/dist/src/semantics/activity.js +161 -0
  74. package/dist/src/semantics/apps.d.ts +2 -0
  75. package/dist/src/semantics/apps.js +144 -0
  76. package/dist/src/semantics/branches.d.ts +2 -0
  77. package/dist/src/semantics/branches.js +136 -0
  78. package/dist/src/semantics/checks.d.ts +2 -0
  79. package/dist/src/semantics/checks.js +176 -0
  80. package/dist/src/semantics/code-scanning-upload.d.ts +2 -0
  81. package/dist/src/semantics/code-scanning-upload.js +97 -0
  82. package/dist/src/semantics/codespaces.d.ts +2 -0
  83. package/dist/src/semantics/codespaces.js +58 -0
  84. package/dist/src/semantics/commits.d.ts +2 -0
  85. package/dist/src/semantics/commits.js +109 -0
  86. package/dist/src/semantics/contents.d.ts +2 -0
  87. package/dist/src/semantics/contents.js +131 -0
  88. package/dist/src/semantics/deployments.d.ts +2 -0
  89. package/dist/src/semantics/deployments.js +127 -0
  90. package/dist/src/semantics/gists.d.ts +2 -0
  91. package/dist/src/semantics/gists.js +86 -0
  92. package/dist/src/semantics/git.d.ts +2 -0
  93. package/dist/src/semantics/git.js +235 -0
  94. package/dist/src/semantics/graphql.d.ts +7 -0
  95. package/dist/src/semantics/graphql.js +512 -0
  96. package/dist/src/semantics/index.d.ts +5 -0
  97. package/dist/src/semantics/index.js +62 -0
  98. package/dist/src/semantics/issues.d.ts +2 -0
  99. package/dist/src/semantics/issues.js +456 -0
  100. package/dist/src/semantics/keys.d.ts +2 -0
  101. package/dist/src/semantics/keys.js +66 -0
  102. package/dist/src/semantics/labels.d.ts +2 -0
  103. package/dist/src/semantics/labels.js +100 -0
  104. package/dist/src/semantics/meta.d.ts +12 -0
  105. package/dist/src/semantics/meta.js +144 -0
  106. package/dist/src/semantics/notifications.d.ts +4 -0
  107. package/dist/src/semantics/notifications.js +62 -0
  108. package/dist/src/semantics/orgs.d.ts +2 -0
  109. package/dist/src/semantics/orgs.js +420 -0
  110. package/dist/src/semantics/packages.d.ts +2 -0
  111. package/dist/src/semantics/packages.js +55 -0
  112. package/dist/src/semantics/pages.d.ts +2 -0
  113. package/dist/src/semantics/pages.js +176 -0
  114. package/dist/src/semantics/projects.d.ts +2 -0
  115. package/dist/src/semantics/projects.js +239 -0
  116. package/dist/src/semantics/pulls.d.ts +2 -0
  117. package/dist/src/semantics/pulls.js +462 -0
  118. package/dist/src/semantics/push-reactions.d.ts +101 -0
  119. package/dist/src/semantics/push-reactions.js +513 -0
  120. package/dist/src/semantics/releases.d.ts +19 -0
  121. package/dist/src/semantics/releases.js +231 -0
  122. package/dist/src/semantics/repo-invitations.d.ts +2 -0
  123. package/dist/src/semantics/repo-invitations.js +98 -0
  124. package/dist/src/semantics/repos.d.ts +17 -0
  125. package/dist/src/semantics/repos.js +390 -0
  126. package/dist/src/semantics/rulesets.d.ts +2 -0
  127. package/dist/src/semantics/rulesets.js +111 -0
  128. package/dist/src/semantics/search.d.ts +2 -0
  129. package/dist/src/semantics/search.js +84 -0
  130. package/dist/src/semantics/security.d.ts +2 -0
  131. package/dist/src/semantics/security.js +177 -0
  132. package/dist/src/semantics/shared.d.ts +61 -0
  133. package/dist/src/semantics/shared.js +151 -0
  134. package/dist/src/semantics/users.d.ts +2 -0
  135. package/dist/src/semantics/users.js +255 -0
  136. package/dist/src/semantics/webhooks.d.ts +2 -0
  137. package/dist/src/semantics/webhooks.js +107 -0
  138. package/dist/test-fixtures/github-a11y-reference.pr-list.SOURCE.md +56 -0
  139. package/dist/test-fixtures/github-a11y-reference.pr-list.json +1447 -0
  140. package/dist/test-fixtures/github-comment-schema.SOURCE.md +11 -0
  141. package/dist/test-fixtures/github-comment-schema.json +702 -0
  142. package/dist/test-fixtures/github-known-deviations.json +94 -0
  143. package/dist/test-fixtures/github-openapi-operations.SOURCE.md +76 -0
  144. package/dist/test-fixtures/github-openapi-operations.json +362 -0
  145. package/dist/test-fixtures/github-pull-schema.SOURCE.md +37 -0
  146. package/dist/test-fixtures/github-pull-schema.json +3601 -0
  147. package/dist/test-fixtures/github-review-schema.SOURCE.md +12 -0
  148. package/dist/test-fixtures/github-review-schema.json +236 -0
  149. package/package.json +20 -11
  150. package/src/cli.ts +7 -6
  151. package/src/generated/graphql-sdl.gen.json +1 -0
  152. package/src/generated/graphql.gen.json +1 -0
  153. package/src/generated/surface.gen.json +1 -0
  154. package/src/generated/ui.gen.json +1 -0
  155. package/src/github-a11y-snapshot.uitest.ts +5 -5
  156. package/src/github-budget.ts +4 -4
  157. package/src/github-capabilities.ts +1993 -556
  158. package/src/github-conformance.ts +12 -7
  159. package/src/github-connector.ts +108 -96
  160. package/src/github-events.ts +223 -95
  161. package/src/github-git-http.ts +47 -83
  162. package/src/github-git-plane.ts +247 -385
  163. package/src/github-journey.uitest.ts +28 -44
  164. package/src/github-mirror-state.ts +23 -61
  165. package/src/github-mirror-ui.ts +16 -10
  166. package/src/github-server.ts +158 -60
  167. package/src/github-shared.ts +1 -1
  168. package/src/github-twin.ts +1525 -4494
  169. package/src/github-ui-conformance.ts +7 -8
  170. package/src/github-ui-structure.ts +19 -18
  171. package/src/graphql-wire.ts +115 -0
  172. package/src/index.ts +47 -7
  173. package/src/manifest.ts +605 -0
  174. package/src/npm-registry.ts +43 -0
  175. package/src/screens/app-installation.tsx +217 -0
  176. package/src/screens/app-manifest.tsx +97 -0
  177. package/src/screens/oauth.tsx +258 -0
  178. package/src/screens/session.tsx +186 -0
  179. package/src/semantics/actions.ts +395 -0
  180. package/src/semantics/activity.ts +171 -0
  181. package/src/semantics/apps.ts +133 -0
  182. package/src/semantics/branches.ts +133 -0
  183. package/src/semantics/checks.ts +163 -0
  184. package/src/semantics/code-scanning-upload.ts +92 -0
  185. package/src/semantics/codespaces.ts +58 -0
  186. package/src/semantics/commits.ts +109 -0
  187. package/src/semantics/contents.ts +112 -0
  188. package/src/semantics/deployments.ts +116 -0
  189. package/src/semantics/gists.ts +85 -0
  190. package/src/semantics/git.ts +226 -0
  191. package/src/semantics/graphql.ts +505 -0
  192. package/src/semantics/index.ts +68 -0
  193. package/src/semantics/issues.ts +434 -0
  194. package/src/semantics/keys.ts +66 -0
  195. package/src/semantics/labels.ts +91 -0
  196. package/src/semantics/meta.ts +139 -0
  197. package/src/semantics/notifications.ts +58 -0
  198. package/src/semantics/orgs.ts +383 -0
  199. package/src/semantics/packages.ts +59 -0
  200. package/src/semantics/pages.ts +154 -0
  201. package/src/semantics/projects.ts +246 -0
  202. package/src/semantics/pulls.ts +421 -0
  203. package/src/semantics/push-reactions.ts +471 -0
  204. package/src/semantics/releases.ts +213 -0
  205. package/src/semantics/repo-invitations.ts +112 -0
  206. package/src/semantics/repos.ts +373 -0
  207. package/src/semantics/rulesets.ts +107 -0
  208. package/src/semantics/search.ts +83 -0
  209. package/src/semantics/security.ts +153 -0
  210. package/src/semantics/shared.ts +181 -0
  211. package/src/semantics/users.ts +252 -0
  212. package/src/semantics/webhooks.ts +101 -0
  213. package/test-fixtures/github-known-deviations.json +7 -8
  214. package/test-fixtures/github-openapi-operations.json +46 -227
  215. package/src/github-graphql.ts +0 -398
@@ -0,0 +1,916 @@
1
+ :root {
2
+ color-scheme: light;
3
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
4
+ font-size: 14px;
5
+ line-height: 1.5;
6
+ background: #fff;
7
+ color: #1f2328;
8
+ }
9
+
10
+ * {
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ body {
15
+ margin: 0;
16
+ background: #fff;
17
+ }
18
+
19
+ button {
20
+ font: inherit;
21
+ cursor: pointer;
22
+ }
23
+
24
+ .count,
25
+ .Counter {
26
+ display: inline-block;
27
+ min-width: 20px;
28
+ padding: 0 6px;
29
+ font-size: 12px;
30
+ font-weight: 500;
31
+ line-height: 18px;
32
+ text-align: center;
33
+ color: #1f2328;
34
+ background: rgba(175, 184, 193, 0.2);
35
+ border: 1px solid transparent;
36
+ border-radius: 2em;
37
+ }
38
+
39
+ .content {
40
+ max-width: 1280px;
41
+ margin: 0 auto;
42
+ padding: 24px 32px 40px;
43
+ }
44
+
45
+ .toolbar {
46
+ display: flex;
47
+ justify-content: space-between;
48
+ align-items: center;
49
+ gap: 16px;
50
+ margin-bottom: 12px;
51
+ }
52
+
53
+ .pr-filter {
54
+ flex: 1;
55
+ border: 1px solid #d0d7de;
56
+ border-radius: 6px;
57
+ height: 34px;
58
+ padding: 0 12px;
59
+ color: #24292f;
60
+ background: #fff;
61
+ }
62
+
63
+ .new-pr {
64
+ border: 1px solid rgba(31, 35, 40, .15);
65
+ border-radius: 6px;
66
+ background: #1f883d;
67
+ color: #fff;
68
+ height: 34px;
69
+ padding: 0 12px;
70
+ font-weight: 600;
71
+ }
72
+
73
+ .list-box {
74
+ border: 1px solid #d0d7de;
75
+ border-radius: 6px;
76
+ overflow: auto;
77
+ background: #fff;
78
+ max-height: calc(100vh - 248px);
79
+ position: sticky;
80
+ top: 16px;
81
+ }
82
+
83
+ .list-head {
84
+ min-height: 48px;
85
+ background: #f6f8fa;
86
+ border-bottom: 1px solid #d0d7de;
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: space-between;
90
+ padding: 0 16px;
91
+ color: #57606a;
92
+ font-size: 14px;
93
+ }
94
+
95
+ .list-head strong {
96
+ color: #24292f;
97
+ }
98
+
99
+ .pr-row {
100
+ width: 100%;
101
+ border: 0;
102
+ border-bottom: 1px solid #d8dee4;
103
+ background: #fff;
104
+ display: grid;
105
+ grid-template-columns: 24px minmax(0, 1fr) auto;
106
+ gap: 10px;
107
+ text-align: left;
108
+ padding: 12px 16px;
109
+ }
110
+
111
+ .pr-row:last-child {
112
+ border-bottom: 0;
113
+ }
114
+
115
+ .pr-row:hover,
116
+ .pr-row.active {
117
+ background: #f6f8fa;
118
+ }
119
+
120
+ .status-icon {
121
+ color: #1a7f37;
122
+ font-weight: 900;
123
+ font-size: 18px;
124
+ line-height: 22px;
125
+ }
126
+
127
+ .status-icon.closed {
128
+ color: #8250df;
129
+ }
130
+
131
+ .pr-title {
132
+ color: #24292f;
133
+ font-weight: 600;
134
+ line-height: 1.35;
135
+ }
136
+
137
+ .pr-title:hover {
138
+ color: #0969da;
139
+ }
140
+
141
+ .pr-meta {
142
+ margin-top: 3px;
143
+ color: #57606a;
144
+ font-size: 12px;
145
+ }
146
+
147
+ .labels {
148
+ display: flex;
149
+ gap: 6px;
150
+ align-items: center;
151
+ flex-wrap: wrap;
152
+ justify-content: flex-end;
153
+ }
154
+
155
+ .label {
156
+ border-radius: 999px;
157
+ padding: 1px 7px;
158
+ font-size: 12px;
159
+ font-weight: 600;
160
+ background: #ddf4ff;
161
+ color: #0969da;
162
+ }
163
+
164
+ .approved {
165
+ background: #dafbe1;
166
+ color: #1a7f37;
167
+ }
168
+
169
+ .split {
170
+ display: grid;
171
+ grid-template-columns: minmax(0, 1fr) 320px;
172
+ gap: 24px;
173
+ align-items: start;
174
+ }
175
+
176
+ .split > main {
177
+ min-width: 0;
178
+ }
179
+
180
+ .conversation {
181
+ margin-top: 0;
182
+ display: grid;
183
+ gap: 16px;
184
+ min-width: 0;
185
+ }
186
+
187
+ .conversation h2 {
188
+ margin: 0 0 8px;
189
+ font-size: 26px;
190
+ font-weight: 400;
191
+ line-height: 1.25;
192
+ }
193
+
194
+ .conversation h2 span {
195
+ color: #57606a;
196
+ }
197
+
198
+ .state-line {
199
+ display: flex;
200
+ align-items: center;
201
+ gap: 8px;
202
+ color: #57606a;
203
+ font-size: 14px;
204
+ padding-bottom: 12px;
205
+ border-bottom: 1px solid #d0d7de;
206
+ flex-wrap: wrap;
207
+ }
208
+
209
+ .state-badge {
210
+ border-radius: 999px;
211
+ background: #1a7f37;
212
+ color: white;
213
+ font-weight: 700;
214
+ padding: 4px 10px;
215
+ font-size: 12px;
216
+ text-transform: capitalize;
217
+ }
218
+
219
+ .state-badge.open { background: #1a7f37; }
220
+ .state-badge.closed { background: #cf222e; }
221
+ .state-badge.merged { background: #8250df; }
222
+
223
+ .meta-row {
224
+ display: flex;
225
+ gap: 6px;
226
+ flex-wrap: wrap;
227
+ align-items: center;
228
+ }
229
+
230
+ .label.assignee {
231
+ background: #fff8c5;
232
+ color: #7d4e00;
233
+ }
234
+
235
+ .label.milestone {
236
+ background: #eef2ff;
237
+ color: #4338ca;
238
+ }
239
+
240
+ .label.requested {
241
+ background: #fff1e5;
242
+ color: #9a3412;
243
+ }
244
+
245
+ .ci-status {
246
+ font-weight: 900;
247
+ font-size: 14px;
248
+ line-height: 1;
249
+ }
250
+
251
+ .ci-status.success { color: #1a7f37; }
252
+ .ci-status.failure { color: #cf222e; }
253
+ .ci-status.pending { color: #9a6700; }
254
+
255
+
256
+ .linked-issues {
257
+ margin-top: 4px;
258
+ font-size: 12px;
259
+ color: #57606a;
260
+ display: flex;
261
+ flex-wrap: wrap;
262
+ gap: 6px;
263
+ align-items: center;
264
+ }
265
+
266
+ .linked-ref {
267
+ color: #0969da;
268
+ text-decoration: none;
269
+ font-weight: 600;
270
+ }
271
+
272
+ .linked-ref:hover {
273
+ text-decoration: underline;
274
+ }
275
+
276
+ .issue-row {
277
+ cursor: default;
278
+ }
279
+
280
+ .status-icon.open {
281
+ color: #1a7f37;
282
+ }
283
+
284
+ .timeline-item {
285
+ display: grid;
286
+ grid-template-columns: 40px minmax(0, 1fr);
287
+ gap: 10px;
288
+ }
289
+
290
+ .comment,
291
+ .review-card {
292
+ border: 1px solid #d0d7de;
293
+ border-radius: 6px;
294
+ background: #fff;
295
+ overflow: hidden;
296
+ }
297
+
298
+ .comment-head,
299
+ .review-head {
300
+ background: #f6f8fa;
301
+ border-bottom: 1px solid #d0d7de;
302
+ min-height: 40px;
303
+ display: flex;
304
+ align-items: center;
305
+ gap: 6px;
306
+ padding: 0 12px;
307
+ font-size: 14px;
308
+ }
309
+
310
+ .comment-body {
311
+ padding: 14px;
312
+ white-space: pre-wrap;
313
+ line-height: 1.45;
314
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
315
+ font-size: 12px;
316
+ color: #24292f;
317
+ }
318
+
319
+
320
+ .snapshot-section {
321
+ display: grid;
322
+ gap: 10px;
323
+ }
324
+
325
+ .snapshot-section h3 {
326
+ margin: 4px 0;
327
+ font-size: 16px;
328
+ }
329
+
330
+ .sidebar {
331
+ display: grid;
332
+ gap: 18px;
333
+ }
334
+
335
+ .branch {
336
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
337
+ background: #ddf4ff;
338
+ color: #0969da;
339
+ border-radius: 6px;
340
+ padding: 3px 6px;
341
+ font-size: 12px;
342
+ word-break: break-all;
343
+ }
344
+
345
+ a.branch {
346
+ text-decoration: none;
347
+ }
348
+
349
+ a.branch:hover {
350
+ text-decoration: underline;
351
+ }
352
+
353
+ .sha {
354
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
355
+ font-size: 12px;
356
+ color: #57606a;
357
+ word-break: break-all;
358
+ }
359
+
360
+ .empty,
361
+ .error {
362
+ color: #57606a;
363
+ padding: 22px;
364
+ }
365
+
366
+ .error {
367
+ background: #ffebe9;
368
+ color: #cf222e;
369
+ border-radius: 6px;
370
+ margin-bottom: 16px;
371
+ }
372
+
373
+ @media (max-width: 980px) {
374
+ .split {
375
+ grid-template-columns: 1fr;
376
+ }
377
+
378
+ .split > main {
379
+ grid-template-columns: 1fr;
380
+ }
381
+
382
+ .list-box {
383
+ max-height: 42vh;
384
+ position: static;
385
+ }
386
+
387
+ .sidebar {
388
+ display: none;
389
+ }
390
+
391
+ .content {
392
+ padding-left: 16px;
393
+ padding-right: 16px;
394
+ }
395
+ }
396
+
397
+ /* --- Actions (workflows + runs + jobs) view ------------------------------------- */
398
+ .actions-view {
399
+ display: grid;
400
+ grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
401
+ gap: 18px;
402
+ }
403
+
404
+ .actions-box .run-row {
405
+ display: grid;
406
+ grid-template-columns: auto minmax(0, 1fr);
407
+ gap: 10px;
408
+ width: 100%;
409
+ text-align: left;
410
+ padding: 12px 14px;
411
+ border: 0;
412
+ border-bottom: 1px solid #d8dee4;
413
+ background: transparent;
414
+ cursor: pointer;
415
+ align-items: center;
416
+ }
417
+
418
+ .actions-box .run-row:last-child { border-bottom: 0; }
419
+ .actions-box .run-row:hover,
420
+ .actions-box .run-row.active { background: #f6f8fa; }
421
+
422
+ .run-title {
423
+ display: block;
424
+ font-weight: 600;
425
+ color: #0969da;
426
+ }
427
+
428
+ .run-meta {
429
+ font-size: 12px;
430
+ color: #57606a;
431
+ }
432
+
433
+ .run-badge {
434
+ display: inline-flex;
435
+ gap: 4px;
436
+ align-items: center;
437
+ font-size: 12px;
438
+ font-weight: 600;
439
+ padding: 1px 6px;
440
+ border-radius: 999px;
441
+ white-space: nowrap;
442
+ }
443
+
444
+ .run-badge.success { color: #1a7f37; }
445
+ .run-badge.failure { color: #cf222e; }
446
+ .run-badge.cancelled { color: #57606a; }
447
+ .run-badge.queued,
448
+ .run-badge.in_progress { color: #9a6700; }
449
+
450
+ .run-detail h2 span { color: #57606a; font-weight: 400; }
451
+
452
+ .job-list {
453
+ display: grid;
454
+ gap: 12px;
455
+ }
456
+
457
+ .job-row {
458
+ border: 1px solid #d0d7de;
459
+ border-radius: 6px;
460
+ padding: 10px 12px;
461
+ }
462
+
463
+ .job-head {
464
+ display: flex;
465
+ gap: 8px;
466
+ align-items: center;
467
+ font-size: 14px;
468
+ }
469
+
470
+ .step-list {
471
+ margin: 8px 0 0;
472
+ padding-left: 18px;
473
+ display: grid;
474
+ gap: 4px;
475
+ font-size: 12px;
476
+ color: #57606a;
477
+ }
478
+
479
+ @media (max-width: 900px) {
480
+ .actions-view { grid-template-columns: 1fr; }
481
+ }
482
+
483
+ /* --- Releases (releases + assets + tags) view ----------------------------------- */
484
+ .releases-view {
485
+ display: grid;
486
+ grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
487
+ gap: 18px;
488
+ }
489
+
490
+ .releases-box .release-row {
491
+ display: grid;
492
+ grid-template-columns: auto minmax(0, 1fr) auto;
493
+ gap: 10px;
494
+ width: 100%;
495
+ text-align: left;
496
+ padding: 12px 14px;
497
+ border: 0;
498
+ border-bottom: 1px solid #d8dee4;
499
+ background: transparent;
500
+ cursor: pointer;
501
+ align-items: center;
502
+ }
503
+
504
+ .releases-box .release-row:last-child { border-bottom: 0; }
505
+ .releases-box .release-row:hover,
506
+ .releases-box .release-row.active { background: #f6f8fa; }
507
+
508
+ .release-tag { font-size: 12px; color: #57606a; white-space: nowrap; }
509
+
510
+ .release-title {
511
+ display: block;
512
+ font-weight: 600;
513
+ color: #0969da;
514
+ }
515
+
516
+ .release-meta {
517
+ font-size: 12px;
518
+ color: #57606a;
519
+ }
520
+
521
+ .release-badge {
522
+ display: inline-flex;
523
+ align-items: center;
524
+ font-size: 12px;
525
+ font-weight: 600;
526
+ padding: 1px 8px;
527
+ border-radius: 999px;
528
+ white-space: nowrap;
529
+ border: 1px solid transparent;
530
+ }
531
+
532
+ .release-badge.release { color: #1a7f37; border-color: #1a7f3744; }
533
+ .release-badge.prerelease { color: #9a6700; border-color: #9a670044; }
534
+ .release-badge.draft { color: #57606a; border-color: #57606a44; }
535
+
536
+ .release-detail h2 span { color: #57606a; font-weight: 400; }
537
+
538
+ .asset-list {
539
+ display: grid;
540
+ gap: 6px;
541
+ }
542
+
543
+ .asset-row {
544
+ display: grid;
545
+ grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) auto auto;
546
+ gap: 10px;
547
+ align-items: center;
548
+ border: 1px solid #d0d7de;
549
+ border-radius: 6px;
550
+ padding: 8px 12px;
551
+ font-size: 12px;
552
+ }
553
+
554
+ .asset-name { color: #0969da; }
555
+ .asset-type { color: #57606a; }
556
+ .asset-size, .asset-downloads { color: #57606a; white-space: nowrap; }
557
+
558
+ @media (max-width: 900px) {
559
+ .releases-view { grid-template-columns: 1fr; }
560
+ }
561
+
562
+ /* --- Discussions view ------------------------------------------------------------ */
563
+ .discussions-view {
564
+ display: grid;
565
+ grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
566
+ gap: 18px;
567
+ }
568
+
569
+ .discussions-box .discussion-row {
570
+ display: grid;
571
+ grid-template-columns: auto minmax(0, 1fr) auto;
572
+ gap: 10px;
573
+ width: 100%;
574
+ text-align: left;
575
+ padding: 12px 14px;
576
+ border: 0;
577
+ border-bottom: 1px solid #d8dee4;
578
+ background: transparent;
579
+ cursor: pointer;
580
+ align-items: center;
581
+ }
582
+
583
+ .discussions-box .discussion-row:last-child { border-bottom: 0; }
584
+ .discussions-box .discussion-row:hover,
585
+ .discussions-box .discussion-row.active { background: #f6f8fa; }
586
+
587
+ .discussion-title { display: block; font-weight: 600; color: #0969da; }
588
+ .discussion-meta { font-size: 12px; color: #57606a; }
589
+
590
+ .discussion-category {
591
+ display: inline-flex;
592
+ align-items: center;
593
+ font-size: 12px;
594
+ font-weight: 600;
595
+ padding: 1px 8px;
596
+ border-radius: 999px;
597
+ white-space: nowrap;
598
+ border: 1px solid #d0d7de;
599
+ color: #57606a;
600
+ }
601
+ .discussion-category.answerable { color: #0969da; border-color: #0969da44; }
602
+
603
+ .answer-badge {
604
+ display: inline-flex;
605
+ align-items: center;
606
+ font-size: 12px;
607
+ font-weight: 600;
608
+ padding: 1px 8px;
609
+ border-radius: 999px;
610
+ white-space: nowrap;
611
+ border: 1px solid transparent;
612
+ }
613
+ .answer-badge.answered { color: #1a7f37; border-color: #1a7f3744; }
614
+ .answer-badge.unanswered { color: #9a6700; border-color: #9a670044; }
615
+
616
+ .discussion-detail h2 span { color: #57606a; font-weight: 400; }
617
+
618
+ .comment-thread { display: grid; gap: 8px; }
619
+ .thread-comment {
620
+ border: 1px solid #d0d7de;
621
+ border-radius: 6px;
622
+ padding: 8px 12px;
623
+ font-size: 13px;
624
+ }
625
+ .thread-comment.reply { margin-left: 22px; border-left: 3px solid #d0d7de; }
626
+ .thread-comment.is-answer { border-color: #1a7f3766; background: #dafbe11a; }
627
+ .accepted-answer { border: 1px solid #1a7f3766; background: #dafbe11a; border-radius: 6px; padding: 8px 12px; }
628
+ .answer-highlight { margin-top: 4px; }
629
+
630
+ @media (max-width: 900px) {
631
+ .discussions-view { grid-template-columns: 1fr; }
632
+ }
633
+
634
+ /* Deployments / Environments view */
635
+ .deployments-view { display: flex; flex-direction: column; gap: 16px; }
636
+ .deployments-view h3 { margin: 0 0 8px; font-size: 14px; }
637
+ .environments-list { border: 1px solid #d0d7de; border-radius: 6px; padding: 12px; }
638
+ .environment-row { display: flex; gap: 10px; align-items: center; padding: 6px 0; border-bottom: 1px solid #eaeef2; }
639
+ .environment-row:last-child { border-bottom: none; }
640
+ .environment-name { min-width: 140px; }
641
+ .environment-protected { background: #ddf4ff; color: #0969da; }
642
+ .deployments-list { border: 1px solid #d0d7de; border-radius: 6px; padding: 12px; }
643
+ .deployment-row { display: flex; gap: 10px; align-items: center; padding: 8px 0; border-bottom: 1px solid #eaeef2; }
644
+ .deployment-row:last-child { border-bottom: none; }
645
+ .deployment-ref { flex: 1; }
646
+ .deployment-meta { color: #57606a; font-size: 12px; margin-top: 2px; }
647
+ .deployment-state {
648
+ display: inline-flex; font-size: 12px; font-weight: 600; padding: 1px 8px; border-radius: 999px; white-space: nowrap; color: #fff;
649
+ }
650
+ .deployment-state.success { background: #1a7f37; }
651
+ .deployment-state.failure { background: #cf222e; }
652
+ .deployment-state.pending { background: #9a6700; }
653
+ .deployment-state.inactive { background: #57606a; }
654
+ .deployment-env { background: #f6f8fa; color: #24292f; }
655
+
656
+ /* ── The pull-request workspace: GitHub's header, list page and pull request page ───────────────────────── */
657
+ .gh-app { min-height: 100vh; background: #fff; }
658
+ .gh-app a { color: #0969da; text-decoration: none; }
659
+ .gh-app a:hover { text-decoration: underline; }
660
+ .octicon { display: inline-block; vertical-align: text-bottom; flex: none; overflow: visible; }
661
+ .gh-avatar { display: inline-block; border-radius: 50%; overflow: hidden; vertical-align: middle; flex: none; box-shadow: 0 0 0 1px rgba(31, 35, 40, 0.15); background: #fff; }
662
+ .gh-muted { color: #59636e; }
663
+ .gh-spacer { flex: 1; }
664
+ .gh-app code, .gh-sha, .gh-commit-ref, .gh-file-name, .gh-diff-table { font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; }
665
+
666
+ .gh-header { background: #f6f8fa; box-shadow: inset 0 -1px 0 #d1d9e0; padding: 16px 16px 0; }
667
+ .gh-globalbar { display: flex; align-items: center; gap: 8px; height: 32px; margin-bottom: 8px; }
668
+ .gh-logo { color: #1f2328 !important; display: inline-flex; margin: 0 4px 0 4px; }
669
+ .gh-context { display: flex; align-items: center; gap: 2px; font-size: 14px; line-height: 1.5; }
670
+ .gh-context a { color: #1f2328 !important; padding: 0 6px; border-radius: 6px; line-height: 32px; }
671
+ .gh-context a:hover { background: rgba(129, 139, 152, 0.15); text-decoration: none !important; }
672
+ .gh-context strong { font-weight: 600; }
673
+ .gh-context-sep { color: #59636e; }
674
+ .gh-iconbtn { display: inline-flex; align-items: center; justify-content: center; gap: 2px; height: 32px; min-width: 32px; padding: 0 7px; border: 1px solid #d1d9e0; border-radius: 6px; background: transparent; color: #59636e; }
675
+ .gh-iconbtn:hover { background: rgba(129, 139, 152, 0.15); }
676
+ .gh-iconbtn-sm { height: 28px; min-width: 28px; border-color: transparent; padding: 0 6px; }
677
+ .gh-search { display: inline-flex; align-items: center; gap: 8px; width: 272px; height: 32px; padding: 0 8px; border: 1px solid #d1d9e0; border-radius: 6px; background: #fff; color: #59636e; font-size: 14px; text-align: left; }
678
+ .gh-search kbd { display: inline-block; padding: 0 4px; font: 11px/16px ui-monospace, SFMono-Regular, Menlo, monospace; border: 1px solid #d1d9e0; border-radius: 4px; color: #59636e; }
679
+ .gh-divider { width: 1px; height: 20px; background: #d1d9e0; margin: 0 4px; }
680
+ .gh-viewer { display: inline-flex; margin-left: 4px; }
681
+ .gh-localbar { display: flex; gap: 8px; min-height: 48px; align-items: center; overflow-x: auto; }
682
+ .gh-tab { position: relative; display: inline-flex; align-items: center; gap: 8px; padding: 0 8px; height: 32px; line-height: 30px; border-radius: 6px; color: #1f2328 !important; font-size: 14px; white-space: nowrap; }
683
+ .gh-tab .octicon { color: #59636e; }
684
+ .gh-tab:hover { background: rgba(129, 139, 152, 0.15); text-decoration: none !important; }
685
+ .gh-tab.selected { font-weight: 600; }
686
+ .gh-tab.selected::after { content: ""; position: absolute; left: 50%; bottom: calc(50% - 25px); width: 100%; height: 2px; transform: translateX(-50%); background: #fd8c73; border-radius: 6px; }
687
+
688
+ .gh-container { max-width: 1280px; margin: 0 auto; padding: 24px 32px 48px; }
689
+ .gh-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; height: 32px; padding: 0 12px; font-size: 14px; font-weight: 500; line-height: 20px; color: #25292e; background: #f6f8fa; border: 1px solid #d1d9e0; border-radius: 6px; box-shadow: 0 1px 0 rgba(31, 35, 40, 0.04); white-space: nowrap; }
690
+ .gh-btn:hover:not(:disabled) { background: #eff2f5; }
691
+ .gh-btn:disabled { color: #818b98; cursor: not-allowed; }
692
+ .gh-btn-sm { height: 28px; padding: 0 8px; font-size: 12px; }
693
+ .gh-btn-primary { color: #fff; background: #1f883d; border-color: rgba(31, 35, 40, 0.15); box-shadow: 0 1px 0 rgba(31, 35, 40, 0.1); }
694
+ .gh-btn-primary:hover:not(:disabled) { background: #1c8139; }
695
+ .gh-btn-primary:disabled { color: rgba(255, 255, 255, 0.8); background: #95d8a6; border-color: rgba(31, 35, 40, 0.15); }
696
+ .gh-btn-group { display: inline-flex; }
697
+ .gh-btn-group .gh-btn:first-child { border-top-right-radius: 0; border-bottom-right-radius: 0; }
698
+ .gh-btn-caret { border-top-left-radius: 0; border-bottom-left-radius: 0; border-left-color: rgba(255, 255, 255, 0.25); padding: 0 8px; }
699
+ .gh-input { width: 100%; padding: 5px 12px; font: inherit; font-size: 14px; line-height: 20px; color: #1f2328; background: #fff; border: 1px solid #d1d9e0; border-radius: 6px; }
700
+ .gh-flash-error { margin-top: 8px; padding: 12px 16px; color: #1f2328; background: #ffebe9; border: 1px solid rgba(255, 129, 130, 0.4); border-radius: 6px; }
701
+ .gh-label { display: inline-block; padding: 0 7px; font-size: 12px; font-weight: 500; line-height: 18px; white-space: nowrap; border: 1px solid transparent; border-radius: 2em; }
702
+
703
+ /* list page */
704
+ .gh-subnav { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; }
705
+ .gh-filter { flex: 1; display: flex; }
706
+ .gh-filter-btn { border-top-right-radius: 0; border-bottom-right-radius: 0; }
707
+ .gh-filter-input { flex: 1; display: flex; align-items: center; gap: 8px; height: 32px; padding: 0 8px; color: #59636e; background: #fff; border: 1px solid #d1d9e0; border-left: 0; border-radius: 0 6px 6px 0; }
708
+ .gh-filter-input input { flex: 1; border: 0; outline: 0; font: inherit; font-size: 14px; color: #59636e; background: transparent; }
709
+ .gh-subnav-links { display: flex; }
710
+ .gh-subnav-item { display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 16px; font-weight: 600; color: #1f2328 !important; border: 1px solid #d1d9e0; }
711
+ .gh-subnav-item .octicon { color: #59636e; }
712
+ .gh-subnav-item:first-child { border-radius: 6px 0 0 6px; }
713
+ .gh-subnav-item + .gh-subnav-item { border-left: 0; border-radius: 0 6px 6px 0; }
714
+ .gh-subnav-item:hover { background: #f6f8fa; text-decoration: none !important; }
715
+ .gh-box { background: #fff; border: 1px solid #d1d9e0; border-radius: 6px; }
716
+ .gh-box-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px; margin: -1px -1px 0; background: #f6f8fa; border: 1px solid #d1d9e0; border-radius: 6px 6px 0 0; }
717
+ .gh-states { display: flex; gap: 10px; }
718
+ .gh-states-link { display: inline-flex; align-items: center; gap: 4px; padding: 0; font-size: 14px; color: #59636e; background: none; border: 0; }
719
+ .gh-states-link.selected { font-weight: 600; color: #1f2328; }
720
+ .gh-states-link:hover { color: #1f2328; }
721
+ .gh-box-filters { display: flex; gap: 24px; color: #59636e; font-size: 14px; }
722
+ .gh-select-menu { display: inline-flex; align-items: center; gap: 2px; color: #59636e; white-space: nowrap; cursor: pointer; }
723
+ .gh-list-page .pr-row { display: flex; align-items: flex-start; gap: 0; width: auto; padding: 8px 0; text-align: left; background: #fff; border: 0; border-top: 1px solid #d1d9e0; }
724
+ .gh-list-page .gh-rows .pr-row:first-child { border-top: 0; }
725
+ .gh-list-page .pr-row:last-child { border-radius: 0 0 6px 6px; }
726
+ .gh-list-page .pr-row:hover { background: #f6f8fa; }
727
+ .pr-state-icon { display: inline-flex; padding: 2px 0 0 16px; }
728
+ .pr-state-icon.open { color: #1a7f37; }
729
+ .pr-state-icon.merged { color: #8250df; }
730
+ .pr-state-icon.closed { color: #d1242f; }
731
+ .pr-state-icon.draft { color: #59636e; }
732
+ .pr-row-main { flex: 1; min-width: 0; padding: 0 8px; }
733
+ .pr-row-title-line { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
734
+ .pr-row-repo { color: #59636e; font-size: 16px; font-weight: 600; margin-right: 4px; }
735
+ .gh-app a.pr-row-title { color: #1f2328; font-size: 16px; font-weight: 600; line-height: 1.5; margin-right: 4px; }
736
+ .gh-app a.pr-row-title:hover { color: #0969da; }
737
+ .pr-row-meta { margin-top: 4px; font-size: 12px; color: #59636e; }
738
+ .gh-app a.gh-muted-link { color: #59636e; }
739
+ .gh-app a.gh-muted-link:hover { color: #0969da; }
740
+ .pr-row-side { display: flex; align-items: flex-start; gap: 16px; padding-right: 16px; min-width: 120px; justify-content: flex-end; }
741
+ .pr-row-assignees { display: inline-flex; }
742
+ .pr-row-comments { min-width: 40px; text-align: right; }
743
+ .pr-row-comments a { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 600; }
744
+ .ci-status { display: inline-flex; align-items: center; font-weight: normal; }
745
+ .ci-status.success { color: #1a7f37; }
746
+ .ci-status.failure, .ci-status.error { color: #d1242f; }
747
+ .ci-status.pending { color: #9a6700; }
748
+ .gh-blankslate { padding: 32px; text-align: center; color: #59636e; }
749
+ .gh-blankslate h3 { margin: 16px 0 4px; font-size: 20px; font-weight: 600; color: #1f2328; }
750
+ .gh-protip { margin: 20px 0; text-align: center; color: #59636e; }
751
+ .gh-protip strong { color: #1f2328; }
752
+
753
+ /* pull request page */
754
+ .gh-pull-header { margin-bottom: 16px; }
755
+ .gh-pull-title-row { display: flex; align-items: flex-start; gap: 16px; }
756
+ .gh-pull-title { flex: 1; margin: 0 0 8px; font-size: 32px; font-weight: 400; line-height: 1.25; word-wrap: break-word; }
757
+ .gh-pull-number { color: #59636e; font-weight: 300; }
758
+ .gh-pull-title-actions { display: flex; gap: 8px; padding-top: 6px; }
759
+ .gh-pull-page .state-line { display: flex; align-items: center; gap: 8px; padding-bottom: 8px; margin-bottom: 16px; font-size: 14px; color: #59636e; border-bottom: 1px solid #d1d9e0; }
760
+ .gh-pull-meta-text { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; }
761
+ .gh-app .gh-author { color: #1f2328; font-weight: 600; }
762
+ .gh-state { display: inline-flex; align-items: center; gap: 4px; padding: 5px 12px; font-size: 14px; font-weight: 500; line-height: 20px; color: #fff; border-radius: 2em; text-transform: none; }
763
+ .gh-state-open { background: #1f883d; }
764
+ .gh-state-merged { background: #8250df; }
765
+ .gh-state-closed { background: #cf222e; }
766
+ .gh-state-draft { background: #59636e; }
767
+ .gh-commit-ref { display: inline-block; padding: 0 5px; font-size: 12px; line-height: 20px; color: #0969da; background: #ddf4ff; border-radius: 6px; }
768
+ .gh-copy { display: inline-flex; padding: 4px; color: #59636e; background: none; border: 0; border-radius: 6px; }
769
+ .gh-copy:hover { background: rgba(129, 139, 152, 0.15); }
770
+ .gh-pull-tabs { display: flex; align-items: flex-end; gap: 8px; margin-top: 16px; border-bottom: 1px solid #d1d9e0; }
771
+ .gh-pull-tab { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; margin-bottom: -1px; font-size: 14px; line-height: 23px; color: #59636e !important; border: 1px solid transparent; border-radius: 6px 6px 0 0; }
772
+ .gh-pull-tab:hover { color: #1f2328 !important; text-decoration: none !important; }
773
+ .gh-pull-tab.selected { color: #1f2328 !important; background: #fff; border-color: #d1d9e0; border-bottom-color: #fff; }
774
+ .gh-pull-tab .octicon { color: #59636e; }
775
+ .gh-pull-tabs-fill { flex: 1; }
776
+ .gh-diffstat { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 600; padding-bottom: 10px; }
777
+ .gh-files .gh-diffstat, .gh-file-header .gh-diffstat { padding-bottom: 0; }
778
+ .gh-add { color: #1a7f37; }
779
+ .gh-del { color: #d1242f; }
780
+ .gh-diffstat-blocks { display: inline-flex; gap: 1px; margin-left: 4px; }
781
+ .gh-block { width: 8px; height: 8px; background: #d1d9e0; }
782
+ .gh-block.add { background: #1f883d; }
783
+ .gh-block.del { background: #cf222e; }
784
+ .gh-pull-layout { display: grid; grid-template-columns: minmax(0, 1fr) 256px; gap: 24px; align-items: start; }
785
+
786
+ .gh-pull-page .conversation { display: block; margin: 0; }
787
+ .gh-timeline { position: relative; }
788
+ .gh-timeline::before { content: ""; position: absolute; top: 0; bottom: 0; left: 72px; width: 2px; background: #d1d9e0; }
789
+ .gh-pull-page .timeline-item { position: relative; display: flex; gap: 16px; padding-bottom: 16px; }
790
+ .gh-timeline-avatar { flex: none; width: 40px; height: 40px; }
791
+ .gh-pull-page .comment { position: relative; flex: 1; min-width: 0; background: #fff; border: 1px solid #d1d9e0; border-radius: 6px; overflow: visible; }
792
+ .gh-pull-page .comment::before { content: ""; position: absolute; top: 11px; left: -8px; width: 8px; height: 16px; background: #d1d9e0; clip-path: polygon(0 50%, 100% 0, 100% 100%); }
793
+ .gh-pull-page .comment::after { content: ""; position: absolute; top: 12px; left: -6px; width: 7px; height: 14px; background: #f6f8fa; clip-path: polygon(0 50%, 100% 0, 100% 100%); }
794
+ .gh-comment-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 38px; padding: 0 8px 0 16px; background: #f6f8fa; border-bottom: 1px solid #d1d9e0; border-radius: 6px 6px 0 0; font-size: 14px; }
795
+ .gh-pull-page .gh-comment-self { border-color: #b6e3ff; }
796
+ .gh-pull-page .gh-comment-self .gh-comment-header { background: #ddf4ff; border-bottom-color: #b6e3ff; }
797
+ .gh-pull-page .gh-comment-self::before { background: #b6e3ff; }
798
+ .gh-pull-page .gh-comment-self::after { background: #ddf4ff; }
799
+ .gh-comment-badges { display: inline-flex; align-items: center; gap: 4px; }
800
+ .gh-role { display: inline-block; padding: 0 7px; font-size: 12px; font-weight: 500; line-height: 18px; color: #59636e; border: 1px solid #d1d9e0; border-radius: 2em; }
801
+ .gh-comment-body { padding: 16px; font-size: 14px; line-height: 1.5; font-family: inherit; white-space: normal; color: #1f2328; }
802
+ .gh-markdown p { margin: 0 0 16px; }
803
+ .gh-markdown p:last-child { margin-bottom: 0; }
804
+ .gh-markdown code { padding: 0.2em 0.4em; font-size: 85%; background: rgba(129, 139, 152, 0.12); border-radius: 6px; }
805
+ .gh-event { position: relative; display: flex; align-items: center; gap: 8px; padding: 16px 0 16px 56px; font-size: 14px; }
806
+ .gh-event-badge { position: relative; z-index: 1; display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; color: #59636e; background: #eff2f5; border: 2px solid #fff; border-radius: 50%; flex: none; }
807
+ .gh-event-badge.approved { color: #fff; background: #1f883d; }
808
+ .gh-event-badge.changes { color: #fff; background: #cf222e; }
809
+ .gh-event-badge.merged { color: #fff; background: #8250df; }
810
+ .gh-event-badge.closed { color: #fff; background: #cf222e; }
811
+ .gh-event-badge.reopened { color: #fff; background: #1f883d; }
812
+ .gh-event-body { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
813
+ .gh-commits-event { padding-bottom: 8px; }
814
+ .gh-commits-event .gh-event { padding-bottom: 8px; }
815
+ .gh-commit-line { display: flex; align-items: center; gap: 8px; padding: 4px 0 4px 64px; font-size: 14px; }
816
+ .gh-commit-line::before { content: ""; position: relative; z-index: 1; width: 8px; height: 8px; margin: 0 8px 0 0; background: #d1d9e0; border-radius: 50%; box-shadow: 0 0 0 2px #fff; }
817
+ .gh-commit-message { flex: 1; min-width: 0; color: #59636e; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
818
+ .gh-sha { font-size: 12px; color: #59636e; }
819
+ .gh-pull-page .review-card { background: none; border: 0; overflow: visible; }
820
+ .gh-review-body { padding-left: 56px; }
821
+ .gh-review-body .timeline-item { padding-bottom: 8px; }
822
+ .gh-review-body .gh-timeline-avatar { display: none; }
823
+
824
+ .gh-mergebox { position: relative; display: flex; gap: 16px; padding: 16px 0; border-top: 2px solid #d1d9e0; margin-left: 0; }
825
+ .gh-mergebox-icon { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; color: #fff; border-radius: 6px; }
826
+ .gh-mergebox-icon.open { background: #1f883d; }
827
+ .gh-mergebox-icon.merged { background: #8250df; }
828
+ .gh-mergebox-icon.closed { background: #cf222e; }
829
+ .gh-mergebox-icon.neutral { background: #59636e; }
830
+ .gh-mergebox-panel { flex: 1; min-width: 0; background: #fff; border: 1px solid #d1d9e0; border-radius: 6px; }
831
+ .gh-merge-section { display: flex; gap: 12px; padding: 16px; border-bottom: 1px solid #d1d9e0; }
832
+ .gh-merge-section:last-child { border-bottom: 0; }
833
+ .gh-merge-section-icon { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; color: #fff; border-radius: 50%; }
834
+ .gh-merge-section-icon.ok { background: #1f883d; }
835
+ .gh-merge-section-icon.warn { background: #9a6700; }
836
+ .gh-merge-section-icon.bad { background: #cf222e; }
837
+ .gh-merge-section-icon.merged { background: #8250df; }
838
+ .gh-merge-section-icon.closed { background: #cf222e; }
839
+ .gh-merge-section-text { flex: 1; min-width: 0; }
840
+ .gh-merge-section-text strong { font-size: 16px; font-weight: 600; }
841
+ .gh-checks-list { list-style: none; margin: 12px 0 0; padding: 0; border: 1px solid #d1d9e0; border-radius: 6px; }
842
+ .gh-checks-list li { display: flex; align-items: center; gap: 8px; padding: 8px 12px; font-size: 13px; }
843
+ .gh-checks-list li + li { border-top: 1px solid #d1d9e0; }
844
+ .gh-checks-list strong { font-size: 13px !important; }
845
+ .gh-check-details { margin-left: auto; font-size: 13px; }
846
+ .gh-merge-actions { padding: 16px; background: #f6f8fa; border-top: 1px solid #d1d9e0; border-radius: 0 0 6px 6px; }
847
+ .gh-merge-button-row { display: flex; align-items: center; gap: 16px; }
848
+ .gh-merge-hint { font-size: 12px; }
849
+ .gh-merge-confirm { display: grid; gap: 8px; }
850
+ .gh-merge-confirm textarea { resize: vertical; }
851
+ .gh-merge-confirm-buttons { display: flex; gap: 8px; }
852
+
853
+ .gh-comment-form-item { padding-top: 16px; border-top: 2px solid #d1d9e0; }
854
+ .gh-comment-form { flex: 1; min-width: 0; }
855
+ .gh-pull-page .conversation h2.gh-comment-form-title { margin: 0 0 8px; font-size: 16px; font-weight: 600; line-height: 1.5; }
856
+ .gh-comment-form-box { border: 1px solid #d1d9e0; border-radius: 6px; background: #fff; }
857
+ .gh-comment-form-tabs { display: flex; gap: 4px; padding: 8px 8px 0; background: #f6f8fa; border-bottom: 1px solid #d1d9e0; border-radius: 6px 6px 0 0; }
858
+ .gh-comment-form-tabs span { padding: 6px 12px; font-size: 14px; color: #59636e; border: 1px solid transparent; border-radius: 6px 6px 0 0; margin-bottom: -1px; }
859
+ .gh-comment-form-tabs span.selected { color: #1f2328; background: #fff; border-color: #d1d9e0; border-bottom-color: #fff; }
860
+ .gh-comment-textarea { display: block; width: calc(100% - 16px); min-height: 100px; margin: 8px; padding: 8px; font: inherit; font-size: 14px; line-height: 1.5; color: #1f2328; background: #f6f8fa; border: 1px solid #d1d9e0; border-radius: 6px; resize: vertical; }
861
+ .gh-comment-textarea:focus { background: #fff; border-color: #0969da; outline: 1px solid #0969da; }
862
+ .gh-comment-form-hint { display: flex; align-items: center; gap: 6px; padding: 0 12px 8px; font-size: 12px; color: #59636e; }
863
+ .gh-comment-form-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }
864
+ .gh-closed-fg { color: #cf222e; }
865
+
866
+ .gh-sidebar { display: block; font-size: 12px; }
867
+ .gh-sidebar-item { padding: 16px 0; border-bottom: 1px solid #d1d9e0; }
868
+ .gh-sidebar-item:first-child { padding-top: 0; }
869
+ .gh-sidebar-item:last-child { border-bottom: 0; }
870
+ .gh-sidebar-item h3 { display: flex; align-items: center; justify-content: space-between; margin: 0 0 8px; font-size: 12px; font-weight: 600; color: #59636e; }
871
+ .gh-sidebar-item p { margin: 0 0 4px; }
872
+ .gh-sidebar-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
873
+ .gh-sidebar-list li { display: flex; align-items: center; gap: 6px; }
874
+ .gh-sidebar-list .gh-author { font-weight: 600; font-size: 12px; }
875
+ .gh-review-state { margin-left: auto; display: inline-flex; }
876
+ .gh-review-state.approved { color: #1a7f37; }
877
+ .gh-review-state.changes_requested { color: #d1242f; }
878
+ .gh-review-state.pending { color: #9a6700; }
879
+ .gh-review-state.commented { color: #59636e; }
880
+ .gh-sidebar-labels { display: flex; flex-wrap: wrap; gap: 4px; }
881
+ .gh-participants { display: flex; flex-wrap: wrap; gap: 4px; }
882
+
883
+ .gh-commit-group { margin-bottom: 16px; }
884
+ .gh-commit-group-title { display: flex; align-items: center; gap: 8px; margin: 0 0 8px; font-size: 14px; font-weight: 400; color: #59636e; }
885
+ .gh-commit-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 8px 16px; border-top: 1px solid #d1d9e0; }
886
+ .gh-commit-row:first-child { border-top: 0; }
887
+ .gh-commit-row-title { font-weight: 600; font-size: 14px; }
888
+ .gh-commit-row-meta { display: flex; align-items: center; gap: 4px; margin-top: 2px; font-size: 12px; }
889
+ .gh-commit-row-side { display: flex; align-items: center; gap: 4px; }
890
+ .gh-sha-btn { padding: 3px 8px; border: 1px solid #d1d9e0; border-radius: 6px; background: #f6f8fa; }
891
+ .gh-check-row { display: flex; align-items: center; gap: 8px; padding: 12px 16px; border-top: 1px solid #d1d9e0; }
892
+ .gh-checks-tab .gh-box-header { padding: 12px 16px; }
893
+
894
+ .gh-files-toolbar { display: flex; align-items: center; gap: 16px; padding: 8px 0 16px; font-size: 14px; }
895
+ .gh-file { margin-bottom: 16px; border: 1px solid #d1d9e0; border-radius: 6px; overflow: hidden; }
896
+ .gh-file-header { display: flex; align-items: center; gap: 8px; padding: 5px 8px 5px 12px; background: #f6f8fa; border-bottom: 1px solid #d1d9e0; font-size: 12px; color: #59636e; }
897
+ .gh-file-count { font-weight: 600; color: #1f2328; }
898
+ .gh-file-header .gh-diffstat .gh-add, .gh-file-header .gh-diffstat .gh-del { display: none; }
899
+ .gh-file-name { font-size: 12px; font-weight: 600; color: #1f2328; }
900
+ .gh-viewed { display: inline-flex; align-items: center; gap: 4px; padding: 3px 8px; font-size: 12px; border: 1px solid #d1d9e0; border-radius: 6px; background: #f6f8fa; color: #1f2328; }
901
+ .gh-file-nodiff { padding: 16px; }
902
+ .gh-diff-table { width: 100%; border-collapse: collapse; font-size: 12px; line-height: 20px; }
903
+ .gh-diff-num { width: 1%; min-width: 50px; padding: 0 10px; text-align: right; color: #59636e; vertical-align: top; user-select: none; white-space: nowrap; }
904
+ .gh-diff-code { padding: 0 10px 0 22px; white-space: pre-wrap; word-break: break-all; color: #1f2328; position: relative; }
905
+ .gh-diff-marker { position: absolute; left: 8px; }
906
+ .gh-diff-add .gh-diff-code { background: #dafbe1; }
907
+ .gh-diff-add .gh-diff-num { background: #aceebb; color: #1f2328; }
908
+ .gh-diff-del .gh-diff-code { background: #ffebe9; }
909
+ .gh-diff-del .gh-diff-num { background: #ffcecb; color: #1f2328; }
910
+ .gh-diff-hunk td { background: #ddf4ff; color: #59636e; }
911
+ .gh-diff-hunk .gh-diff-num { background: #b6e3ff; }
912
+ .gh-diff-note td { color: #59636e; }
913
+
914
+ .gh-footer { display: flex; flex-wrap: wrap; align-items: center; gap: 16px; max-width: 1280px; margin: 0 auto; padding: 40px 32px; font-size: 12px; color: #59636e; }
915
+ .gh-footer-brand { display: inline-flex; align-items: center; gap: 8px; color: #59636e; }
916
+ .gh-footer ul { display: flex; flex-wrap: wrap; gap: 16px; margin: 0; padding: 0; list-style: none; }