|
1 | | -/* Conductor widget — lives inside GitHub's PR right sidebar above Reviewers. |
2 | | - We piggy-back on GitHub's `.discussion-sidebar-item` for padding / border |
3 | | - alignment, then layer our own brand colors on top so the widget reads as |
4 | | - a related-but-distinct extension surface. */ |
| 1 | +/* Conductor sidebar widget. |
| 2 | + Lives inside GitHub's PR right sidebar above Reviewers. Visual goal: feels |
| 3 | + like a sibling of the native sections (Reviewers, Assignees, Labels), not |
| 4 | + a marketing CTA. Uses GitHub's CSS custom-property tokens so it adapts to |
| 5 | + light/dark themes automatically. */ |
5 | 6 |
|
6 | 7 | #conductor-pr-widget.conductor-widget { |
7 | | - padding-top: 12px; |
| 8 | + padding-top: 16px; |
8 | 9 | padding-bottom: 16px; |
9 | 10 | } |
10 | 11 |
|
11 | 12 | #conductor-pr-widget .conductor-widget-heading { |
| 13 | + display: flex; |
| 14 | + align-items: center; |
| 15 | + justify-content: space-between; |
| 16 | + gap: 8px; |
12 | 17 | margin: 0 0 8px; |
| 18 | + padding: 0; |
13 | 19 | font-size: 12px; |
14 | 20 | font-weight: 600; |
| 21 | + color: var(--fgColor-default, var(--color-fg-default, #1f2328)); |
15 | 22 | text-transform: none; |
16 | 23 | letter-spacing: 0; |
17 | | - color: var(--fgColor-muted, var(--color-fg-muted, #57606a)); |
18 | | - display: flex; |
| 24 | +} |
| 25 | + |
| 26 | +#conductor-pr-widget .conductor-settings-link { |
| 27 | + display: inline-flex; |
19 | 28 | align-items: center; |
20 | | - gap: 6px; |
| 29 | + justify-content: center; |
| 30 | + width: 22px; |
| 31 | + height: 22px; |
| 32 | + padding: 0; |
| 33 | + margin: 0; |
| 34 | + background: transparent; |
| 35 | + border: none; |
| 36 | + border-radius: 4px; |
| 37 | + color: var(--fgColor-muted, var(--color-fg-muted, #59636e)); |
| 38 | + cursor: pointer; |
| 39 | + transition: background-color 0.1s ease; |
21 | 40 | } |
22 | 41 |
|
23 | | -#conductor-pr-widget .conductor-widget-heading::before { |
24 | | - content: ''; |
25 | | - display: inline-block; |
26 | | - width: 12px; |
27 | | - height: 12px; |
28 | | - background-color: #5b6cff; |
29 | | - -webkit-mask-image: radial-gradient(circle at 50% 50%, #000 60%, transparent 62%); |
30 | | - mask-image: radial-gradient(circle at 50% 50%, #000 60%, transparent 62%); |
31 | | - border-radius: 2px; |
| 42 | +#conductor-pr-widget .conductor-settings-link:hover { |
| 43 | + background: var(--bgColor-neutral-muted, var(--color-neutral-muted, rgba(175, 184, 193, 0.2))); |
| 44 | + color: var(--fgColor-default, var(--color-fg-default, #1f2328)); |
32 | 45 | } |
33 | 46 |
|
34 | | -#conductor-pr-widget .conductor-widget-row { |
| 47 | +#conductor-pr-widget .conductor-split { |
35 | 48 | display: flex; |
36 | 49 | align-items: stretch; |
37 | | - gap: 6px; |
| 50 | + width: 100%; |
| 51 | + border-radius: 6px; |
| 52 | + overflow: visible; |
| 53 | + position: relative; |
38 | 54 | } |
39 | 55 |
|
40 | | -#conductor-pr-widget .conductor-pr-button { |
| 56 | +#conductor-pr-widget .conductor-primary { |
41 | 57 | flex: 1 1 auto; |
42 | 58 | display: inline-flex; |
43 | 59 | align-items: center; |
44 | 60 | justify-content: center; |
45 | 61 | gap: 6px; |
46 | | - font-weight: 600; |
| 62 | + min-width: 0; |
| 63 | + padding: 5px 12px; |
| 64 | + font: inherit; |
| 65 | + font-size: 12px; |
| 66 | + font-weight: 500; |
| 67 | + line-height: 20px; |
| 68 | + white-space: nowrap; |
47 | 69 | color: #ffffff; |
48 | | - background: linear-gradient(180deg, #5b6cff 0%, #4453e3 100%); |
49 | | - border: 1px solid rgba(0, 0, 0, 0.15); |
50 | | - border-radius: 6px; |
51 | | - padding: 6px 12px; |
| 70 | + background: #5b6cff; |
| 71 | + border: 1px solid #4453e3; |
| 72 | + border-right-color: rgba(0, 0, 0, 0.25); |
| 73 | + border-radius: 6px 0 0 6px; |
52 | 74 | cursor: pointer; |
53 | | - line-height: 20px; |
54 | | - font-size: 12px; |
55 | | - text-align: center; |
56 | 75 | transition: |
57 | | - filter 0.12s ease, |
58 | | - transform 0.05s ease; |
| 76 | + background-color 0.1s ease, |
| 77 | + box-shadow 0.1s ease; |
59 | 78 | } |
60 | 79 |
|
61 | | -#conductor-pr-widget .conductor-pr-button:hover { |
62 | | - filter: brightness(1.08); |
| 80 | +#conductor-pr-widget .conductor-split:has(.conductor-menu) .conductor-primary { |
| 81 | + border-radius: 6px 0 0 6px; |
63 | 82 | } |
64 | 83 |
|
65 | | -#conductor-pr-widget .conductor-pr-button:active { |
66 | | - transform: translateY(1px); |
| 84 | +#conductor-pr-widget .conductor-split:not(:has(.conductor-menu)) .conductor-primary { |
| 85 | + border-radius: 6px; |
| 86 | + border-right-color: #4453e3; |
67 | 87 | } |
68 | 88 |
|
69 | | -#conductor-pr-widget .conductor-pr-button:focus-visible { |
70 | | - outline: 2px solid #ffffff; |
71 | | - outline-offset: 1px; |
72 | | - box-shadow: 0 0 0 4px rgba(91, 108, 255, 0.6); |
| 89 | +#conductor-pr-widget .conductor-primary:hover { |
| 90 | + background: #4f5fef; |
73 | 91 | } |
74 | 92 |
|
75 | | -#conductor-pr-widget .conductor-pr-button-icon { |
76 | | - font-size: 10px; |
77 | | - line-height: 1; |
| 93 | +#conductor-pr-widget .conductor-primary:active { |
| 94 | + background: #4453e3; |
| 95 | +} |
| 96 | + |
| 97 | +#conductor-pr-widget .conductor-primary:focus-visible { |
| 98 | + outline: 2px solid var(--focus-outlineColor, var(--color-accent-emphasis, #0969da)); |
| 99 | + outline-offset: 1px; |
78 | 100 | } |
79 | 101 |
|
80 | | -#conductor-pr-widget .conductor-pr-button--flash { |
81 | | - background: linear-gradient(180deg, #1f883d 0%, #1a7234 100%); |
| 102 | +#conductor-pr-widget .conductor-primary-label { |
| 103 | + overflow: hidden; |
| 104 | + text-overflow: ellipsis; |
82 | 105 | } |
83 | 106 |
|
84 | | -#conductor-pr-widget .conductor-preset-select { |
| 107 | +#conductor-pr-widget .conductor-icon { |
85 | 108 | flex: 0 0 auto; |
86 | | - background: var(--bgColor-default, var(--color-canvas-default, #ffffff)); |
87 | | - color: var(--fgColor-default, var(--color-fg-default, #1f2328)); |
| 109 | +} |
| 110 | + |
| 111 | +#conductor-pr-widget .conductor-icon--train { |
| 112 | + width: 14px; |
| 113 | + height: 14px; |
| 114 | +} |
| 115 | + |
| 116 | +#conductor-pr-widget .conductor-icon--caret { |
| 117 | + width: 12px; |
| 118 | + height: 12px; |
| 119 | +} |
| 120 | + |
| 121 | +#conductor-pr-widget .conductor-icon--gear { |
| 122 | + width: 13px; |
| 123 | + height: 13px; |
| 124 | +} |
| 125 | + |
| 126 | +#conductor-pr-widget .conductor-primary--flash { |
| 127 | + background: #1f883d; |
| 128 | + border-color: #1a7234; |
| 129 | +} |
| 130 | + |
| 131 | +/* Caret + popover */ |
| 132 | +#conductor-pr-widget .conductor-menu { |
| 133 | + position: relative; |
| 134 | + display: flex; |
| 135 | +} |
| 136 | + |
| 137 | +#conductor-pr-widget .conductor-caret { |
| 138 | + display: inline-flex; |
| 139 | + align-items: center; |
| 140 | + justify-content: center; |
| 141 | + padding: 0 8px; |
| 142 | + background: #5b6cff; |
| 143 | + color: #ffffff; |
| 144 | + border: 1px solid #4453e3; |
| 145 | + border-left: none; |
| 146 | + border-radius: 0 6px 6px 0; |
| 147 | + cursor: pointer; |
| 148 | + transition: background-color 0.1s ease; |
| 149 | +} |
| 150 | + |
| 151 | +#conductor-pr-widget .conductor-caret:hover { |
| 152 | + background: #4f5fef; |
| 153 | +} |
| 154 | + |
| 155 | +#conductor-pr-widget .conductor-caret:active { |
| 156 | + background: #4453e3; |
| 157 | +} |
| 158 | + |
| 159 | +#conductor-pr-widget .conductor-caret:focus-visible { |
| 160 | + outline: 2px solid var(--focus-outlineColor, var(--color-accent-emphasis, #0969da)); |
| 161 | + outline-offset: 1px; |
| 162 | +} |
| 163 | + |
| 164 | +#conductor-pr-widget .conductor-caret[aria-expanded='true'] { |
| 165 | + background: #4453e3; |
| 166 | +} |
| 167 | + |
| 168 | +#conductor-pr-widget .conductor-menu-list { |
| 169 | + position: absolute; |
| 170 | + top: calc(100% + 4px); |
| 171 | + right: 0; |
| 172 | + z-index: 100; |
| 173 | + min-width: 200px; |
| 174 | + padding: 4px; |
| 175 | + background: var(--overlay-bgColor, var(--color-canvas-overlay, #ffffff)); |
88 | 176 | border: 1px solid var(--borderColor-default, var(--color-border-default, #d0d7de)); |
89 | | - border-radius: 6px; |
90 | | - padding: 5px 6px; |
91 | | - font-size: 12px; |
| 177 | + border-radius: 8px; |
| 178 | + box-shadow: var(--shadow-floating-small, 0 8px 24px rgba(140, 149, 159, 0.2)); |
| 179 | + display: flex; |
| 180 | + flex-direction: column; |
| 181 | +} |
| 182 | + |
| 183 | +#conductor-pr-widget .conductor-menu-list[hidden] { |
| 184 | + display: none; |
| 185 | +} |
| 186 | + |
| 187 | +#conductor-pr-widget .conductor-menu-item { |
| 188 | + display: flex; |
| 189 | + align-items: center; |
| 190 | + justify-content: space-between; |
| 191 | + gap: 8px; |
| 192 | + padding: 6px 10px; |
| 193 | + text-align: left; |
| 194 | + background: transparent; |
| 195 | + border: none; |
| 196 | + border-radius: 4px; |
| 197 | + color: var(--fgColor-default, var(--color-fg-default, #1f2328)); |
| 198 | + font: inherit; |
| 199 | + font-size: 13px; |
| 200 | + line-height: 20px; |
92 | 201 | cursor: pointer; |
| 202 | + white-space: nowrap; |
| 203 | +} |
| 204 | + |
| 205 | +#conductor-pr-widget .conductor-menu-item:hover { |
| 206 | + background: var(--bgColor-accent-muted, var(--color-accent-subtle, rgba(9, 105, 218, 0.1))); |
| 207 | + color: var(--fgColor-accent, var(--color-accent-fg, #0969da)); |
93 | 208 | } |
94 | 209 |
|
95 | | -#conductor-pr-widget .conductor-preset-select:hover { |
96 | | - background: var(--bgColor-muted, var(--color-canvas-subtle, #f6f8fa)); |
| 210 | +#conductor-pr-widget .conductor-menu-item:focus-visible { |
| 211 | + outline: 2px solid var(--focus-outlineColor, var(--color-accent-emphasis, #0969da)); |
| 212 | + outline-offset: -2px; |
97 | 213 | } |
98 | 214 |
|
| 215 | +#conductor-pr-widget .conductor-menu-item-badge { |
| 216 | + flex: 0 0 auto; |
| 217 | + padding: 1px 6px; |
| 218 | + font-size: 10px; |
| 219 | + font-weight: 600; |
| 220 | + color: var(--fgColor-muted, var(--color-fg-muted, #59636e)); |
| 221 | + background: var(--bgColor-neutral-muted, var(--color-neutral-muted, rgba(175, 184, 193, 0.2))); |
| 222 | + border-radius: 10px; |
| 223 | + text-transform: uppercase; |
| 224 | + letter-spacing: 0.04em; |
| 225 | +} |
| 226 | + |
| 227 | +#conductor-pr-widget .conductor-menu-item--default { |
| 228 | + font-weight: 600; |
| 229 | +} |
| 230 | + |
| 231 | +/* Dark mode tweaks — GitHub's dark theme already provides most tokens, but |
| 232 | + we boost a couple of accents so the brand color stays distinct. */ |
99 | 233 | @media (prefers-color-scheme: dark) { |
100 | | - #conductor-pr-widget .conductor-pr-button { |
101 | | - border-color: rgba(255, 255, 255, 0.12); |
| 234 | + #conductor-pr-widget .conductor-primary, |
| 235 | + #conductor-pr-widget .conductor-caret { |
| 236 | + border-color: #6f7eff; |
| 237 | + } |
| 238 | + #conductor-pr-widget .conductor-primary { |
| 239 | + border-right-color: rgba(0, 0, 0, 0.4); |
| 240 | + } |
| 241 | + #conductor-pr-widget .conductor-split:not(:has(.conductor-menu)) .conductor-primary { |
| 242 | + border-right-color: #6f7eff; |
102 | 243 | } |
103 | 244 | } |
0 commit comments