@volter/twin-github 0.1.2 → 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
@@ -1,6 +1,8 @@
1
1
  :root {
2
2
  color-scheme: light;
3
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
3
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
4
+ font-size: 14px;
5
+ line-height: 1.5;
4
6
  background: #fff;
5
7
  color: #1f2328;
6
8
  }
@@ -11,7 +13,7 @@
11
13
 
12
14
  body {
13
15
  margin: 0;
14
- background: #c9d1d9;
16
+ background: #fff;
15
17
  }
16
18
 
17
19
  button {
@@ -19,226 +21,19 @@ button {
19
21
  cursor: pointer;
20
22
  }
21
23
 
22
- .global-header {
23
- height: 64px;
24
- background: #24292f;
25
- color: #f0f3f6;
26
- display: flex;
27
- align-items: center;
28
- gap: 16px;
29
- padding: 0 24px;
30
- }
31
-
32
- .octo {
33
- width: 32px;
34
- height: 32px;
35
- border-radius: 999px;
36
- background: #f0f3f6;
37
- color: #24292f;
38
- display: grid;
39
- place-items: center;
40
- font-size: 11px;
41
- font-weight: 900;
42
- }
43
-
44
- .search {
45
- width: 300px;
46
- max-width: 32vw;
47
- height: 32px;
48
- border: 1px solid #57606a;
49
- border-radius: 6px;
50
- background: #24292f;
51
- color: #c9d1d9;
52
- padding: 0 12px;
53
- }
54
-
55
- .global-nav {
56
- display: flex;
57
- gap: 14px;
58
- font-size: 14px;
59
- font-weight: 600;
60
- }
61
-
62
- .global-spacer {
63
- flex: 1;
64
- }
65
-
66
- .pill-dark {
67
- border: 1px solid #57606a;
68
- border-radius: 6px;
69
- padding: 4px 8px;
70
- color: #c9d1d9;
71
- font-size: 12px;
72
- }
73
-
74
- .repo-head {
75
- background: #f6f8fa;
76
- border-bottom: 1px solid #d0d7de;
77
- padding: 16px 32px 0;
78
- }
79
-
80
- .repo-line {
81
- display: flex;
82
- align-items: center;
83
- gap: 8px;
84
- color: #57606a;
85
- font-size: 20px;
86
- min-width: 0;
87
- }
88
-
89
- .repo-line button {
90
- border: 0;
91
- background: transparent;
92
- color: #0969da;
93
- font-size: 20px;
94
- padding: 0;
95
- }
96
-
97
- .repo-line strong {
98
- color: #0969da;
99
- font-weight: 600;
100
- min-width: 0;
101
- overflow: hidden;
102
- text-overflow: ellipsis;
103
- white-space: nowrap;
104
- }
105
-
106
- .visibility {
107
- border: 1px solid #d0d7de;
108
- border-radius: 999px;
109
- padding: 0 7px;
110
- color: #57606a;
111
- font-size: 12px;
112
- font-weight: 600;
113
- }
114
-
115
- .repo-tabs {
116
- display: flex;
117
- align-items: end;
118
- gap: 4px;
119
- margin-top: 14px;
120
- }
121
-
122
- .repo-tabs button {
123
- border: 0;
124
- background: transparent;
125
- padding: 13px 12px 12px;
126
- border-bottom: 2px solid transparent;
127
- color: #24292f;
128
- display: inline-flex;
129
- align-items: center;
130
- gap: 6px;
131
- }
132
-
133
- .repo-tabs button.active {
134
- border-bottom-color: #fd8c73;
135
- font-weight: 600;
136
- }
137
-
138
- .count {
139
- background: #eaeef2;
140
- border-radius: 999px;
141
- padding: 1px 6px;
142
- font-size: 12px;
143
- color: #24292f;
144
- }
145
-
146
- .browser-shell {
147
- min-height: 100vh;
148
- background: #c9d1d9;
149
- }
150
-
151
- .browser-tabs {
152
- display: flex;
153
- align-items: end;
154
- gap: 2px;
155
- overflow-x: auto;
156
- background: #d8dee4;
157
- padding: 8px 10px 0;
158
- scrollbar-gutter: stable;
159
- }
160
-
161
- .browser-tab {
162
- flex: 0 0 auto;
163
- min-width: 0;
164
- max-width: 260px;
165
- height: 36px;
166
- display: inline-flex;
167
- align-items: center;
168
- gap: 8px;
169
- border: 1px solid #afb8c1;
170
- border-bottom: 0;
171
- border-radius: 10px 10px 0 0;
172
- background: #eaeef2;
173
- color: #24292f;
174
- padding: 0 12px;
175
- text-align: left;
176
- }
177
-
178
- .browser-tab.active {
179
- background: #fff;
180
- color: #24292f;
181
- }
182
-
183
- .browser-tab span {
184
- overflow: hidden;
185
- text-overflow: ellipsis;
186
- white-space: nowrap;
187
- font-size: 13px;
188
- font-weight: 600;
189
- }
190
-
191
- .browser-tab strong {
24
+ .count,
25
+ .Counter {
26
+ display: inline-block;
192
27
  min-width: 20px;
193
- text-align: center;
194
- background: #d8dee4;
195
- border-radius: 999px;
196
- color: #57606a;
197
- padding: 1px 6px;
28
+ padding: 0 6px;
198
29
  font-size: 12px;
199
- }
200
-
201
- .browser-tab.active strong {
202
- background: #d8dee4;
203
- color: #24292f;
204
- }
205
-
206
- .browser-address {
207
- height: 42px;
208
- display: flex;
209
- align-items: center;
210
- gap: 8px;
211
- background: #fff;
212
- border-bottom: 1px solid #d0d7de;
213
- padding: 0 14px;
214
- }
215
-
216
- .browser-dot {
217
- width: 11px;
218
- height: 11px;
219
- border-radius: 999px;
220
- flex: none;
221
- }
222
-
223
- .browser-dot.red { background: #ff5f57; }
224
- .browser-dot.yellow { background: #febc2e; }
225
- .browser-dot.green { background: #28c840; }
226
-
227
- .address-bar {
228
- height: 28px;
229
- flex: 1;
230
- display: flex;
231
- align-items: center;
232
- border: 1px solid #d0d7de;
233
- border-radius: 999px;
234
- background: #f6f8fa;
235
- color: #57606a;
236
- padding: 0 14px;
237
- font-size: 13px;
238
- }
239
-
240
- .github-shell {
241
- background: #fff;
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;
242
37
  }
243
38
 
244
39
  .content {
@@ -447,13 +242,6 @@ button {
447
242
  color: #9a3412;
448
243
  }
449
244
 
450
- .requested-reviewers {
451
- display: flex;
452
- flex-wrap: wrap;
453
- gap: 6px;
454
- margin-top: 8px;
455
- }
456
-
457
245
  .ci-status {
458
246
  font-weight: 900;
459
247
  font-size: 14px;
@@ -464,18 +252,6 @@ button {
464
252
  .ci-status.failure { color: #cf222e; }
465
253
  .ci-status.pending { color: #9a6700; }
466
254
 
467
- .ci-line {
468
- display: inline-flex;
469
- align-items: center;
470
- gap: 6px;
471
- font-size: 13px;
472
- font-weight: 600;
473
- text-transform: capitalize;
474
- }
475
-
476
- .ci-line.success { color: #1a7f37; }
477
- .ci-line.failure { color: #cf222e; }
478
- .ci-line.pending { color: #9a6700; }
479
255
 
480
256
  .linked-issues {
481
257
  margin-top: 4px;
@@ -511,27 +287,6 @@ button {
511
287
  gap: 10px;
512
288
  }
513
289
 
514
- .avatar {
515
- width: 40px;
516
- height: 40px;
517
- border-radius: 999px;
518
- background: #6e7781;
519
- color: white;
520
- display: grid;
521
- place-items: center;
522
- font-size: 11px;
523
- font-weight: 900;
524
- overflow: hidden;
525
- flex: none;
526
- }
527
-
528
- .avatar img {
529
- width: 100%;
530
- height: 100%;
531
- object-fit: cover;
532
- display: block;
533
- }
534
-
535
290
  .comment,
536
291
  .review-card {
537
292
  border: 1px solid #d0d7de;
@@ -561,22 +316,6 @@ button {
561
316
  color: #24292f;
562
317
  }
563
318
 
564
- .review-card {
565
- border-color: #2da44e;
566
- }
567
-
568
- .review-head {
569
- background: #dafbe1;
570
- border-bottom-color: #aceebb;
571
- color: #1a7f37;
572
- font-weight: 600;
573
- }
574
-
575
- .review-body {
576
- padding: 12px;
577
- color: #24292f;
578
- line-height: 1.45;
579
- }
580
319
 
581
320
  .snapshot-section {
582
321
  display: grid;
@@ -588,48 +327,11 @@ button {
588
327
  font-size: 16px;
589
328
  }
590
329
 
591
- .file-list {
592
- border: 1px solid #d0d7de;
593
- border-radius: 6px;
594
- overflow: hidden;
595
- }
596
-
597
- .file-row {
598
- display: grid;
599
- grid-template-columns: 90px minmax(0, 1fr) 110px;
600
- gap: 10px;
601
- padding: 8px 12px;
602
- border-bottom: 1px solid #d8dee4;
603
- align-items: center;
604
- font-size: 12px;
605
- }
606
-
607
- .file-row:last-child {
608
- border-bottom: 0;
609
- }
610
-
611
- .file-row strong {
612
- min-width: 0;
613
- overflow-wrap: anywhere;
614
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
615
- }
616
-
617
330
  .sidebar {
618
331
  display: grid;
619
332
  gap: 18px;
620
333
  }
621
334
 
622
- .side-section {
623
- border-bottom: 1px solid #d0d7de;
624
- padding-bottom: 18px;
625
- }
626
-
627
- .side-section h3 {
628
- margin: 0 0 10px;
629
- font-size: 13px;
630
- color: #57606a;
631
- }
632
-
633
335
  .branch {
634
336
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
635
337
  background: #ddf4ff;
@@ -686,12 +388,6 @@ a.branch:hover {
686
388
  display: none;
687
389
  }
688
390
 
689
- .global-nav,
690
- .search {
691
- display: none;
692
- }
693
-
694
- .repo-head,
695
391
  .content {
696
392
  padding-left: 16px;
697
393
  padding-right: 16px;
@@ -956,3 +652,265 @@ a.branch:hover {
956
652
  .deployment-state.pending { background: #9a6700; }
957
653
  .deployment-state.inactive { background: #57606a; }
958
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; }