github-issue-tower-defence-management 1.112.5 → 1.112.6

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 (19) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/bin/adapter/entry-points/console/ui-dist/assets/{index-BvWrFBsC.css → index-DKFbU8lr.css} +1 -1
  3. package/bin/adapter/entry-points/console/ui-dist/assets/index-DUygHx5u.js +101 -0
  4. package/bin/adapter/entry-points/console/ui-dist/index.html +2 -2
  5. package/package.json +1 -1
  6. package/src/adapter/entry-points/console/ui/e2e/consoleScenario.spec.ts +54 -0
  7. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +110 -8
  8. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.stories.tsx +3 -0
  9. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.tsx +7 -0
  10. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.stories.tsx +17 -0
  11. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.tsx +4 -0
  12. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.test.tsx +68 -3
  13. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +16 -9
  14. package/src/adapter/entry-points/console/ui/src/index.css +3 -1
  15. package/src/adapter/entry-points/console/ui-dist/assets/{index-BvWrFBsC.css → index-DKFbU8lr.css} +1 -1
  16. package/src/adapter/entry-points/console/ui-dist/assets/index-DUygHx5u.js +101 -0
  17. package/src/adapter/entry-points/console/ui-dist/index.html +2 -2
  18. package/bin/adapter/entry-points/console/ui-dist/assets/index-DNBjBIvK.js +0 -101
  19. package/src/adapter/entry-points/console/ui-dist/assets/index-DNBjBIvK.js +0 -101
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>TDPM Console</title>
7
- <script type="module" crossorigin src="/assets/index-DNBjBIvK.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-BvWrFBsC.css">
7
+ <script type="module" crossorigin src="/assets/index-DUygHx5u.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-DKFbU8lr.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.112.5",
3
+ "version": "1.112.6",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -120,3 +120,57 @@ test('renders the Workflow Blocker tab leftmost and shows its detail operations'
120
120
  page.locator('.console-op-button', { hasText: '+1 day' }),
121
121
  ).toBeVisible();
122
122
  });
123
+
124
+ test('adds an inline review comment on a related pull request diff without hover on a touch viewport', async ({
125
+ browser,
126
+ }) => {
127
+ const touchContext = await browser.newContext({
128
+ viewport: { width: 390, height: 844 },
129
+ hasTouch: true,
130
+ isMobile: true,
131
+ });
132
+ const page = await touchContext.newPage();
133
+
134
+ await page.goto(harness.appRootUrl);
135
+
136
+ await tabByLabel(page, 'Failed Preparation').click();
137
+ await itemRowByText(
138
+ page,
139
+ 'Add inline review comments on the related pull request diff',
140
+ ).click();
141
+
142
+ const changedFile = page
143
+ .locator('.console-file-row', {
144
+ hasText: 'src/adapter/entry-points/console/ui/src/index.css',
145
+ })
146
+ .first();
147
+ await expect(changedFile).toBeVisible();
148
+ await changedFile.click();
149
+
150
+ const commentButton = page.locator('.console-diff-comment-button').first();
151
+ await expect(commentButton).toBeVisible();
152
+ const opacity = await commentButton.evaluate(
153
+ (element) => window.getComputedStyle(element).opacity,
154
+ );
155
+ expect(Number(opacity)).toBeGreaterThan(0);
156
+
157
+ await commentButton.click();
158
+ await page
159
+ .locator('.console-diff-composer-input')
160
+ .fill('Please verify this opacity change on touch devices.');
161
+ await page.locator('.console-diff-composer-submit').click();
162
+
163
+ await expect(page.locator('.console-diff-composer-posted')).toHaveText(
164
+ 'Comment posted.',
165
+ );
166
+
167
+ expect(harness.reviewCommentCalls).toHaveLength(1);
168
+ expect(harness.reviewCommentCalls[0].url).toBe(
169
+ 'https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/pull/912',
170
+ );
171
+ expect(harness.reviewCommentCalls[0].body).toBe(
172
+ 'Please verify this opacity change on touch devices.',
173
+ );
174
+
175
+ await touchContext.close();
176
+ });
@@ -9,6 +9,7 @@ import type {
9
9
  IssueRepository,
10
10
  PullRequestCommit,
11
11
  PullRequestDetail,
12
+ PullRequestFile,
12
13
  RelatedPullRequest,
13
14
  } from '../../../../../domain/usecases/adapter-interfaces/IssueRepository';
14
15
  import type { ConsoleProjectBinding } from '../../consoleOperationApi';
@@ -18,6 +19,14 @@ import { startWebServer } from '../../webServer';
18
19
  export const CONSOLE_E2E_PJCODE = 'umino';
19
20
  export const CONSOLE_E2E_TOKEN = 'console-e2e-fixture-token-3f9c1a';
20
21
 
