github-issue-tower-defence-management 1.91.4 → 1.91.5

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 (18) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/bin/adapter/entry-points/console/ui-dist/assets/index-BJixkRxv.css +1 -0
  3. package/bin/adapter/entry-points/console/ui-dist/assets/{index-D04N09aG.js → index-BSNMvjcB.js} +30 -30
  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/src/features/console/components/layout/ConsoleTabList.stories.tsx +4 -4
  7. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +24 -9
  8. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.tsx +4 -1
  9. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +16 -8
  10. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +0 -2
  11. package/src/adapter/entry-points/console/ui-dist/assets/index-BJixkRxv.css +1 -0
  12. package/src/adapter/entry-points/console/ui-dist/assets/{index-D04N09aG.js → index-BSNMvjcB.js} +30 -30
  13. package/src/adapter/entry-points/console/ui-dist/index.html +2 -2
  14. package/bin/adapter/entry-points/console/ui-dist/assets/index-0IuY3q4G.css +0 -1
  15. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleProjectSummary.stories.tsx +0 -29
  16. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleProjectSummary.test.tsx +0 -14
  17. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleProjectSummary.tsx +0 -16
  18. package/src/adapter/entry-points/console/ui-dist/assets/index-0IuY3q4G.css +0 -1
@@ -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-D04N09aG.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-0IuY3q4G.css">
7
+ <script type="module" crossorigin src="/assets/index-BSNMvjcB.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-BJixkRxv.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.91.4",
3
+ "version": "1.91.5",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -33,7 +33,7 @@ export const AllTabsWithCounts: Story = {
33
33
  },
34
34
  };
35
35
 