22
+ export type ConsoleE2eReviewCommentCall = {
23
+ url: string;
24
+ path: string;
25
+ line: number;
26
+ side: string;
27
+ body: string;
28
+ };
29
+
21
30
  type ConsoleFixtureListItem = {
22
31
  number: number;
23
32
  title: string;
@@ -54,6 +63,25 @@ type ConsoleFixtureSnapshot = {
54
63
  const REPO_NAME_WITH_OWNER =
55
64
  'HiromiShikata/npm-cli-github-issue-tower-defence-management';
56
65
 
66
+ export const CONSOLE_E2E_INLINE_COMMENT_ISSUE_URL = `https://github.com/${REPO_NAME_WITH_OWNER}/issues/911`;
67
+ export const CONSOLE_E2E_INLINE_COMMENT_PR_URL = `https://github.com/${REPO_NAME_WITH_OWNER}/pull/912`;
68
+
69
+ const INLINE_COMMENT_PR_FILE: PullRequestFile = {
70
+ filename: 'src/adapter/entry-points/console/ui/src/index.css',
71
+ status: 'modified',
72
+ additions: 3,
73
+ deletions: 1,
74
+ patch: `@@ -959,7 +959,9 @@
75
+ background: transparent;
76
+ color: #6e7681;
77
+ font-size: 0.875rem;
78
+ cursor: pointer;
79
+ - opacity: 0;
80
+ + opacity: 0.6;
81
+ + border-color: #30363d;
82
+ }`,
83
+ };
84
+
57
85
  const AWAITING_WORKSPACE_OPTION: ConsoleFixtureFieldOption = {
58
86
  id: 'd1c19cce',
59
87
  name: 'Awaiting Workspace',
@@ -198,7 +226,15 @@ export const CONSOLE_E2E_TAB_ITEMS: Record<string, ConsoleFixtureListItem[]> = {
198
226
  '2026-06-17T05:48:09.000Z',
199
227
  ),
200
228
  ],
201
- 'failed-preparation': [],
229
+ 'failed-preparation': [
230
+ issueItem(
231
+ 911,
232
+ 'Add inline review comments on the related pull request diff',
233
+ 'FPR00911',
234
+ 'TDPM Console port',
235
+ '2026-06-18T03:12:00.000Z',
236
+ ),
237
+ ],
202
238
  'todo-by-human': [
203
239
  issueItem(
204
240
  869,
@@ -286,7 +322,36 @@ const notImplemented = (method: string): never => {
286
322
  throw new Error(`console E2E stub does not implement ${method}`);
287
323
  };
288
324
 
289
- const createStubIssueRepository = (): IssueRepository => ({
325
+ const inlineCommentRelatedPullRequest: RelatedPullRequest = {
326
+ url: CONSOLE_E2E_INLINE_COMMENT_PR_URL,
327
+ branchName: 'feature/911-related-pr-inline-comments',
328
+ createdAt: new Date('2026-06-18T03:30:00.000Z'),
329
+ isDraft: false,
330
+ isConflicted: false,
331
+ isPassedAllCiJob: true,
332
+ isCiStateSuccess: true,
333
+ isResolvedAllReviewComments: true,
334
+ isBranchOutOfDate: false,
335
+ missingRequiredCheckNames: [],
336
+ };
337
+
338
+ const inlineCommentPullRequestDetail: PullRequestDetail = {
339
+ title: 'Add inline review comments on the related pull request diff',
340
+ state: 'open',
341
+ merged: false,
342
+ isDraft: false,
343
+ additions: 3,
344
+ deletions: 1,
345
+ changedFiles: 1,
346
+ headRefName: 'feature/911-related-pr-inline-comments',
347
+ baseRefName: 'main',
348
+ author: 'HiromiShikata',
349
+ files: [INLINE_COMMENT_PR_FILE],
350
+ };
351
+
352
+ const createStubIssueRepository = (
353
+ reviewCommentCalls: ConsoleE2eReviewCommentCall[],
354
+ ): IssueRepository => ({
290
355
  getAllIssues: () => notImplemented('getAllIssues'),
291
356
  getIssueByUrl: async (url: string): Promise<Issue | null> =>
292
357
  buildIssueForUrl(url),
@@ -306,12 +371,29 @@ const createStubIssueRepository = (): IssueRepository => ({
306
371
  get: async (issueUrl: string): Promise<Issue | null> =>
307
372
  buildIssueForUrl(issueUrl),
308
373
  update: () => notImplemented('update'),
309
- findRelatedOpenPRs: async (): Promise<RelatedPullRequest[]> => [],
374
+ findRelatedOpenPRs: async (url: string): Promise<RelatedPullRequest[]> =>
375
+ url === CONSOLE_E2E_INLINE_COMMENT_ISSUE_URL
376
+ ? [inlineCommentRelatedPullRequest]
377
+ : [],
310
378
  getOpenPullRequest: async (): Promise<RelatedPullRequest | null> => null,
311
379
  getPullRequestChangedFilePaths: async (): Promise<string[]> => [],
312
380
  approvePullRequest: async (): Promise<void> => undefined,
313
381
  requestChangesWithInlineComment: async (): Promise<void> => undefined,
314
- createPullRequestReviewComment: async (): Promise<void> => undefined,
382
+ createPullRequestReviewComment: async (
383
+ prUrl: string,
384
+ filePath: string,
385
+ line: number,
386
+ side: string,
387
+ commentBody: string,
388
+ ): Promise<void> => {
389
+ reviewCommentCalls.push({
390
+ url: prUrl,
391
+ path: filePath,
392
+ line,
393
+ side,
394
+ body: commentBody,
395
+ });
396
+ },
315
397
  closePullRequest: async (): Promise<void> => undefined,
316
398
  closeIssueByUrl: async (): Promise<void> => undefined,
317
399
  deletePullRequestBranch: () => notImplemented('deletePullRequestBranch'),
@@ -323,7 +405,12 @@ const createStubIssueRepository = (): IssueRepository => ({
323
405
  getIssueOrPullRequestBody: async (): Promise<string> =>
324
406
  '## Console E2E fixture\n\nThis body is served by the isolated E2E stub.',
325
407
  getIssueOrPullRequestComments: async (): Promise<IssueComment[]> => [],
326
- getPullRequestDetail: async (): Promise<PullRequestDetail | null> => null,
408
+ getPullRequestDetail: async (
409
+ url: string,
410
+ ): Promise<PullRequestDetail | null> =>
411
+ url === CONSOLE_E2E_INLINE_COMMENT_PR_URL
412
+ ? inlineCommentPullRequestDetail
413
+ : null,
327
414
  getPullRequestCommits: async (): Promise<PullRequestCommit[]> => [],
328
415
  getIssueOrPullRequestState: async (
329
416
  url: string,
@@ -332,13 +419,24 @@ const createStubIssueRepository = (): IssueRepository => ({
332
419
  merged: false,
333
420
  isPullRequest: url.includes('/pull/'),
334
421
  }),
335
- getPullRequestSummary: async (): Promise<{
422
+ getPullRequestSummary: async (
423
+ url: string,
424
+ ): Promise<{
336
425
  title: string;
337
426
  body: string;
338
427
  additions: number;
339
428
  deletions: number;
340
429
  changedFiles: number;
341
- } | null> => null,
430
+ } | null> =>
431
+ url === CONSOLE_E2E_INLINE_COMMENT_PR_URL
432
+ ? {
433
+ title: 'Add inline review comments on the related pull request diff',
434
+ body: 'Wires the add-comment handler on the related pull request diff path.',
435
+ additions: 3,
436
+ deletions: 1,
437
+ changedFiles: 1,
438
+ }
439
+ : null,
342
440
  });
343
441
 
344
442
  export type ConsoleE2eHarness = {
@@ -346,6 +444,7 @@ export type ConsoleE2eHarness = {
346
444
  appUrl: string;
347
445
  appRootUrl: string;
348
446
  consoleDataOutputDir: string;
447
+ reviewCommentCalls: ConsoleE2eReviewCommentCall[];
349
448
  stop: () => Promise<void>;
350
449
  };
351
450
 
@@ -362,11 +461,13 @@ export const startConsoleE2eHarness = async (): Promise<ConsoleE2eHarness> => {
362
461
  ): Promise<ConsoleProjectBinding | null> =>
363
462
  pjcode === CONSOLE_E2E_PJCODE ? { pjcode, project } : null;
364
463
 
464
+ const reviewCommentCalls: ConsoleE2eReviewCommentCall[] = [];
465
+
365
466
  const server = await startWebServer({
366
467
  accessToken: CONSOLE_E2E_TOKEN,
367
468
  uiDistDir,
368
469
  consoleDataOutputDir,
369
- issueRepository: createStubIssueRepository(),
470
+ issueRepository: createStubIssueRepository(reviewCommentCalls),
370
471
  resolveProject,
371
472
  issueTitleStateCache: new IssueTitleStateCache(),
372
473
  inTmuxDataDir: null,
@@ -391,6 +492,7 @@ export const startConsoleE2eHarness = async (): Promise<ConsoleE2eHarness> => {
391
492
  appUrl,
392
493
  appRootUrl,
393
494
  consoleDataOutputDir,
495
+ reviewCommentCalls,
394
496
  stop: async (): Promise<void> => {
395
497
  await closeServer(server);
396
498
  fs.rmSync(tmpRoot, { recursive: true, force: true });
@@ -148,5 +148,8 @@ export const IssueWithLinkedPullRequest: Story = {
148
148
  commitsError: null,
149
149
  },
150
150
  ],
151
+ buildAddInlineComment: (prUrl) => async (path, line, side, body) => {
152
+ window.alert(`comment on ${prUrl} ${path}:${line} (${side})\n${body}`);
153
+ },
151
154
  },
152
155
  };
@@ -59,6 +59,7 @@ export type ConsoleItemDetailProps = {
59
59
  operationBar: ReactNode;
60
60
  buildImageProxyUrl?: ImageProxyUrlBuilder;
61
61
  onAddInlineComment?: ConsoleAddInlineComment;
62
+ buildAddInlineComment?: (prUrl: string) => ConsoleAddInlineComment;
62
63
  };
63
64
 
64
65
  export const ConsoleItemDetail = ({
@@ -85,6 +86,7 @@ export const ConsoleItemDetail = ({
85
86
  operationBar,
86
87
  buildImageProxyUrl,
87
88
  onAddInlineComment,
89
+ buildAddInlineComment,
88
90
  }: ConsoleItemDetailProps) => {
89
91
  const resolvedState = state?.state ?? 'open';
90
92
  const merged = state?.merged ?? false;
@@ -257,6 +259,11 @@ export const ConsoleItemDetail = ({
257
259
  commitsError={related.commitsError}
258
260
  now={now}
259
261
  buildImageProxyUrl={buildImageProxyUrl}
262
+ onAddInlineComment={
263
+ buildAddInlineComment
264
+ ? buildAddInlineComment(related.pullRequest.url)
265
+ : undefined
266
+ }
260
267
  />
261
268
  ))}
262
269
 
@@ -29,3 +29,20 @@ export const WithDetail: Story = {
29
29
  commitsError: null,
30
30
  },
31
31
  };
32
+
33
+ export const WithInlineComments: Story = {
34
+ args: {
35
+ pullRequest: consoleRelatedPullRequestsFixture[0],
36
+ body: consoleRelatedPullRequestsFixture[0].summary?.body ?? '',
37
+ bodyIsLoading: false,
38
+ files: consoleChangedFilesFixture,
39
+ filesAreLoading: false,
40
+ filesError: null,
41
+ commits: consoleCommitsFixture,
42
+ commitsAreLoading: false,
43
+ commitsError: null,
44
+ onAddInlineComment: async (path, line, side, body) => {
45
+ window.alert(`comment on ${path}:${line} (${side})\n${body}`);
46
+ },
47
+ },
48
+ };
@@ -9,6 +9,7 @@ import { ConsolePanel } from '../layout/ConsolePanel';
9
9
  import { ConsoleChangedFileList } from './ConsoleChangedFileList';
10
10
  import { ConsoleCommitList } from './ConsoleCommitList';
11
11
  import { ConsoleCopyUrlButton } from './ConsoleCopyUrlButton';
12
+ import type { ConsoleAddInlineComment } from './ConsoleFileDiff';
12
13
 
13
14
  export type ConsolePullRequestSectionProps = {
14
15
  pullRequest: ConsoleRelatedPullRequest;
@@ -22,6 +23,7 @@ export type ConsolePullRequestSectionProps = {
22
23
  commitsError: string | null;
23
24
  now: number;
24
25
  buildImageProxyUrl?: ImageProxyUrlBuilder;
26
+ onAddInlineComment?: ConsoleAddInlineComment;
25
27
  };
26
28
 
27
29
  export const ConsolePullRequestDetail = ({
@@ -36,6 +38,7 @@ export const ConsolePullRequestDetail = ({
36
38
  commitsError,
37
39
  now,
38
40
  buildImageProxyUrl,
41
+ onAddInlineComment,
39
42
  }: ConsolePullRequestSectionProps) => {
40
43
  const summary = pullRequest.summary;
41
44
  const filesCount =
@@ -87,6 +90,7 @@ export const ConsolePullRequestDetail = ({
87
90
  files={files}
88
91
  isLoading={filesAreLoading}
89
92
  error={filesError}
93
+ onAddInlineComment={onAddInlineComment}
90
94
  />
91
95
  </ConsolePanel>
92
96
  <ConsolePanel title="Commits" count={commitsCount} defaultCollapsed>
@@ -2,8 +2,14 @@ import { fireEvent, render, waitFor } from '@testing-library/react';
2
2
  import type { ConsoleCaches } from '../hooks/useConsoleCaches';
3
3
  import type { ConsoleOperationsApi } from '../hooks/useConsoleOperations';
4
4
  import { ResourceCache } from '../lib/resourceCache';
5
+ import type {
6
+ ConsoleChangedFile,
7
+ ConsoleRelatedPullRequest,
8
+ } from '../logic/types';
5
9
  import {
10
+ consoleChangedFilesFixture,
6
11
  consoleListItemsFixture,
12
+ consoleRelatedPullRequestsFixture,
7
13
  consoleStatusOptionsFixture,
8
14
  consoleStoryColorsFixture,
9
15
  consoleStoryOptionsFixture,
@@ -15,14 +21,20 @@ jest.mock('../lib/mermaidLoader', () => ({
15
21
  }));
16
22
 
17
23
  const prItem = consoleListItemsFixture[0];
24
+ const issueItem = consoleListItemsFixture[2];
18
25
 
19
- const buildCaches = (): ConsoleCaches => {
26
+ type CachesOverrides = {
27
+ relatedPrs?: ConsoleRelatedPullRequest[];
28
+ prFiles?: ConsoleChangedFile[];
29
+ };
30
+
31
+ const buildCaches = (overrides: CachesOverrides = {}): ConsoleCaches => {
20
32
  const client = {
21
33
  fetchItemBody: async () => '# body',
22
34
  fetchComments: async () => [],
23
- fetchPrFiles: async () => [],
35
+ fetchPrFiles: async () => overrides.prFiles ?? [],
24
36
  fetchPrCommits: async () => [],
25
- fetchRelatedPrs: async () => [],
37
+ fetchRelatedPrs: async () => overrides.relatedPrs ?? [],
26
38
  fetchIssueState: async () => ({
27
39
  state: 'open',
28
40
  merged: false,
@@ -90,4 +102,57 @@ describe('ConsoleItemDetailContainer', () => {
90
102
  'approve',
91
103
  );
92
104
  });
105
+
106
+ it('routes an inline review comment on an issue related pull request to that pull request url', async () => {
107
+ const operations = buildOperations();
108
+ const relatedPullRequest = consoleRelatedPullRequestsFixture[0];
109
+ const { container, findByRole, getAllByRole, getByPlaceholderText } =
110
+ render(
111
+ <ConsoleItemDetailContainer
112
+ tab="unread"
113
+ item={issueItem}
114
+ caches={buildCaches({
115
+ relatedPrs: [relatedPullRequest],
116
+ prFiles: consoleChangedFilesFixture,
117
+ })}
118
+ operations={operations}
119
+ statusOptions={consoleStatusOptionsFixture}
120
+ storyOptions={consoleStoryOptionsFixture}
121
+ storyColors={consoleStoryColorsFixture}
122
+ storyName="TDPM Console port"
123
+ overlayStatus={null}
124
+ now={Date.parse('2026-06-19T12:00:00.000Z')}
125
+ onQueueAction={jest.fn()}
126
+ />,
127
+ );
128
+
129
+ const fileRow = await findByRole('button', {
130
+ name: new RegExp(consoleChangedFilesFixture[0].path),
131
+ });
132
+ fireEvent.click(fileRow);
133
+
134
+ const commentButton = getAllByRole('button', {
135
+ name: /^Comment on line/,
136
+ })[0];
137
+ fireEvent.click(commentButton);
138
+
139
+ fireEvent.change(
140
+ getByPlaceholderText('Leave a review comment on this line…'),
141
+ { target: { value: 'Please rename this variable.' } },
142
+ );
143
+ const submitButton = container.querySelector(
144
+ '.console-diff-composer-submit',
145
+ );
146
+ expect(submitButton).not.toBeNull();
147
+ fireEvent.click(submitButton as Element);
148
+
149
+ const addInlineReviewComment =
150
+ operations.addInlineReviewComment as jest.Mock;
151
+ await waitFor(() => {
152
+ expect(addInlineReviewComment).toHaveBeenCalledTimes(1);
153
+ });
154
+ const call = addInlineReviewComment.mock.calls[0];
155
+ expect(call[0]).toBe(relatedPullRequest.url);
156
+ expect(call[4]).toBe('Please rename this variable.');
157
+ });
93
158
  });
@@ -1,4 +1,4 @@
1
- import { useCallback } from 'react';
1
+ import { useCallback, useMemo } from 'react';
2
2
  import { ConsoleCommentComposer } from '../components/detail/ConsoleCommentComposer';
3
3
  import { ConsoleItemDetail } from '../components/detail/ConsoleItemDetail';
4
4
  import { ConsoleOperationMenu } from '../components/operations/ConsoleOperationMenu';
@@ -60,14 +60,20 @@ export const ConsoleItemDetailContainer = ({
60
60
  [token],
61
61
  );
62
62
  const hasPullRequest = item.isPr || detail.relatedPullRequests.length > 0;
63
- const addInlineComment = useCallback(
64
- (
65
- path: string,
66
- line: number,
67
- side: ConsoleReviewCommentSide,
68
- body: string,
69
- ) => operations.addInlineReviewComment(item.url, path, line, side, body),
70
- [operations, item.url],
63
+ const buildAddInlineComment = useCallback(
64
+ (prUrl: string) =>
65
+ (
66
+ path: string,
67
+ line: number,
68
+ side: ConsoleReviewCommentSide,
69
+ body: string,
70
+ ) =>
71
+ operations.addInlineReviewComment(prUrl, path, line, side, body),
72
+ [operations],
73
+ );
74
+ const addInlineComment = useMemo(
75
+ () => buildAddInlineComment(item.url),
76
+ [buildAddInlineComment, item.url],
71
77
  );
72
78
 
73
79
  const handlers: ConsoleOperationHandlers = {
@@ -148,6 +154,7 @@ export const ConsoleItemDetailContainer = ({
148
154
  now={now}
149
155
  buildImageProxyUrl={resolveImageProxyUrl}
150
156
  onAddInlineComment={item.isPr ? addInlineComment : undefined}
157
+ buildAddInlineComment={buildAddInlineComment}
151
158
  commentComposer={
152
159
  <ConsoleCommentComposer
153
160
  isPr={item.isPr}
@@ -960,10 +960,12 @@ body {
960
960
  color: #6e7681;
961
961
  font-size: 0.875rem;
962
962
  cursor: pointer;
963
- opacity: 0;
963
+ opacity: 0.6;
964
+ border-color: #30363d;
964
965
  }
965
966
 
966
967
  .console-diff-row:hover .console-diff-comment-button,
968
+ .console-diff-comment-button:focus-visible,
967
969
  .console-diff-comment-button[aria-expanded="true"] {
968
970
  opacity: 1;
969
971
  border-color: #2f81f7;
@@ -1 +1 @@
1
- /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-input:#e5e5e5;--color-ring:#0a0a0a;--color-background:#fff;--color-foreground:#0a0a0a;--color-primary:#171717;--color-primary-foreground:#fafafa;--color-secondary:#f5f5f5;--color-secondary-foreground:#171717;--color-accent:#f5f5f5;--color-accent-foreground:#171717}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.relative{position:relative}.static{position:static}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.block{display:block}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-input{border-color:var(--color-input)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--color-background)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-2{padding-block:calc(var(--spacing) * 2)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-foreground{color:var(--color-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.lowercase{text-transform:lowercase}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-primary\/90:hover{background-color:#171717e6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--color-primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:#f5f5f5cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--color-secondary) 80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}}html{font-size:16px}@media(min-width:1024px){html{font-size:8px}}body{color:#e6edf3;background-color:#0d1117;margin:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.console-app{flex-direction:column;width:100%;display:flex}.console-tabbar{-webkit-overflow-scrolling:touch;background:#161b22;border-bottom:2px solid #30363d;flex-wrap:nowrap;align-items:stretch;gap:0;min-height:42px;padding:0 8px;display:flex;overflow-x:auto}.console-tab{color:#8b949e;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-2px;padding:10px 14px;font-size:.8125rem;font-weight:500;line-height:1.2;text-decoration:none;display:inline-flex}.console-tab:hover{color:#e6edf3}.console-tab[data-active=true]{color:#e6edf3;border-bottom-color:#2f81f7;font-weight:700}.console-tab-badge{text-align:center;color:#e6edf3;background:#484f58;border-radius:20px;min-width:20px;padding:1px 7px;font-size:.6875rem;font-weight:700;line-height:1.5}.console-tab-badge[data-zero=true]{color:#8b949e;background:#30363d}.console-tab-pjname{color:#8b949e;align-self:center;margin-left:auto;padding:0 8px;font-size:.7188rem}.console-tab-geninfo{color:#8b949e;align-self:center;padding:0 4px;font-size:.6875rem}.console-list{margin:0;padding:12px 18px 18px;list-style:none}.console-list-group{list-style:none}.console-item-row .console-item-icon{flex:none;margin-top:3px}.console-group-header{background:#0b0f14;border-bottom:1px solid #21262d;justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.console-storytag{align-items:center;gap:8px;font-size:.8125rem;font-weight:700;display:inline-flex}.console-story-dot{border-radius:999px;width:10px;height:10px;display:inline-block}.console-group-count{color:#8b949e;font-size:.75rem}.console-item-row{color:#e6edf3;text-align:left;cursor:pointer;background:#161b22;border:1px solid #30363d;border-radius:8px;align-items:flex-start;gap:14px;width:100%;margin-bottom:10px;padding:12px 16px;display:flex}.console-item-row:hover{background:#1a2029;border-color:#484f58}.console-item-row[data-active=true]{background:#1a2029;border-color:#4493f8}.console-item-meta{flex:1;min-width:0}.console-item-title{font-size:.9063rem;font-weight:600;display:block}.console-item-sub{color:#8b949e;margin-top:3px;font-size:.7813rem;display:block}.console-item-pill{color:#8b949e;border:1px solid #30363d;border-radius:20px;margin-right:6px;padding:1px 8px;font-size:.6875rem;display:inline-block}.console-item-createdat{color:#8b949e;cursor:help}.console-item-fields{color:#adbac7;flex-wrap:wrap;gap:4px 10px;margin-top:4px;font-size:.7188rem;display:flex}.console-item-field{word-break:break-all;align-items:baseline;gap:4px;min-width:0;display:inline-flex}.console-item-field-label{color:#6e7681;text-transform:uppercase;letter-spacing:.03em;font-size:.625rem}.console-list-message{color:#8b949e;padding:16px;font-size:.875rem}.console-list-empty{text-align:center;color:#8b949e;padding:40px;font-size:.875rem}.console-list-error,.console-comment-error,.console-files-error,.console-commits-error,.console-detail-body-error{color:#f85149}.console-detail{flex-direction:column;gap:12px;padding:16px;display:flex}.console-detail-title{align-items:center;gap:8px;margin:0;font-size:1.25rem;display:flex}.console-detail-title-text{flex:1}.console-detail-number{color:#8b949e;font-weight:400}.console-detail-closed-label{color:#a371f7;font-size:.8125rem}.console-detail-subbar{align-items:center;gap:12px;font-size:.8125rem;display:flex}.console-detail-link{color:#4493f8}.console-detail-repo{color:#8b949e;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.console-copy-url-button{color:#c9d1d9;border:1px solid #30363d;border-radius:6px;height:24px;padding:0 8px;font-size:.75rem}.console-copy-url-button:hover{color:#e6edf3;background-color:#21262d}.console-detail-pill,.console-label-chip,.console-detail-status-chip{border:1px solid #30363d;border-radius:999px;padding:2px 8px;font-size:.75rem;display:inline-block}.console-detail-labels{flex-wrap:wrap;gap:6px;display:flex}.console-detail-createdat{color:#8b949e;font-size:.75rem}.console-panel{border:1px solid #30363d;border-radius:8px;overflow:hidden}.console-panel-header{background:#161b22;justify-content:space-between;align-items:center;display:flex}.console-panel-toggle{color:#e6edf3;text-align:left;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;gap:8px;padding:6px 12px;font-size:.875rem;font-weight:600;display:flex}.console-panel-toggle:hover{background:#1a2029}.console-panel-action{padding:6px 12px}.console-panel-body{padding:12px}.console-markdown{word-break:break-word;font-size:.875rem;line-height:1.5}.console-markdown ul{margin:.5em 0;padding-left:1.5em;list-style:outside}.console-markdown ol{margin:.5em 0;padding-left:1.5em;list-style:decimal}.console-markdown li{margin:.25em 0}.console-markdown table{border-collapse:collapse;margin:.5em 0}.console-markdown th,.console-markdown td{border:1px solid #30363d;padding:4px 8px}.console-markdown th{background:#161b22}.console-markdown h1,.console-markdown h2,.console-markdown h3,.console-markdown h4,.console-markdown h5,.console-markdown h6{margin:1em 0 .5em;font-weight:700;line-height:1.25}.console-markdown h1{font-size:1.6em}.console-markdown h2{font-size:1.4em}.console-markdown h3{font-size:1.2em}.console-markdown h4{font-size:1.05em}.console-markdown h5{font-size:.95em}.console-markdown h6{color:#8b949e;font-size:.9em}.console-markdown pre{background:#161b22;border:1px solid #30363d;border-radius:6px;margin:.5em 0;padding:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem;line-height:1.45;overflow-x:auto}.console-markdown code{background:#6e768166;border-radius:4px;padding:.15em .4em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em}.console-markdown pre code{font-size:inherit;background:0 0;border-radius:0;padding:0}.console-markdown blockquote{color:#8b949e;border-left:3px solid #30363d;margin:.5em 0;padding:0 1em}.console-markdown a{color:#4493f8;text-decoration:none}.console-markdown a:hover{text-decoration:underline}.console-markdown hr{border:none;border-top:1px solid #30363d;margin:1em 0}.console-mermaid-error{color:#f85149;font-size:.8125rem}.console-comment{border-top:1px solid #21262d;padding-top:8px}.console-comment-header{color:#8b949e;gap:8px;font-size:.75rem;display:flex}.console-comment-author{color:#e6edf3;font-weight:600}.console-files,.console-commits{margin:0;padding:0;list-style:none}.console-commit{align-items:center;gap:8px;padding:4px 0;font-size:.8125rem;display:flex}.console-file{flex-direction:column;font-size:.8125rem;display:flex}.console-file-badge{text-align:center;border:1px solid;border-radius:4px;width:18px;font-size:.6875rem}.console-file-path,.console-commit-message{flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.console-file-add,.console-pr-add{color:#3fb950}.console-file-del,.console-pr-del{color:#f85149}.console-commit-sha{color:#8b949e;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.console-actionbar{z-index:100;padding:10px 16px;padding-bottom:calc(10px + env(safe-area-inset-bottom));background:#161b22;border-top:2px solid #30363d;position:sticky;bottom:0}.console-operation-bar{flex-direction:column;gap:8px;width:100%;display:flex}.console-op-group{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.console-op-group-review{gap:10px}.console-op-group-stories{max-height:50vh;overflow-y:auto}.console-op-button{color:#e6edf3;white-space:nowrap;cursor:pointer;background:#21262d;border:1px solid #30363d;border-radius:6px;padding:7px 16px;font-size:.8125rem;font-weight:600}.console-op-button:hover{border-color:#484f58}.console-op-button-approve{color:#fff;background:#238636;border-color:#2ea043}.console-op-button-reject{color:#ffd166;background:#7d5000;border-color:#a06800}.console-op-button-wrong{color:#f85149;background:#3a1518;border-color:#f85149}.console-op-button-unneeded{color:#aab0b8;background:#2a2d31;border-color:#6e7681}.console-op-button-snooze{color:#79c0ff;background:#1c2b4a;border-color:#4493f8}.console-pr-section{border:1px solid #30363d;border-radius:8px;flex-direction:column;gap:10px;padding:12px;display:flex}.console-pr-statbar{color:#8b949e;gap:12px;font-size:.75rem;display:flex}.console-detail-screen{padding-bottom:8px}.console-panel-open-link{color:#4493f8;font-size:.8125rem;font-weight:400}.console-composer{margin-top:4px}.console-composer-toggle{color:#8b949e;cursor:pointer;background:0 0;border:none;padding:2px 0;font-size:.7813rem}.console-composer-toggle:hover{color:#e6edf3}.console-composer-posted{flex-direction:column;gap:8px;margin-top:8px;display:flex}.console-composer-form{margin-top:8px}.console-composer-input{box-sizing:border-box;color:#e6edf3;width:100%;font:inherit;resize:vertical;background:#21262d;border:1px solid #30363d;border-radius:6px;padding:8px;font-size:.875rem}.console-composer-row{align-items:center;gap:8px;margin-top:6px;display:flex}.console-composer-submit{color:#fff;cursor:pointer;background:#238636;border:1px solid #2ea043;border-radius:6px;padding:7px 16px;font-size:.8125rem;font-weight:600}.console-composer-submit:disabled{opacity:.6;cursor:default}.console-composer-status{color:#8b949e;font-size:.75rem}.console-composer-error{color:#f85149}.console-undo-toast{z-index:9998;white-space:nowrap;border-radius:10px;align-items:center;gap:12px;max-width:92vw;padding:12px 18px;font-size:.8438rem;display:flex;position:fixed;top:12px;left:50%;transform:translate(-50%);box-shadow:0 4px 20px #0009}.console-undo-toast-green{color:#3fb950;background:#0d3320;border:1px solid #2ea043}.console-undo-toast-amber{color:#ffd166;background:#3a2800;border:1px solid #a06800}.console-undo-toast-red{color:#f85149;background:#3a1518;border:1px solid #da3633}.console-undo-toast-gray{color:#aab0b8;background:#2a2d31;border:1px solid #6e7681}.console-undo-toast-blue{color:#79c0ff;background:#0d1f40;border:1px solid #4493f8}.console-undo-toast-error{color:#f85149;background:#3a1518;border:1px solid #f85149}.console-undo-toast-message{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.console-undo-toast-undo{cursor:pointer;color:inherit;background:#ffffff1f;border:none;border-radius:6px;flex:none;padding:4px 12px;font-size:.8125rem;font-weight:700}.console-undo-toast-undo:hover{background:#ffffff38}.console-undo-toast-countdown{opacity:.7;flex:none;font-size:.6875rem}.console-undo-toast-bar{opacity:.5;background:currentColor;border-radius:0 0 10px 10px;height:3px;transition:width .1s linear;position:absolute;bottom:0;left:0}.console-file-row{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:4px 0;font-size:.8125rem;display:flex}.console-file-row:hover{background:#1a2029}.console-file-caret{color:#8b949e;flex:none;width:1em}.console-file-diff{border-collapse:collapse;width:100%;margin:4px 0 8px;font:.8125rem/1.6 ui-monospace,SFMono-Regular,Menlo,monospace}.console-file-diff td{white-space:pre-wrap;word-break:break-word;vertical-align:top;padding:0 10px}.console-diff-ln{text-align:right;color:#6e7681;-webkit-user-select:none;user-select:none;white-space:nowrap;border-right:1px solid #30363d;width:1%;padding:0 8px}.console-file-diff td.console-diff-ln{white-space:nowrap;word-break:normal;overflow-wrap:normal}.console-diff-add td{background:#2ea04326}.console-diff-add .console-diff-code{color:#aff5b4}.console-diff-del td{background:#f8514926}.console-diff-del .console-diff-code{color:#ffdcd7}.console-diff-hunk td{color:#79c0ff;background:#161b22}.console-diff-ctx .console-diff-code{color:#c9d1d9}.console-file-diff-empty{color:#8b949e;padding:8px 14px;font-size:.75rem}.console-diff-comment-cell{text-align:center;-webkit-user-select:none;user-select:none;width:1%;padding:0 2px}.console-diff-comment-button{color:#6e7681;cursor:pointer;opacity:0;background:0 0;border:1px solid #0000;border-radius:4px;width:18px;height:18px;padding:0;font-size:.875rem;line-height:16px}.console-diff-row:hover .console-diff-comment-button,.console-diff-comment-button[aria-expanded=true]{opacity:1;color:#fff;background:#1f6feb;border-color:#2f81f7}.console-diff-composer-row td{background:#0d1117;padding:6px 10px}.console-diff-composer{background:#161b22;border:1px solid #30363d;border-radius:6px;flex-direction:column;gap:6px;padding:8px;display:flex}.console-diff-composer-anchor{color:#8b949e;font-size:.6875rem}.console-diff-composer-input{resize:vertical;color:#c9d1d9;width:100%;font:inherit;background:#0d1117;border:1px solid #30363d;border-radius:6px;padding:6px 8px}.console-diff-composer-controls{align-items:center;gap:8px;display:flex}.console-diff-composer-submit{color:#fff;cursor:pointer;background:#238636;border:1px solid #238636;border-radius:6px;padding:4px 12px}.console-diff-composer-submit:disabled{opacity:.6;cursor:default}.console-diff-composer-cancel{color:#c9d1d9;cursor:pointer;background:0 0;border:1px solid #30363d;border-radius:6px;padding:4px 12px}.console-diff-composer-status{color:#8b949e;font-size:.75rem}.console-diff-composer-error{color:#ff7b72}.console-diff-composer-posted{color:#3fb950;margin:0;font-size:.75rem}.console-pr-header{flex-wrap:wrap;align-items:center;gap:10px;padding-top:4px;display:flex}.console-pr-section-title{color:#e6edf3;font-size:.9375rem;font-weight:600}.console-pr-section-state{color:#8b949e;border:1px solid #6e7681;border-radius:999px;padding:1px 8px;font-size:.6875rem}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-input:#e5e5e5;--color-ring:#0a0a0a;--color-background:#fff;--color-foreground:#0a0a0a;--color-primary:#171717;--color-primary-foreground:#fafafa;--color-secondary:#f5f5f5;--color-secondary-foreground:#171717;--color-accent:#f5f5f5;--color-accent-foreground:#171717}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.relative{position:relative}.static{position:static}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.block{display:block}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-input{border-color:var(--color-input)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--color-background)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-2{padding-block:calc(var(--spacing) * 2)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-foreground{color:var(--color-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.lowercase{text-transform:lowercase}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-primary\/90:hover{background-color:#171717e6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--color-primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:#f5f5f5cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--color-secondary) 80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}}html{font-size:16px}@media(min-width:1024px){html{font-size:8px}}body{color:#e6edf3;background-color:#0d1117;margin:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.console-app{flex-direction:column;width:100%;display:flex}.console-tabbar{-webkit-overflow-scrolling:touch;background:#161b22;border-bottom:2px solid #30363d;flex-wrap:nowrap;align-items:stretch;gap:0;min-height:42px;padding:0 8px;display:flex;overflow-x:auto}.console-tab{color:#8b949e;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-2px;padding:10px 14px;font-size:.8125rem;font-weight:500;line-height:1.2;text-decoration:none;display:inline-flex}.console-tab:hover{color:#e6edf3}.console-tab[data-active=true]{color:#e6edf3;border-bottom-color:#2f81f7;font-weight:700}.console-tab-badge{text-align:center;color:#e6edf3;background:#484f58;border-radius:20px;min-width:20px;padding:1px 7px;font-size:.6875rem;font-weight:700;line-height:1.5}.console-tab-badge[data-zero=true]{color:#8b949e;background:#30363d}.console-tab-pjname{color:#8b949e;align-self:center;margin-left:auto;padding:0 8px;font-size:.7188rem}.console-tab-geninfo{color:#8b949e;align-self:center;padding:0 4px;font-size:.6875rem}.console-list{margin:0;padding:12px 18px 18px;list-style:none}.console-list-group{list-style:none}.console-item-row .console-item-icon{flex:none;margin-top:3px}.console-group-header{background:#0b0f14;border-bottom:1px solid #21262d;justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.console-storytag{align-items:center;gap:8px;font-size:.8125rem;font-weight:700;display:inline-flex}.console-story-dot{border-radius:999px;width:10px;height:10px;display:inline-block}.console-group-count{color:#8b949e;font-size:.75rem}.console-item-row{color:#e6edf3;text-align:left;cursor:pointer;background:#161b22;border:1px solid #30363d;border-radius:8px;align-items:flex-start;gap:14px;width:100%;margin-bottom:10px;padding:12px 16px;display:flex}.console-item-row:hover{background:#1a2029;border-color:#484f58}.console-item-row[data-active=true]{background:#1a2029;border-color:#4493f8}.console-item-meta{flex:1;min-width:0}.console-item-title{font-size:.9063rem;font-weight:600;display:block}.console-item-sub{color:#8b949e;margin-top:3px;font-size:.7813rem;display:block}.console-item-pill{color:#8b949e;border:1px solid #30363d;border-radius:20px;margin-right:6px;padding:1px 8px;font-size:.6875rem;display:inline-block}.console-item-createdat{color:#8b949e;cursor:help}.console-item-fields{color:#adbac7;flex-wrap:wrap;gap:4px 10px;margin-top:4px;font-size:.7188rem;display:flex}.console-item-field{word-break:break-all;align-items:baseline;gap:4px;min-width:0;display:inline-flex}.console-item-field-label{color:#6e7681;text-transform:uppercase;letter-spacing:.03em;font-size:.625rem}.console-list-message{color:#8b949e;padding:16px;font-size:.875rem}.console-list-empty{text-align:center;color:#8b949e;padding:40px;font-size:.875rem}.console-list-error,.console-comment-error,.console-files-error,.console-commits-error,.console-detail-body-error{color:#f85149}.console-detail{flex-direction:column;gap:12px;padding:16px;display:flex}.console-detail-title{align-items:center;gap:8px;margin:0;font-size:1.25rem;display:flex}.console-detail-title-text{flex:1}.console-detail-number{color:#8b949e;font-weight:400}.console-detail-closed-label{color:#a371f7;font-size:.8125rem}.console-detail-subbar{align-items:center;gap:12px;font-size:.8125rem;display:flex}.console-detail-link{color:#4493f8}.console-detail-repo{color:#8b949e;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.console-copy-url-button{color:#c9d1d9;border:1px solid #30363d;border-radius:6px;height:24px;padding:0 8px;font-size:.75rem}.console-copy-url-button:hover{color:#e6edf3;background-color:#21262d}.console-detail-pill,.console-label-chip,.console-detail-status-chip{border:1px solid #30363d;border-radius:999px;padding:2px 8px;font-size:.75rem;display:inline-block}.console-detail-labels{flex-wrap:wrap;gap:6px;display:flex}.console-detail-createdat{color:#8b949e;font-size:.75rem}.console-panel{border:1px solid #30363d;border-radius:8px;overflow:hidden}.console-panel-header{background:#161b22;justify-content:space-between;align-items:center;display:flex}.console-panel-toggle{color:#e6edf3;text-align:left;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;gap:8px;padding:6px 12px;font-size:.875rem;font-weight:600;display:flex}.console-panel-toggle:hover{background:#1a2029}.console-panel-action{padding:6px 12px}.console-panel-body{padding:12px}.console-markdown{word-break:break-word;font-size:.875rem;line-height:1.5}.console-markdown ul{margin:.5em 0;padding-left:1.5em;list-style:outside}.console-markdown ol{margin:.5em 0;padding-left:1.5em;list-style:decimal}.console-markdown li{margin:.25em 0}.console-markdown table{border-collapse:collapse;margin:.5em 0}.console-markdown th,.console-markdown td{border:1px solid #30363d;padding:4px 8px}.console-markdown th{background:#161b22}.console-markdown h1,.console-markdown h2,.console-markdown h3,.console-markdown h4,.console-markdown h5,.console-markdown h6{margin:1em 0 .5em;font-weight:700;line-height:1.25}.console-markdown h1{font-size:1.6em}.console-markdown h2{font-size:1.4em}.console-markdown h3{font-size:1.2em}.console-markdown h4{font-size:1.05em}.console-markdown h5{font-size:.95em}.console-markdown h6{color:#8b949e;font-size:.9em}.console-markdown pre{background:#161b22;border:1px solid #30363d;border-radius:6px;margin:.5em 0;padding:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem;line-height:1.45;overflow-x:auto}.console-markdown code{background:#6e768166;border-radius:4px;padding:.15em .4em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em}.console-markdown pre code{font-size:inherit;background:0 0;border-radius:0;padding:0}.console-markdown blockquote{color:#8b949e;border-left:3px solid #30363d;margin:.5em 0;padding:0 1em}.console-markdown a{color:#4493f8;text-decoration:none}.console-markdown a:hover{text-decoration:underline}.console-markdown hr{border:none;border-top:1px solid #30363d;margin:1em 0}.console-mermaid-error{color:#f85149;font-size:.8125rem}.console-comment{border-top:1px solid #21262d;padding-top:8px}.console-comment-header{color:#8b949e;gap:8px;font-size:.75rem;display:flex}.console-comment-author{color:#e6edf3;font-weight:600}.console-files,.console-commits{margin:0;padding:0;list-style:none}.console-commit{align-items:center;gap:8px;padding:4px 0;font-size:.8125rem;display:flex}.console-file{flex-direction:column;font-size:.8125rem;display:flex}.console-file-badge{text-align:center;border:1px solid;border-radius:4px;width:18px;font-size:.6875rem}.console-file-path,.console-commit-message{flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.console-file-add,.console-pr-add{color:#3fb950}.console-file-del,.console-pr-del{color:#f85149}.console-commit-sha{color:#8b949e;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.console-actionbar{z-index:100;padding:10px 16px;padding-bottom:calc(10px + env(safe-area-inset-bottom));background:#161b22;border-top:2px solid #30363d;position:sticky;bottom:0}.console-operation-bar{flex-direction:column;gap:8px;width:100%;display:flex}.console-op-group{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.console-op-group-review{gap:10px}.console-op-group-stories{max-height:50vh;overflow-y:auto}.console-op-button{color:#e6edf3;white-space:nowrap;cursor:pointer;background:#21262d;border:1px solid #30363d;border-radius:6px;padding:7px 16px;font-size:.8125rem;font-weight:600}.console-op-button:hover{border-color:#484f58}.console-op-button-approve{color:#fff;background:#238636;border-color:#2ea043}.console-op-button-reject{color:#ffd166;background:#7d5000;border-color:#a06800}.console-op-button-wrong{color:#f85149;background:#3a1518;border-color:#f85149}.console-op-button-unneeded{color:#aab0b8;background:#2a2d31;border-color:#6e7681}.console-op-button-snooze{color:#79c0ff;background:#1c2b4a;border-color:#4493f8}.console-pr-section{border:1px solid #30363d;border-radius:8px;flex-direction:column;gap:10px;padding:12px;display:flex}.console-pr-statbar{color:#8b949e;gap:12px;font-size:.75rem;display:flex}.console-detail-screen{padding-bottom:8px}.console-panel-open-link{color:#4493f8;font-size:.8125rem;font-weight:400}.console-composer{margin-top:4px}.console-composer-toggle{color:#8b949e;cursor:pointer;background:0 0;border:none;padding:2px 0;font-size:.7813rem}.console-composer-toggle:hover{color:#e6edf3}.console-composer-posted{flex-direction:column;gap:8px;margin-top:8px;display:flex}.console-composer-form{margin-top:8px}.console-composer-input{box-sizing:border-box;color:#e6edf3;width:100%;font:inherit;resize:vertical;background:#21262d;border:1px solid #30363d;border-radius:6px;padding:8px;font-size:.875rem}.console-composer-row{align-items:center;gap:8px;margin-top:6px;display:flex}.console-composer-submit{color:#fff;cursor:pointer;background:#238636;border:1px solid #2ea043;border-radius:6px;padding:7px 16px;font-size:.8125rem;font-weight:600}.console-composer-submit:disabled{opacity:.6;cursor:default}.console-composer-status{color:#8b949e;font-size:.75rem}.console-composer-error{color:#f85149}.console-undo-toast{z-index:9998;white-space:nowrap;border-radius:10px;align-items:center;gap:12px;max-width:92vw;padding:12px 18px;font-size:.8438rem;display:flex;position:fixed;top:12px;left:50%;transform:translate(-50%);box-shadow:0 4px 20px #0009}.console-undo-toast-green{color:#3fb950;background:#0d3320;border:1px solid #2ea043}.console-undo-toast-amber{color:#ffd166;background:#3a2800;border:1px solid #a06800}.console-undo-toast-red{color:#f85149;background:#3a1518;border:1px solid #da3633}.console-undo-toast-gray{color:#aab0b8;background:#2a2d31;border:1px solid #6e7681}.console-undo-toast-blue{color:#79c0ff;background:#0d1f40;border:1px solid #4493f8}.console-undo-toast-error{color:#f85149;background:#3a1518;border:1px solid #f85149}.console-undo-toast-message{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.console-undo-toast-undo{cursor:pointer;color:inherit;background:#ffffff1f;border:none;border-radius:6px;flex:none;padding:4px 12px;font-size:.8125rem;font-weight:700}.console-undo-toast-undo:hover{background:#ffffff38}.console-undo-toast-countdown{opacity:.7;flex:none;font-size:.6875rem}.console-undo-toast-bar{opacity:.5;background:currentColor;border-radius:0 0 10px 10px;height:3px;transition:width .1s linear;position:absolute;bottom:0;left:0}.console-file-row{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:4px 0;font-size:.8125rem;display:flex}.console-file-row:hover{background:#1a2029}.console-file-caret{color:#8b949e;flex:none;width:1em}.console-file-diff{border-collapse:collapse;width:100%;margin:4px 0 8px;font:.8125rem/1.6 ui-monospace,SFMono-Regular,Menlo,monospace}.console-file-diff td{white-space:pre-wrap;word-break:break-word;vertical-align:top;padding:0 10px}.console-diff-ln{text-align:right;color:#6e7681;-webkit-user-select:none;user-select:none;white-space:nowrap;border-right:1px solid #30363d;width:1%;padding:0 8px}.console-file-diff td.console-diff-ln{white-space:nowrap;word-break:normal;overflow-wrap:normal}.console-diff-add td{background:#2ea04326}.console-diff-add .console-diff-code{color:#aff5b4}.console-diff-del td{background:#f8514926}.console-diff-del .console-diff-code{color:#ffdcd7}.console-diff-hunk td{color:#79c0ff;background:#161b22}.console-diff-ctx .console-diff-code{color:#c9d1d9}.console-file-diff-empty{color:#8b949e;padding:8px 14px;font-size:.75rem}.console-diff-comment-cell{text-align:center;-webkit-user-select:none;user-select:none;width:1%;padding:0 2px}.console-diff-comment-button{color:#6e7681;cursor:pointer;opacity:.6;background:0 0;border:1px solid #30363d;border-radius:4px;width:18px;height:18px;padding:0;font-size:.875rem;line-height:16px}.console-diff-row:hover .console-diff-comment-button,.console-diff-comment-button:focus-visible,.console-diff-comment-button[aria-expanded=true]{opacity:1;color:#fff;background:#1f6feb;border-color:#2f81f7}.console-diff-composer-row td{background:#0d1117;padding:6px 10px}.console-diff-composer{background:#161b22;border:1px solid #30363d;border-radius:6px;flex-direction:column;gap:6px;padding:8px;display:flex}.console-diff-composer-anchor{color:#8b949e;font-size:.6875rem}.console-diff-composer-input{resize:vertical;color:#c9d1d9;width:100%;font:inherit;background:#0d1117;border:1px solid #30363d;border-radius:6px;padding:6px 8px}.console-diff-composer-controls{align-items:center;gap:8px;display:flex}.console-diff-composer-submit{color:#fff;cursor:pointer;background:#238636;border:1px solid #238636;border-radius:6px;padding:4px 12px}.console-diff-composer-submit:disabled{opacity:.6;cursor:default}.console-diff-composer-cancel{color:#c9d1d9;cursor:pointer;background:0 0;border:1px solid #30363d;border-radius:6px;padding:4px 12px}.console-diff-composer-status{color:#8b949e;font-size:.75rem}.console-diff-composer-error{color:#ff7b72}.console-diff-composer-posted{color:#3fb950;margin:0;font-size:.75rem}.console-pr-header{flex-wrap:wrap;align-items:center;gap:10px;padding-top:4px;display:flex}.console-pr-section-title{color:#e6edf3;font-size:.9375rem;font-weight:600}.console-pr-section-state{color:#8b949e;border:1px solid #6e7681;border-radius:999px;padding:1px 8px;font-size:.6875rem}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}