36
- export const ZeroCountTabsStillShown: Story = {
36
+ export const ZeroCountTabsHidden: Story = {
37
37
  args: {
38
38
  activeTab: 'prs',
39
39
  counts: {
@@ -46,15 +46,15 @@ export const ZeroCountTabsStillShown: Story = {
46
46
  },
47
47
  };
48
48
 
49
- export const ZeroCountActiveTab: Story = {
49
+ export const ZeroCountActiveTabStaysVisible: Story = {
50
50
  args: {
51
51
  activeTab: 'failed-preparation',
52
52
  counts: {
53
53
  prs: 35,
54
- triage: 132,
54
+ triage: 0,
55
55
  unread: 18,
56
56
  'failed-preparation': 0,
57
- 'todo-by-human': 66,
57
+ 'todo-by-human': 0,
58
58
  },
59
59
  },
60
60
  };
@@ -18,26 +18,41 @@ const baseProps = {
18
18
  };
19
19
 
20
20
  describe('ConsoleTabList', () => {
21
- it('shows every tab including zero-count tabs', () => {
21
+ it('hides zero-count tabs while showing non-zero tabs', () => {
22
22
  const { queryByText } = render(
23
23
  <ConsoleTabList {...baseProps} activeTab="prs" counts={counts} />,
24
24
  );
25
25
  expect(queryByText('Awaiting Quality Check')).not.toBeNull();
26
- expect(queryByText('Triage')).not.toBeNull();
27
26
  expect(queryByText('Unread')).not.toBeNull();
28
- expect(queryByText('Failed Preparation')).not.toBeNull();
29
27
  expect(queryByText('Todo by human')).not.toBeNull();
28
+ expect(queryByText('Triage')).toBeNull();
29
+ expect(queryByText('Failed Preparation')).toBeNull();
30
30
  });
31
31
 
32
- it('marks the active tab and renders zero badges with the zero attribute', () => {
33
- const { getByText } = render(
34
- <ConsoleTabList {...baseProps} activeTab="prs" counts={counts} />,
32
+ it('keeps the active tab visible even when its count is zero', () => {
33
+ const { getByText, queryByText } = render(
34
+ <ConsoleTabList
35
+ {...baseProps}
36
+ activeTab="failed-preparation"
37
+ counts={counts}
38
+ />,
35
39
  );
36
- const triageBadge = getByText('Triage')
40
+ const activeBadge = getByText('Failed Preparation')
37
41
  .closest('a')
38
42
  ?.querySelector('.console-tab-badge');
39
- expect(triageBadge).toHaveAttribute('data-zero', 'true');
40
- expect(triageBadge?.textContent).toBe('0');
43
+ expect(activeBadge).toHaveAttribute('data-zero', 'true');
44
+ expect(activeBadge?.textContent).toBe('0');
45
+ expect(getByText('Failed Preparation').closest('a')).toHaveAttribute(
46
+ 'aria-current',
47
+ 'page',
48
+ );
49
+ expect(queryByText('Triage')).toBeNull();
50
+ });
51
+
52
+ it('marks the active tab as the current page', () => {
53
+ const { getByText } = render(
54
+ <ConsoleTabList {...baseProps} activeTab="prs" counts={counts} />,
55
+ );
41
56
  expect(getByText('Awaiting Quality Check').closest('a')).toHaveAttribute(
42
57
  'aria-current',
43
58
  'page',
@@ -29,7 +29,10 @@ export const ConsoleTabList = ({
29
29
  return (
30
30
  <>
31
31
  <nav aria-label="Console tabs" className="console-tabbar">
32
- {CONSOLE_TABS.map((tab) => {
32
+ {CONSOLE_TABS.filter((tab) => {
33
+ const count = counts[tab.name] ?? 0;
34
+ return count > 0 || tab.name === activeTab;
35
+ }).map((tab) => {
33
36
  const count = counts[tab.name] ?? 0;
34
37
  const isActive = tab.name === activeTab;
35
38
  return (
@@ -127,19 +127,27 @@ describe('ConsolePage', () => {
127
127
  ).toBeInTheDocument();
128
128
  });
129
129
 
130
- const prsTabLink = queryByText('Awaiting Quality Check')?.closest('a');
131
- const prsBadge =
132
- prsTabLink?.querySelector('.console-tab-badge')?.textContent ?? '0';
133
- expect(prsBadge).toBe('0');
130
+ expect(queryByText('Awaiting Quality Check')).toBeNull();
134
131
  });
135
132
 
136
- it('shows every tab even when its count is zero', async () => {
133
+ it('hides zero-count tabs but keeps non-zero tabs', async () => {
137
134
  const { getByText, queryByText } = render(<ConsolePage />);
138
135
  await waitFor(() => {
139
136
  expect(getByText('Add serveConsole subcommand')).toBeInTheDocument();
140
137
  });
141
- expect(queryByText('Triage')).not.toBeNull();
142
- expect(queryByText('Failed Preparation')).not.toBeNull();
143
- expect(queryByText('Todo by human')).not.toBeNull();
138
+ expect(queryByText('Awaiting Quality Check')).not.toBeNull();
139
+ expect(queryByText('Unread')).not.toBeNull();
140
+ expect(queryByText('Triage')).toBeNull();
141
+ expect(queryByText('Failed Preparation')).toBeNull();
142
+ expect(queryByText('Todo by human')).toBeNull();
143
+ });
144
+
145
+ it('does not render the project header bar above the tab bar', async () => {
146
+ const { getByText, queryByText } = render(<ConsolePage />);
147
+ await waitFor(() => {
148
+ expect(getByText('Add serveConsole subcommand')).toBeInTheDocument();
149
+ });
150
+ expect(queryByText('TDPM Console')).toBeNull();
151
+ expect(queryByText('project: umino')).toBeNull();
144
152
  });
145
153
  });
@@ -1,5 +1,4 @@
1
1
  import { useMemo } from 'react';
2
- import { ConsoleProjectSummary } from '../components/layout/ConsoleProjectSummary';
3
2
  import { ConsoleTabList } from '../components/layout/ConsoleTabList';
4
3
  import { ConsoleItemList } from '../components/list/ConsoleItemList';
5
4
  import { useConsoleCaches } from '../hooks/useConsoleCaches';
@@ -102,7 +101,6 @@ export const ConsolePage = () => {
102
101
 
103
102
  return (
104
103
  <main className="console-app">
105
- <ConsoleProjectSummary pjcode={pjcode} />
106
104
  <ConsoleTabList
107
105
  activeTab={activeTab}
108
106
  counts={counts}
@@ -0,0 +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}}.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}}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;max-width:920px;margin:0 auto;display:flex}.console-tabbar{background:#161b22;border-bottom:2px solid #30363d;align-items:stretch;gap:0;min-height:42px;padding:0 8px;display:flex}.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:13px;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:11px;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:11.5px}.console-tab-geninfo{color:#8b949e;align-self:center;padding:0 4px;font-size:11px}.console-tab-count-heading{color:#8b949e;margin:0;padding:12px 18px 0;font-size:13px}.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:13px;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:12px}.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:14.5px;font-weight:600;display:block}.console-item-sub{color:#8b949e;margin-top:3px;font-size:12.5px;display:block}.console-item-pill{color:#8b949e;border:1px solid #30363d;border-radius:20px;margin-right:6px;padding:1px 8px;font-size:11px;display:inline-block}.console-item-createdat{color:#8b949e;cursor:help}.console-list-message{color:#8b949e;padding:16px;font-size:14px}.console-list-empty{text-align:center;color:#8b949e;padding:40px;font-size:14px}.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:20px;display:flex}.console-detail-title-text{flex:1}.console-detail-number{color:#8b949e;font-weight:400}.console-detail-closed-label{color:#a371f7;font-size:13px}.console-detail-subbar{align-items:center;gap:12px;font-size:13px;display:flex}.console-detail-link{color:#4493f8}.console-detail-repo{color:#8b949e;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.console-detail-pill,.console-label-chip,.console-detail-status-chip{border:1px solid #30363d;border-radius:999px;padding:2px 8px;font-size:12px;display:inline-block}.console-detail-labels{flex-wrap:wrap;gap:6px;display:flex}.console-detail-createdat{color:#8b949e;font-size:12px}.console-panel{border:1px solid #30363d;border-radius:8px;overflow:hidden}.console-panel-header{background:#161b22;justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.console-panel-toggle{color:#e6edf3;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;font-size:14px;font-weight:600;display:inline-flex}.console-panel-body{padding:12px}.console-markdown{word-break:break-word;font-size:14px;line-height:1.5}.console-mermaid-error{color:#f85149;font-size:13px}.console-comment{border-top:1px solid #21262d;padding-top:8px}.console-comment-header{color:#8b949e;gap:8px;font-size:12px;display:flex}.console-comment-author{color:#e6edf3;font-weight:600}.console-files,.console-commits{margin:0;padding:0;list-style:none}.console-file,.console-commit{align-items:center;gap:8px;padding:4px 0;font-size:13px;display:flex}.console-file-badge{text-align:center;border:1px solid;border-radius:4px;width:18px;font-size:11px}.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;background:#161b22;border-top:2px solid #30363d;padding:10px 16px;position:fixed;bottom:0;left:0;right:0}.console-operation-bar{flex-direction:column;gap:8px;max-width:920px;margin:0 auto;display:flex}.console-op-group{flex-wrap:wrap;gap:8px;display:flex}.console-op-group-review{justify-content:flex-end;align-items:center;gap:10px}.console-op-button{color:#e6edf3;white-space:nowrap;cursor:pointer;background:#21262d;border:1px solid #30363d;border-radius:6px;padding:7px 16px;font-size:13px;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:12px;display:flex}.console-detail-screen{padding-bottom:140px}.console-panel-open-link{color:#4493f8;font-size:13px;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:12.5px}.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:14px}.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:13px;font-weight:600}.console-composer-submit:disabled{opacity:.6;cursor:default}.console-composer-status{color:#8b949e;font-size:12px}.console-composer-error{color:#f85149}@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}