@mostrom/app-shell 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/.claude/ralph-loop.local.md +9 -0
  2. package/README.md +172 -0
  3. package/bin/init.js +269 -0
  4. package/bun.lock +401 -0
  5. package/components.json +28 -0
  6. package/package.json +74 -0
  7. package/scripts/publish-npm.sh +202 -0
  8. package/src/AppShell.tsx +847 -0
  9. package/src/components/PageHeader.tsx +160 -0
  10. package/src/components/data-table/README.md +447 -0
  11. package/src/components/data-table/data-table-preferences.tsx +184 -0
  12. package/src/components/data-table/data-table-toolbar.tsx +118 -0
  13. package/src/components/data-table/data-table.tsx +37 -0
  14. package/src/components/data-table/index.ts +32 -0
  15. package/src/components/global-header/AllServicesButton.tsx +127 -0
  16. package/src/components/global-header/CategoriesButton.tsx +120 -0
  17. package/src/components/global-header/GlobalHeader.tsx +59 -0
  18. package/src/components/global-header/GlobalHeaderSearch.tsx +57 -0
  19. package/src/components/global-header/HeaderUtilities.tsx +243 -0
  20. package/src/components/global-header/ServicesMenu.tsx +246 -0
  21. package/src/components/layout/AppBreadcrumb.tsx +70 -0
  22. package/src/components/layout/AppFlashbar.tsx +95 -0
  23. package/src/components/layout/AppLayout.tsx +271 -0
  24. package/src/components/layout/AppNavigation.tsx +313 -0
  25. package/src/components/layout/AppSidebar.tsx +229 -0
  26. package/src/components/patterns/index.ts +14 -0
  27. package/src/components/patterns/p-alert-5.tsx +19 -0
  28. package/src/components/patterns/p-autocomplete-5.tsx +89 -0
  29. package/src/components/patterns/p-breadcrumb-1.tsx +28 -0
  30. package/src/components/patterns/p-button-42.tsx +37 -0
  31. package/src/components/patterns/p-button-51.tsx +14 -0
  32. package/src/components/patterns/p-button-6.tsx +5 -0
  33. package/src/components/patterns/p-calendar-1.tsx +18 -0
  34. package/src/components/patterns/p-card-1.tsx +33 -0
  35. package/src/components/patterns/p-card-2.tsx +26 -0
  36. package/src/components/patterns/p-card-5.tsx +31 -0
  37. package/src/components/patterns/p-collapsible-7.tsx +121 -0
  38. package/src/components/patterns/p-command-6.tsx +113 -0
  39. package/src/components/patterns/p-dialog-1.tsx +56 -0
  40. package/src/components/patterns/p-dropdown-menu-1.tsx +38 -0
  41. package/src/components/patterns/p-dropdown-menu-11.tsx +122 -0
  42. package/src/components/patterns/p-dropdown-menu-14.tsx +165 -0
  43. package/src/components/patterns/p-dropdown-menu-9.tsx +108 -0
  44. package/src/components/patterns/p-empty-2.tsx +34 -0
  45. package/src/components/patterns/p-file-upload-1.tsx +72 -0
  46. package/src/components/patterns/p-filters-1.tsx +666 -0
  47. package/src/components/patterns/p-frame-2.tsx +26 -0
  48. package/src/components/patterns/p-tabs-2.tsx +129 -0
  49. package/src/components/reui/alert.tsx +92 -0
  50. package/src/components/reui/autocomplete.tsx +343 -0
  51. package/src/components/reui/badge.tsx +87 -0
  52. package/src/components/reui/data-grid/data-grid-column-filter.tsx +165 -0
  53. package/src/components/reui/data-grid/data-grid-column-header.tsx +339 -0
  54. package/src/components/reui/data-grid/data-grid-column-visibility.tsx +55 -0
  55. package/src/components/reui/data-grid/data-grid-pagination.tsx +224 -0
  56. package/src/components/reui/data-grid/data-grid-table-dnd-rows.tsx +260 -0
  57. package/src/components/reui/data-grid/data-grid-table-dnd.tsx +253 -0
  58. package/src/components/reui/data-grid/data-grid-table.tsx +639 -0
  59. package/src/components/reui/data-grid/data-grid.tsx +209 -0
  60. package/src/components/reui/date-selector.tsx +1330 -0
  61. package/src/components/reui/filters.tsx +1869 -0
  62. package/src/components/reui/frame.tsx +134 -0
  63. package/src/components/reui/index.ts +17 -0
  64. package/src/components/reui/timeline.tsx +219 -0
  65. package/src/components/search/Autocomplete.tsx +183 -0
  66. package/src/components/search/AutocompleteClient.tsx +293 -0
  67. package/src/components/search/GlobalSearch.tsx +187 -0
  68. package/src/components/section-drawer/deal-drawer-content.tsx +891 -0
  69. package/src/components/section-drawer/index.ts +19 -0
  70. package/src/components/section-drawer/section-drawer.css +665 -0
  71. package/src/components/section-drawer/section-drawer.tsx +467 -0
  72. package/src/components/sectioned-list-board/README.md +78 -0
  73. package/src/components/sectioned-list-board/board-card-content.tsx +340 -0
  74. package/src/components/sectioned-list-board/date-range-filter.tsx +249 -0
  75. package/src/components/sectioned-list-board/index.ts +19 -0
  76. package/src/components/sectioned-list-board/sectioned-list-board.css +564 -0
  77. package/src/components/sectioned-list-board/sectioned-list-board.tsx +731 -0
  78. package/src/components/sectioned-list-board/sortable-card.tsx +314 -0
  79. package/src/components/sectioned-list-board/sortable-section.tsx +319 -0
  80. package/src/components/sectioned-list-board/types.ts +216 -0
  81. package/src/components/sectioned-list-table/README.md +80 -0
  82. package/src/components/sectioned-list-table/index.ts +14 -0
  83. package/src/components/sectioned-list-table/sectioned-list-table.css +534 -0
  84. package/src/components/sectioned-list-table/sectioned-list-table.tsx +740 -0
  85. package/src/components/sectioned-list-table/sortable-column-header.tsx +120 -0
  86. package/src/components/sectioned-list-table/sortable-row.tsx +420 -0
  87. package/src/components/sectioned-list-table/sortable-section.tsx +251 -0
  88. package/src/components/sectioned-list-table/table-cell-content.tsx +129 -0
  89. package/src/components/sectioned-list-table/types.ts +120 -0
  90. package/src/components/sectioned-list-table/use-column-preferences.ts +103 -0
  91. package/src/components/ui/actions-dropdown.tsx +109 -0
  92. package/src/components/ui/assignee-selector.tsx +209 -0
  93. package/src/components/ui/avatar.tsx +107 -0
  94. package/src/components/ui/breadcrumb.tsx +109 -0
  95. package/src/components/ui/button-group.tsx +83 -0
  96. package/src/components/ui/button.tsx +64 -0
  97. package/src/components/ui/calendar.tsx +220 -0
  98. package/src/components/ui/card.tsx +92 -0
  99. package/src/components/ui/chart.tsx +376 -0
  100. package/src/components/ui/checkbox.tsx +30 -0
  101. package/src/components/ui/collapsible.tsx +33 -0
  102. package/src/components/ui/command.tsx +182 -0
  103. package/src/components/ui/context-menu.tsx +250 -0
  104. package/src/components/ui/create-button-group.tsx +128 -0
  105. package/src/components/ui/dialog.tsx +156 -0
  106. package/src/components/ui/drawer.tsx +133 -0
  107. package/src/components/ui/dropdown-menu.tsx +255 -0
  108. package/src/components/ui/empty.tsx +104 -0
  109. package/src/components/ui/field.tsx +248 -0
  110. package/src/components/ui/form.tsx +165 -0
  111. package/src/components/ui/index.ts +37 -0
  112. package/src/components/ui/input-group.tsx +168 -0
  113. package/src/components/ui/input.tsx +21 -0
  114. package/src/components/ui/kbd.tsx +28 -0
  115. package/src/components/ui/label.tsx +22 -0
  116. package/src/components/ui/navigation-menu.tsx +168 -0
  117. package/src/components/ui/page-header.tsx +80 -0
  118. package/src/components/ui/popover.tsx +87 -0
  119. package/src/components/ui/scroll-area.tsx +56 -0
  120. package/src/components/ui/select.tsx +190 -0
  121. package/src/components/ui/separator.tsx +26 -0
  122. package/src/components/ui/sheet.tsx +141 -0
  123. package/src/components/ui/sidebar.tsx +726 -0
  124. package/src/components/ui/skeleton.tsx +13 -0
  125. package/src/components/ui/sonner.tsx +38 -0
  126. package/src/components/ui/switch.tsx +33 -0
  127. package/src/components/ui/tabs.tsx +91 -0
  128. package/src/components/ui/textarea.tsx +18 -0
  129. package/src/components/ui/toggle-group.tsx +83 -0
  130. package/src/components/ui/toggle.tsx +45 -0
  131. package/src/components/ui/tooltip.tsx +57 -0
  132. package/src/hooks/use-copy-to-clipboard.ts +37 -0
  133. package/src/hooks/use-file-upload.ts +415 -0
  134. package/src/hooks/use-mobile.ts +19 -0
  135. package/src/index.ts +95 -0
  136. package/src/lib/utils.ts +6 -0
  137. package/src/styles.css +1859 -0
  138. package/src/urls.ts +83 -0
  139. package/src/vite.d.ts +22 -0
  140. package/src/vite.js +241 -0
  141. package/tsconfig.base.json +18 -0
  142. package/tsconfig.json +24 -0
package/src/styles.css ADDED
@@ -0,0 +1,1859 @@
1
+ /* =============================================================================
2
+ * Global Design System Styles
3
+ * =============================================================================
4
+ * Core styles previously in @platform/design-system, now merged into app-shell
5
+ *
6
+ * NOTE: Font is loaded via <link> tag in AppShell component, not @import
7
+ * NOTE: tw-animate-css is imported in the app's tailwind.css, not here
8
+ */
9
+
10
+ @import "tw-animate-css";
11
+
12
+ /* ---break---
13
+ */
14
+
15
+ @custom-variant dark (&:is(.dark *));
16
+
17
+ :root {
18
+ --font-family-base: "Hanken Grotesk", -apple-system, BlinkMacSystemFont,
19
+ "Segoe UI", sans-serif;
20
+
21
+ /* Override Cloudscape font variables */
22
+ --awsui-font-family-base: "Hanken Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
23
+ --awsui-font-family-monospace: "SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", monospace;
24
+
25
+ /* Dropdown styling */
26
+ --dropdown-border-radius: 8px;
27
+
28
+ /* Core shadcn/ui CSS variables - services import this automatically */
29
+ --radius: 0.625rem;
30
+ --background: oklch(1 0 0);
31
+ --foreground: oklch(0.145 0 0);
32
+ --card: oklch(1 0 0);
33
+ --card-foreground: oklch(0.145 0 0);
34
+ --popover: oklch(1 0 0);
35
+ --popover-foreground: oklch(0.145 0 0);
36
+ --primary: oklch(0.205 0 0);
37
+ --primary-foreground: oklch(0.985 0 0);
38
+ --secondary: oklch(0.97 0 0);
39
+ --secondary-foreground: oklch(0.205 0 0);
40
+ --muted: oklch(0.97 0 0);
41
+ --muted-foreground: oklch(0.556 0 0);
42
+ --accent: oklch(0.97 0 0);
43
+ --accent-foreground: oklch(0.205 0 0);
44
+ --destructive: oklch(0.577 0.245 27.325);
45
+ --border: oklch(0.922 0 0);
46
+ --input: oklch(0.922 0 0);
47
+ --ring: oklch(0.708 0 0);
48
+ --chart-1: oklch(0.646 0.222 41.116);
49
+ --chart-2: oklch(0.6 0.118 184.704);
50
+ --chart-3: oklch(0.398 0.07 227.392);
51
+ --chart-4: oklch(0.828 0.189 84.429);
52
+ --chart-5: oklch(0.769 0.188 70.08);
53
+
54
+ /* Sidebar variables */
55
+ --sidebar: oklch(0.985 0 0);
56
+ --sidebar-foreground: oklch(0.145 0 0);
57
+ --sidebar-primary: oklch(0.205 0 0);
58
+ --sidebar-primary-foreground: oklch(0.985 0 0);
59
+ --sidebar-accent: oklch(0.97 0 0);
60
+ --sidebar-accent-foreground: oklch(0.205 0 0);
61
+ --sidebar-border: oklch(0.922 0 0);
62
+ --sidebar-ring: oklch(0.708 0 0);
63
+
64
+ /* Alert/status variables */
65
+ --destructive-foreground: var(--color-red-800);
66
+ --success: var(--color-emerald-500);
67
+ --success-foreground: var(--color-emerald-900);
68
+ --info: var(--color-violet-500);
69
+ --info-foreground: var(--color-violet-900);
70
+ --warning: var(--color-yellow-500);
71
+ --warning-foreground: var(--color-yellow-900);
72
+ --invert: var(--color-zinc-900);
73
+ --invert-foreground: var(--color-zinc-50);
74
+ }
75
+
76
+ body,
77
+ #root {
78
+ font-family: var(--font-family-base);
79
+ }
80
+
81
+ /* Force Hanken Grotesk on all Cloudscape components */
82
+ [class*="awsui"] {
83
+ font-family: "Hanken Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important;
84
+ }
85
+
86
+ /* =============================================================================
87
+ * App Shell Styles
88
+ * =============================================================================
89
+ */
90
+
91
+ /*
92
+ * Force dark background on Cloudscape dropdown PORTALS only
93
+ * CRITICAL: Use body > div[class*="awsui_dropdown"] to ONLY target dropdown portals
94
+ * NOT body > div[class*="awsui"] which would match other portals and is too broad
95
+ * This prevents styling table cells which also use "interior" class patterns
96
+ */
97
+ body > div[class*="awsui_dropdown"] [class*="awsui_dropdown-content-wrapper"],
98
+ body > div[class*="awsui_dropdown"] [class*="awsui_interior"],
99
+ body > div[class*="awsui_dropdown"] [class*="awsui_options-list"],
100
+ body > div[class*="awsui_dropdown"] [class*="awsui_items-list"],
101
+ body > div[class*="awsui_dropdown"] ul[class*="awsui"],
102
+ body > div[class*="awsui_dropdown"] ul {
103
+ background-color: #171717 !important;
104
+ color: #f5f5f5 !important;
105
+ }
106
+
107
+ body > div[class*="awsui_dropdown"] li[class*="awsui"],
108
+ body > div[class*="awsui_dropdown"] li,
109
+ body > div[class*="awsui_dropdown"] [class*="awsui_option"],
110
+ body > div[class*="awsui_dropdown"] [class*="awsui_item-element"] {
111
+ background-color: transparent !important;
112
+ color: #f5f5f5 !important;
113
+ }
114
+
115
+ body > div[class*="awsui_dropdown"] [class*="awsui_highlighted"],
116
+ body > div[class*="awsui_dropdown"] li:hover,
117
+ body > div[class*="awsui_dropdown"] li:focus,
118
+ body > div[class*="awsui_dropdown"] [class*="awsui_option"]:hover,
119
+ body > div[class*="awsui_dropdown"] [class*="awsui_item-element"]:hover {
120
+ background-color: transparent !important;
121
+ color: #26c6ff !important;
122
+ }
123
+
124
+ /* Ensure hover color applies to the text content inside dropdown items */
125
+ body > div[class*="awsui_dropdown"] [class*="awsui_item-element"]:hover [class*="awsui_option-content"],
126
+ body > div[class*="awsui_dropdown"] [class*="awsui_item-element"]:hover [class*="awsui_link"],
127
+ body > div[class*="awsui_dropdown"] [class*="awsui_option"]:hover [class*="awsui_option-content"],
128
+ body > div[class*="awsui_dropdown"] [class*="awsui_highlighted"] [class*="awsui_option-content"],
129
+ body > div[class*="awsui_dropdown"] [class*="awsui_highlighted"] [class*="awsui_link"],
130
+ body > div[class*="awsui_dropdown"] [aria-selected="true"] [class*="awsui_option-content"] {
131
+ color: #26c6ff !important;
132
+ background-color: transparent !important;
133
+ }
134
+
135
+ /* Override Cloudscape light mode dropdown backgrounds - scoped to dropdown portals */
136
+ body > div[class*="awsui_dropdown"][class*="awsui_open"] [class*="awsui_interior"],
137
+ body > div[class*="awsui_dropdown"] [class*="awsui_dropdown-content"],
138
+ body > div[class*="awsui_dropdown"] > div,
139
+ body > div[class*="awsui_dropdown"] ul {
140
+ background-color: #171717 !important;
141
+ }
142
+
143
+ /* Global header - high z-index to ensure dropdowns appear above everything */
144
+ #global-header {
145
+ background-color: #171717;
146
+ position: sticky;
147
+ top: 0;
148
+ z-index: 9999;
149
+ overflow: visible !important;
150
+ }
151
+
152
+ #global-header [class*="awsui_top-navigation"],
153
+ #global-header header {
154
+ background-color: #171717 !important;
155
+ overflow: visible !important;
156
+ }
157
+
158
+ #global-header [class*="awsui_utility"],
159
+ #global-header [class*="awsui_utilities"] {
160
+ overflow: visible !important;
161
+ }
162
+
163
+ /* =============================================================================
164
+ * Custom Global Header Styles (non-Cloudscape)
165
+ * =============================================================================
166
+ */
167
+
168
+ .app-shell-header {
169
+ display: flex;
170
+ align-items: center;
171
+ height: 56px;
172
+ padding: 8px 16px;
173
+ background-color: #171717;
174
+ color: #f5f5f5;
175
+ font-family: var(--font-family-base);
176
+ }
177
+
178
+ .app-shell-header-left {
179
+ display: flex;
180
+ align-items: center;
181
+ flex-shrink: 0;
182
+ }
183
+
184
+ .app-shell-header-center {
185
+ display: flex;
186
+ align-items: center;
187
+ flex: 1;
188
+ min-width: 0;
189
+ }
190
+
191
+ .app-shell-header-right {
192
+ display: flex;
193
+ align-items: center;
194
+ gap: 4px;
195
+ flex-shrink: 0;
196
+ margin-left: auto;
197
+ }
198
+
199
+ .app-shell-header-identity-link,
200
+ .app-shell-header-identity {
201
+ display: flex;
202
+ align-items: center;
203
+ gap: 8px;
204
+ text-decoration: none;
205
+ color: inherit;
206
+ }
207
+
208
+ .app-shell-header-identity-link:hover {
209
+ opacity: 0.9;
210
+ }
211
+
212
+ .app-shell-header-logo {
213
+ height: 24px;
214
+ width: auto;
215
+ display: block;
216
+ }
217
+
218
+ .app-shell-header-title {
219
+ font-size: 16px;
220
+ font-weight: 600;
221
+ color: #f5f5f5;
222
+ }
223
+
224
+ /* Header utility button base styles */
225
+ .app-shell-header-utility-button {
226
+ display: flex;
227
+ align-items: center;
228
+ justify-content: center;
229
+ width: 36px;
230
+ height: 36px;
231
+ padding: 0;
232
+ background: transparent;
233
+ border: none;
234
+ border-radius: 4px;
235
+ color: #f5f5f5;
236
+ cursor: pointer;
237
+ transition: background-color 0.15s ease, color 0.15s ease;
238
+ }
239
+
240
+ .app-shell-header-utility-button:hover {
241
+ background-color: rgba(255, 255, 255, 0.1);
242
+ color: #26c6ff;
243
+ }
244
+
245
+ .app-shell-header-utility-button:focus-visible {
246
+ outline: 2px solid #26c6ff;
247
+ outline-offset: 2px;
248
+ }
249
+
250
+ .app-shell-header-utility-button svg {
251
+ width: 20px;
252
+ height: 20px;
253
+ }
254
+
255
+ /* Service bar toggle buttons (navigation, copilot, settings, sidebar close) */
256
+ .service-bar-button {
257
+ display: flex;
258
+ align-items: center;
259
+ justify-content: center;
260
+ width: 32px;
261
+ height: 32px;
262
+ padding: 0;
263
+ background: transparent;
264
+ border: none;
265
+ border-radius: 6px;
266
+ color: inherit;
267
+ cursor: pointer;
268
+ transition: background-color 0.15s ease;
269
+ }
270
+
271
+ .service-bar-button:hover {
272
+ background-color: var(--accent);
273
+ }
274
+
275
+ .service-bar-button svg {
276
+ width: 20px;
277
+ height: 20px;
278
+ }
279
+
280
+ /* Header menu button with icon + label + chevron */
281
+ .app-shell-header-menu-button {
282
+ display: flex;
283
+ align-items: center;
284
+ gap: 6px;
285
+ height: 36px;
286
+ padding: 0 10px;
287
+ background: transparent;
288
+ border: none;
289
+ border-radius: 4px;
290
+ color: #f5f5f5;
291
+ cursor: pointer;
292
+ transition: background-color 0.15s ease, color 0.15s ease;
293
+ font-family: var(--font-family-base);
294
+ font-size: 14px;
295
+ font-weight: 400;
296
+ }
297
+
298
+ .app-shell-header-menu-button:hover {
299
+ background-color: rgba(255, 255, 255, 0.1);
300
+ color: #26c6ff;
301
+ }
302
+
303
+ .app-shell-header-menu-button:focus-visible {
304
+ outline: 2px solid #26c6ff;
305
+ outline-offset: 2px;
306
+ }
307
+
308
+ .app-shell-header-menu-icon {
309
+ display: flex;
310
+ align-items: center;
311
+ justify-content: center;
312
+ }
313
+
314
+ .app-shell-header-menu-icon svg {
315
+ width: 18px;
316
+ height: 18px;
317
+ }
318
+
319
+ .app-shell-header-menu-label {
320
+ white-space: nowrap;
321
+ }
322
+
323
+ .app-shell-header-menu-chevron {
324
+ display: flex;
325
+ align-items: center;
326
+ justify-content: center;
327
+ margin-left: -2px;
328
+ }
329
+
330
+ .app-shell-header-menu-chevron svg {
331
+ width: 16px;
332
+ height: 16px;
333
+ opacity: 0.7;
334
+ }
335
+
336
+ /* Header dropdown menu styles (Radix UI) */
337
+ .app-shell-header-dropdown {
338
+ z-index: 10000;
339
+ min-width: 180px;
340
+ max-width: 280px;
341
+ padding: 8px 0;
342
+ background-color: #171717;
343
+ border-radius: 8px;
344
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
345
+ outline: none;
346
+ animation: fadeIn 0.15s ease;
347
+ }
348
+
349
+ @keyframes fadeIn {
350
+ from {
351
+ opacity: 0;
352
+ transform: translateY(-4px);
353
+ }
354
+ to {
355
+ opacity: 1;
356
+ transform: translateY(0);
357
+ }
358
+ }
359
+
360
+ .app-shell-header-dropdown-item {
361
+ display: flex;
362
+ flex-direction: column;
363
+ gap: 2px;
364
+ padding: 8px 16px;
365
+ color: #f5f5f5;
366
+ text-decoration: none;
367
+ cursor: pointer;
368
+ outline: none;
369
+ transition: color 0.15s ease;
370
+ }
371
+
372
+ .app-shell-header-dropdown-item:hover,
373
+ .app-shell-header-dropdown-item:focus,
374
+ .app-shell-header-dropdown-item[data-highlighted] {
375
+ color: #26c6ff;
376
+ background-color: transparent;
377
+ }
378
+
379
+ .app-shell-header-dropdown-item[data-disabled] {
380
+ color: #6b7280;
381
+ cursor: not-allowed;
382
+ }
383
+
384
+ .app-shell-header-dropdown-item-text {
385
+ font-size: 14px;
386
+ font-weight: 400;
387
+ }
388
+
389
+ .app-shell-header-dropdown-item-description {
390
+ font-size: 12px;
391
+ color: #8aa0b5;
392
+ }
393
+
394
+ .app-shell-header-dropdown-item:hover .app-shell-header-dropdown-item-description,
395
+ .app-shell-header-dropdown-item:focus .app-shell-header-dropdown-item-description,
396
+ .app-shell-header-dropdown-item[data-highlighted] .app-shell-header-dropdown-item-description {
397
+ color: #a5d8ff;
398
+ }
399
+
400
+ .app-shell-header-dropdown-label {
401
+ padding: 8px 16px 4px;
402
+ font-size: 11px;
403
+ font-weight: 600;
404
+ letter-spacing: 0.04em;
405
+ text-transform: uppercase;
406
+ color: #8aa0b5;
407
+ }
408
+
409
+ .app-shell-header-dropdown-separator {
410
+ height: 1px;
411
+ margin: 8px 0;
412
+ background-color: #263445;
413
+ }
414
+
415
+ /* Force light mode background for app content area */
416
+ body,
417
+ #root,
418
+ [class*="awsui_app-layout"],
419
+ [class*="awsui_app-layout"] [class*="awsui_content"],
420
+ [class*="awsui_app-layout"] [class*="awsui_content"] > * {
421
+ background-color: #ffffff !important;
422
+ color: #0f172a !important;
423
+ }
424
+
425
+ /* Panel trigger buttons in app layout (not global header) - circle shape */
426
+ [class*="awsui_app-layout"] button[class*="awsui_trigger"],
427
+ [class*="awsui_app-layout"] button[class*="awsui_circle"] {
428
+ border-radius: 50% !important;
429
+ }
430
+
431
+ /* When panel is closed (no .selected class) - white background, dark icon */
432
+ [class*="awsui_app-layout"] button[class*="awsui_trigger"]:not([class*="selected"]),
433
+ [class*="awsui_app-layout"] button[class*="awsui_circle"]:not([class*="selected"]) {
434
+ background-color: #ffffff !important;
435
+ border: 1px solid #d5dbdb !important;
436
+ color: #171717 !important;
437
+ }
438
+
439
+ /* Remove hover effects from trigger buttons */
440
+ [class*="awsui_app-layout"] button[class*="awsui_trigger"]:hover:not([class*="selected"]),
441
+ [class*="awsui_app-layout"] button[class*="awsui_circle"]:hover:not([class*="selected"]) {
442
+ background-color: #ffffff !important;
443
+ border: 1px solid #d5dbdb !important;
444
+ color: #171717 !important;
445
+ }
446
+
447
+ [class*="awsui_app-layout"] button[class*="awsui_trigger"]:not([class*="selected"]) svg,
448
+ [class*="awsui_app-layout"] button[class*="awsui_circle"]:not([class*="selected"]) svg {
449
+ color: #171717 !important;
450
+ }
451
+
452
+ /* When panel is open (.selected class) - dark background, white icon */
453
+ [class*="awsui_app-layout"] button[class*="awsui_trigger"][class*="selected"],
454
+ [class*="awsui_app-layout"] button[class*="awsui_circle"][class*="selected"] {
455
+ background-color: #171717 !important;
456
+ border: 1px solid #171717 !important;
457
+ color: #ffffff !important;
458
+ }
459
+
460
+ /* Remove hover effects from selected trigger buttons */
461
+ [class*="awsui_app-layout"] button[class*="awsui_trigger"][class*="selected"]:hover,
462
+ [class*="awsui_app-layout"] button[class*="awsui_circle"][class*="selected"]:hover {
463
+ background-color: #171717 !important;
464
+ border: 1px solid #171717 !important;
465
+ color: #ffffff !important;
466
+ }
467
+
468
+ [class*="awsui_app-layout"] button[class*="awsui_trigger"][class*="selected"] svg,
469
+ [class*="awsui_app-layout"] button[class*="awsui_circle"][class*="selected"] svg {
470
+ color: #ffffff !important;
471
+ fill: #ffffff !important;
472
+ }
473
+
474
+ /* Custom navigation trigger button with Menu icon */
475
+ .app-shell-nav-trigger {
476
+ display: flex;
477
+ align-items: center;
478
+ justify-content: center;
479
+ width: 40px;
480
+ height: 40px;
481
+ border-radius: 50%;
482
+ border: 1px solid #d5dbdb;
483
+ background-color: #ffffff;
484
+ color: #171717;
485
+ cursor: pointer;
486
+ }
487
+
488
+ .app-shell-nav-trigger:focus-visible {
489
+ outline: 2px solid #0073bb;
490
+ outline-offset: 2px;
491
+ }
492
+
493
+ .app-shell-nav-trigger[aria-expanded="true"] {
494
+ background-color: #171717;
495
+ border-color: #171717;
496
+ color: #ffffff;
497
+ }
498
+
499
+ /* Side navigation link color */
500
+ .app-shell-side-navigation a,
501
+ .app-shell-side-navigation button,
502
+ .app-shell-side-navigation [role="link"] {
503
+ color: #171717 !important;
504
+ font-weight: 400 !important;
505
+ }
506
+
507
+ /* Dark mode: ensure side navigation links are visible on dark background */
508
+ body.awsui-dark-mode .app-shell-side-navigation a,
509
+ body.awsui-dark-mode .app-shell-side-navigation button,
510
+ body.awsui-dark-mode .app-shell-side-navigation [role="link"] {
511
+ color: #f5f5f5 !important;
512
+ }
513
+
514
+ /* Keep the side navigation header/title bold */
515
+ .app-shell-side-navigation [class*="awsui_header"],
516
+ .app-shell-side-navigation [class*="awsui_header"] a,
517
+ .app-shell-side-navigation [class*="awsui_header"] [class*="awsui_header-link"],
518
+ .app-shell-side-navigation [class*="awsui_header"] [class*="awsui_header-text"] {
519
+ font-weight: 600 !important;
520
+ color: #171717 !important;
521
+ }
522
+
523
+ body.awsui-dark-mode .app-shell-side-navigation [class*="awsui_header"],
524
+ body.awsui-dark-mode .app-shell-side-navigation [class*="awsui_header"] a,
525
+ body.awsui-dark-mode .app-shell-side-navigation [class*="awsui_header"] [class*="awsui_header-link"],
526
+ body.awsui-dark-mode .app-shell-side-navigation [class*="awsui_header"] [class*="awsui_header-text"] {
527
+ color: #ffffff !important;
528
+ }
529
+
530
+ .app-shell-side-navigation a:hover,
531
+ .app-shell-side-navigation button:hover,
532
+ .app-shell-side-navigation [role="link"]:hover {
533
+ color: #0972d3 !important;
534
+ }
535
+
536
+ .app-shell-side-navigation [aria-current="page"],
537
+ .app-shell-side-navigation [class*="awsui_active"] {
538
+ color: #0972d3 !important;
539
+ font-weight: 600 !important;
540
+ }
541
+
542
+ body.awsui-dark-mode .app-shell-side-navigation [aria-current="page"],
543
+ body.awsui-dark-mode .app-shell-side-navigation [class*="awsui_active"] {
544
+ color: #26c6ff !important;
545
+ font-weight: 600 !important;
546
+ }
547
+
548
+ .app-shell-side-navigation [class*="awsui_link-text"],
549
+ .app-shell-side-navigation [class*="awsui_item-text"],
550
+ .app-shell-side-navigation [class*="awsui_item"] {
551
+ color: inherit !important;
552
+ font-weight: inherit !important;
553
+ }
554
+
555
+ /* Search container with even spacing */
556
+ .app-shell-search {
557
+ display: flex;
558
+ align-items: center;
559
+ gap: 12px;
560
+ }
561
+
562
+ .app-shell-header-search {
563
+ margin-left: 12px;
564
+ }
565
+
566
+ /* =============================================================================
567
+ * Services Menu Dropdown Styles (Radix UI)
568
+ * =============================================================================
569
+ * Dropdown for "All Services" button - appears below global header
570
+ */
571
+
572
+ .app-shell-services-dropdown {
573
+ z-index: 9999;
574
+ background-color: #171717;
575
+ border: none;
576
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
577
+ outline: none;
578
+ }
579
+
580
+ .app-shell-services-dropdown[data-side="bottom"] {
581
+ animation: none;
582
+ }
583
+
584
+ /* Remove any arrow/pointer */
585
+ .app-shell-services-dropdown::before,
586
+ .app-shell-services-dropdown::after {
587
+ display: none !important;
588
+ }
589
+
590
+ .app-shell-services-menu {
591
+ display: grid;
592
+ grid-template-columns: auto 1px minmax(0, 1fr);
593
+ gap: 16px;
594
+ width: min(1000px, calc(100vw - 32px));
595
+ min-width: 800px;
596
+ max-height: calc(100vh - 80px);
597
+ overflow-y: auto;
598
+ padding: 16px 20px;
599
+ background-color: #171717;
600
+ color: #f5f5f5;
601
+ font-family: "Hanken Grotesk", sans-serif;
602
+ }
603
+
604
+ .app-shell-services-divider {
605
+ width: 1px;
606
+ background-color: #263445;
607
+ }
608
+
609
+ .app-shell-services-categories {
610
+ position: sticky;
611
+ top: 0;
612
+ align-self: start;
613
+ }
614
+
615
+ .app-shell-services-categories-title {
616
+ font-size: 11px;
617
+ font-weight: 600;
618
+ letter-spacing: 0.06em;
619
+ text-transform: uppercase;
620
+ color: #8aa0b5;
621
+ margin-bottom: 12px;
622
+ }
623
+
624
+ .app-shell-services-categories ul {
625
+ list-style: none;
626
+ margin: 0;
627
+ padding: 0;
628
+ }
629
+
630
+ .app-shell-services-category {
631
+ display: block;
632
+ width: 100%;
633
+ padding: 6px 10px;
634
+ color: #f5f5f5;
635
+ cursor: pointer;
636
+ border-radius: 4px;
637
+ transition: background-color 0.15s ease;
638
+ white-space: nowrap;
639
+ font-size: 14px;
640
+ text-decoration: none;
641
+ background: transparent;
642
+ border: none;
643
+ text-align: left;
644
+ font: inherit;
645
+ }
646
+
647
+ .app-shell-services-category:hover {
648
+ background-color: rgba(255, 255, 255, 0.08);
649
+ color: #26c6ff;
650
+ }
651
+
652
+ /* Services list - two-column layout for the right side */
653
+ .app-shell-services-list {
654
+ column-count: 2;
655
+ column-gap: 24px;
656
+ }
657
+
658
+ .app-shell-services-group {
659
+ break-inside: avoid;
660
+ margin-bottom: 16px;
661
+ }
662
+
663
+ .app-shell-services-group ul {
664
+ list-style: none;
665
+ margin: 0;
666
+ padding: 0;
667
+ }
668
+
669
+ .app-shell-services-group-title {
670
+ font-size: 11px;
671
+ font-weight: 600;
672
+ letter-spacing: 0.04em;
673
+ text-transform: uppercase;
674
+ color: #8aa0b5;
675
+ margin: 0 0 4px;
676
+ padding: 0 8px;
677
+ }
678
+
679
+ .app-shell-services-item {
680
+ display: block;
681
+ width: 100%;
682
+ padding: 4px 8px;
683
+ color: #f5f5f5;
684
+ text-decoration: none;
685
+ background: transparent;
686
+ border: none;
687
+ text-align: left;
688
+ cursor: pointer;
689
+ border-radius: 2px;
690
+ transition: color 0.15s ease;
691
+ }
692
+
693
+ .app-shell-services-item:hover,
694
+ .app-shell-services-item:focus,
695
+ .app-shell-services-item:focus-visible {
696
+ color: #26c6ff;
697
+ outline: none;
698
+ }
699
+
700
+ .app-shell-services-item-text {
701
+ display: block;
702
+ font-size: 14px;
703
+ font-weight: 400;
704
+ }
705
+
706
+ .app-shell-services-item-description {
707
+ display: none;
708
+ }
709
+
710
+ /* Search popup rendered via Autocomplete should match ServicesMenu dropdown exactly */
711
+ .app-shell-search-dropdown.app-shell-services-dropdown {
712
+ z-index: 9999;
713
+ background-color: #151d26;
714
+ border: none;
715
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
716
+ outline: none;
717
+ max-height: none;
718
+ overflow: visible;
719
+ }
720
+
721
+ .app-shell-search-dropdown.app-shell-services-dropdown[data-side="bottom"] {
722
+ animation: none;
723
+ }
724
+
725
+ .app-shell-search-dropdown.app-shell-services-dropdown::before,
726
+ .app-shell-search-dropdown.app-shell-services-dropdown::after {
727
+ display: none !important;
728
+ }
729
+
730
+ .app-shell-search-positioner.app-shell-search-positioner-services {
731
+ width: auto;
732
+ min-width: 0;
733
+ }
734
+
735
+ .app-shell-search-dropdown.app-shell-services-dropdown .app-shell-search-options {
736
+ list-style: none;
737
+ margin: 0;
738
+ padding: 0;
739
+ display: block;
740
+ }
741
+
742
+ .app-shell-search-dropdown.app-shell-services-dropdown .app-shell-search-option {
743
+ display: block;
744
+ width: 100%;
745
+ padding: 4px 8px;
746
+ color: #f5f5f5;
747
+ text-decoration: none;
748
+ background: transparent;
749
+ border: none;
750
+ text-align: left;
751
+ cursor: pointer;
752
+ border-radius: 2px;
753
+ transition: color 0.15s ease;
754
+ outline: none;
755
+ }
756
+
757
+ .app-shell-search-dropdown.app-shell-services-dropdown .app-shell-search-option:hover,
758
+ .app-shell-search-dropdown.app-shell-services-dropdown .app-shell-search-option[data-highlighted] {
759
+ color: #f5f5f5;
760
+ background-color: rgba(255, 255, 255, 0.08);
761
+ }
762
+
763
+ .app-shell-search-dropdown.app-shell-services-dropdown .app-shell-services-category:hover {
764
+ color: #f5f5f5;
765
+ }
766
+
767
+ .app-shell-separator {
768
+ color: #3a4a5a;
769
+ font-size: 20px;
770
+ font-weight: 300;
771
+ line-height: 1;
772
+ user-select: none;
773
+ }
774
+
775
+ /* Style the apps/categories buttons to look like icon buttons */
776
+ button.app-shell-apps-button,
777
+ .app-shell-categories-button {
778
+ display: flex;
779
+ align-items: center;
780
+ justify-content: center;
781
+ background: transparent;
782
+ border: none;
783
+ padding: 6px;
784
+ min-width: auto;
785
+ box-shadow: none;
786
+ cursor: pointer;
787
+ }
788
+
789
+ button.app-shell-apps-button:hover,
790
+ .app-shell-categories-button:hover {
791
+ background: transparent;
792
+ }
793
+
794
+ button.app-shell-apps-button svg,
795
+ .app-shell-categories-button svg {
796
+ display: block;
797
+ }
798
+
799
+ button.app-shell-apps-button .app-shell-apps-icon,
800
+ .app-shell-categories-button .app-shell-categories-icon {
801
+ color: white;
802
+ transition: color 0.15s ease;
803
+ }
804
+
805
+ button.app-shell-apps-button:hover .app-shell-apps-icon,
806
+ .app-shell-categories-button:hover .app-shell-categories-icon {
807
+ color: #26c6ff;
808
+ }
809
+
810
+ /* =============================================================================
811
+ * Custom Global Search Styles (non-Cloudscape)
812
+ * =============================================================================
813
+ */
814
+
815
+ .app-shell-search-input-wrapper {
816
+ position: relative;
817
+ min-width: 300px;
818
+ max-width: 400px;
819
+ }
820
+
821
+ .app-shell-search-input-container {
822
+ position: relative;
823
+ display: flex;
824
+ align-items: center;
825
+ }
826
+
827
+ .app-shell-search-icon {
828
+ position: absolute;
829
+ left: 12px;
830
+ display: flex;
831
+ align-items: center;
832
+ justify-content: center;
833
+ color: #ffffff;
834
+ pointer-events: none;
835
+ }
836
+
837
+ .app-shell-search-input {
838
+ width: 100%;
839
+ height: 36px;
840
+ padding: 0 12px 0 36px;
841
+ background-color: #171717;
842
+ border: 1px solid #3a4a5a;
843
+ border-radius: 9999px;
844
+ color: #f5f5f5;
845
+ font-family: var(--font-family-base);
846
+ font-size: 14px;
847
+ outline: none;
848
+ transition: border-color 0.15s ease, background-color 0.15s ease;
849
+ }
850
+
851
+ .app-shell-search-input::placeholder {
852
+ color: #ffffff;
853
+ opacity: 1;
854
+ }
855
+
856
+ .app-shell-search-input:focus {
857
+ border-color: #9ca3af;
858
+ background-color: #18181b;
859
+ }
860
+
861
+ .app-shell-search-spinner {
862
+ animation: spin 1s linear infinite;
863
+ }
864
+
865
+ @keyframes spin {
866
+ from {
867
+ transform: rotate(0deg);
868
+ }
869
+ to {
870
+ transform: rotate(360deg);
871
+ }
872
+ }
873
+
874
+ .app-shell-search-dropdown {
875
+ position: absolute;
876
+ top: calc(100% + 6px);
877
+ left: 0;
878
+ right: 0;
879
+ z-index: 10000;
880
+ max-height: 520px;
881
+ overflow-y: auto;
882
+ background: linear-gradient(180deg, #1a2533 0%, #141d29 100%);
883
+ border: 1px solid #2c3b4f;
884
+ border-radius: 12px;
885
+ box-shadow: 0 12px 36px rgba(0, 0, 0, 0.48);
886
+ }
887
+
888
+ .app-shell-search-results {
889
+ padding: 8px 10px 10px;
890
+ }
891
+
892
+ .app-shell-search-section-label {
893
+ padding: 2px 8px 8px;
894
+ font-size: 18px;
895
+ font-weight: 700;
896
+ line-height: 1.2;
897
+ color: #d8e4f2;
898
+ }
899
+
900
+ .app-shell-search-empty {
901
+ padding: 16px;
902
+ text-align: center;
903
+ color: #8aa0b5;
904
+ font-size: 14px;
905
+ }
906
+
907
+ /* Hide empty state when it has no content (results are showing) */
908
+ .app-shell-search-empty:empty {
909
+ display: none;
910
+ }
911
+
912
+ .app-shell-search-options {
913
+ list-style: none;
914
+ margin: 0;
915
+ padding: 0;
916
+ display: flex;
917
+ flex-direction: column;
918
+ gap: 8px;
919
+ }
920
+
921
+ .app-shell-search-option {
922
+ display: block;
923
+ padding: 0;
924
+ cursor: pointer;
925
+ border: none;
926
+ outline: none;
927
+ }
928
+
929
+ .app-shell-search-result-row {
930
+ display: flex;
931
+ align-items: center;
932
+ gap: 12px;
933
+ min-height: 72px;
934
+ padding: 12px 14px;
935
+ border-radius: 12px;
936
+ background-color: #152131;
937
+ border: 1px solid #2a3a4f;
938
+ transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
939
+ }
940
+
941
+ .app-shell-search-option-content {
942
+ display: flex;
943
+ flex-direction: column;
944
+ gap: 3px;
945
+ min-width: 0;
946
+ flex: 1;
947
+ }
948
+
949
+ .app-shell-search-result-icon {
950
+ display: inline-flex;
951
+ align-items: center;
952
+ justify-content: center;
953
+ width: 28px;
954
+ height: 28px;
955
+ border-radius: 8px;
956
+ color: #6ee7d2;
957
+ background: rgba(82, 191, 176, 0.16);
958
+ border: 1px solid rgba(110, 231, 210, 0.3);
959
+ flex-shrink: 0;
960
+ }
961
+
962
+ .app-shell-search-option-label {
963
+ font-size: 18px;
964
+ font-weight: 600;
965
+ line-height: 1.2;
966
+ color: #f5f5f5;
967
+ white-space: nowrap;
968
+ overflow: hidden;
969
+ text-overflow: ellipsis;
970
+ }
971
+
972
+ .app-shell-search-option-description {
973
+ font-size: 15px;
974
+ font-weight: 400;
975
+ color: #b6c6d8;
976
+ white-space: nowrap;
977
+ overflow: hidden;
978
+ text-overflow: ellipsis;
979
+ }
980
+
981
+ .app-shell-search-option-tags {
982
+ display: flex;
983
+ gap: 6px;
984
+ align-items: center;
985
+ flex-shrink: 0;
986
+ }
987
+
988
+ .app-shell-search-option-tag {
989
+ padding: 5px 10px;
990
+ font-size: 12px;
991
+ font-weight: 500;
992
+ color: #d1d9e3;
993
+ background: rgba(208, 215, 226, 0.14);
994
+ border: 1px solid rgba(208, 215, 226, 0.2);
995
+ border-radius: 999px;
996
+ }
997
+
998
+ /* Base UI Autocomplete additional styles */
999
+ .app-shell-search-positioner {
1000
+ z-index: 10000;
1001
+ outline: none;
1002
+ width: min(720px, calc(100vw - 24px));
1003
+ min-width: 420px;
1004
+ }
1005
+
1006
+ @media (max-width: 640px) {
1007
+ .app-shell-search-positioner {
1008
+ min-width: calc(100vw - 24px);
1009
+ }
1010
+ }
1011
+
1012
+ .app-shell-search-clear,
1013
+ .app-shell-search-trigger {
1014
+ position: absolute;
1015
+ right: 12px;
1016
+ top: 50%;
1017
+ transform: translateY(-50%);
1018
+ display: flex;
1019
+ align-items: center;
1020
+ justify-content: center;
1021
+ background: transparent;
1022
+ border: none;
1023
+ padding: 2px;
1024
+ cursor: pointer;
1025
+ color: #8aa0b5;
1026
+ opacity: 0.7;
1027
+ transition: opacity 0.15s ease, color 0.15s ease;
1028
+ }
1029
+
1030
+ .app-shell-search-clear:hover,
1031
+ .app-shell-search-trigger:hover {
1032
+ opacity: 1;
1033
+ color: #f5f5f5;
1034
+ }
1035
+
1036
+ .app-shell-search-clear:focus-visible,
1037
+ .app-shell-search-trigger:focus-visible {
1038
+ outline: 2px solid #9ca3af;
1039
+ outline-offset: 2px;
1040
+ border-radius: 2px;
1041
+ }
1042
+
1043
+ /* Adjust input padding when clear button is visible */
1044
+ .app-shell-search-input-container:has(.app-shell-search-clear) .app-shell-search-input,
1045
+ .app-shell-search-input-container:has(.app-shell-search-trigger) .app-shell-search-input {
1046
+ padding-right: 36px;
1047
+ }
1048
+
1049
+ .app-shell-search-group-label {
1050
+ padding: 8px 16px 4px;
1051
+ font-size: 11px;
1052
+ font-weight: 600;
1053
+ letter-spacing: 0.04em;
1054
+ text-transform: uppercase;
1055
+ color: #8aa0b5;
1056
+ }
1057
+
1058
+ /* Base UI data-highlighted state styling */
1059
+ .app-shell-search-option[data-highlighted] {
1060
+ background-color: transparent;
1061
+ }
1062
+
1063
+ .app-shell-search-option[data-highlighted] .app-shell-search-result-row,
1064
+ .app-shell-search-option:hover .app-shell-search-result-row {
1065
+ background-color: #27272a;
1066
+ border-color: #52525b;
1067
+ box-shadow: inset 0 0 0 1px rgba(113, 113, 122, 0.4);
1068
+ }
1069
+
1070
+ .app-shell-search-option[data-highlighted] .app-shell-search-option-label,
1071
+ .app-shell-search-option:hover .app-shell-search-option-label {
1072
+ color: #f5f5f5;
1073
+ }
1074
+
1075
+ /* Legacy Cloudscape search styles (for backward compatibility) */
1076
+ .app-shell-search-input-wrapper [class*="awsui_input"] {
1077
+ background-color: #171717 !important;
1078
+ border-radius: 20px !important;
1079
+ }
1080
+
1081
+ /* Inner elements of autosuggest dropdown - no radius (wrapper handles clipping) */
1082
+ .app-shell-search-input-wrapper [class*="awsui_dropdown"],
1083
+ .app-shell-search-input-wrapper [class*="awsui_content"],
1084
+ [class*="awsui_autosuggest"] [class*="awsui_dropdown"],
1085
+ [class*="awsui_autosuggest"] [class*="awsui_content"] {
1086
+ border-radius: 0 !important;
1087
+ }
1088
+
1089
+ /*
1090
+ * Force left alignment - override CloudScape's centered search layout.
1091
+ * Scoped to the global header to avoid impacting AppLayoutToolbar internals.
1092
+ */
1093
+ #global-header [class*="awsui_header"] {
1094
+ gap: 0 !important;
1095
+ }
1096
+
1097
+ /* Logo/identity area */
1098
+ #global-header [class*="awsui_identity"] {
1099
+ padding-inline-start: 8px !important;
1100
+ padding-inline-end: 8px !important;
1101
+ }
1102
+
1103
+ #global-header [class*="awsui_search"],
1104
+ #global-header [data-utility-special="search"] {
1105
+ flex: 0 1 auto !important;
1106
+ justify-content: flex-start !important;
1107
+ margin-inline-start: 0 !important;
1108
+ padding-inline-start: 0 !important;
1109
+ margin-inline-end: auto !important;
1110
+ }
1111
+
1112
+ #global-header [class*="awsui_inputs"] {
1113
+ justify-content: flex-start !important;
1114
+ margin-inline-start: 0 !important;
1115
+ }
1116
+
1117
+ #global-header [class*="awsui_center"] {
1118
+ flex: 0 1 auto !important;
1119
+ justify-content: flex-start !important;
1120
+ }
1121
+
1122
+ /* Keep logo size stable to avoid layout shifts */
1123
+ #global-header [class*="awsui_identity"] img {
1124
+ height: 24px;
1125
+ width: auto;
1126
+ display: block;
1127
+ }
1128
+
1129
+ /*
1130
+ * Remove rounded corners from ALL dropdown menus globally
1131
+ * Cloudscape renders dropdowns in portals at document body level.
1132
+ * Using very specific dropdown selectors to avoid affecting cards/containers.
1133
+ */
1134
+
1135
+ /* Dropdown containers - apply rounded corners */
1136
+ [class*="awsui_dropdown-content-wrapper"] {
1137
+ border-radius: var(--dropdown-border-radius) !important;
1138
+ overflow: hidden !important;
1139
+ }
1140
+ /* Interior elements - no rounded corners (container handles it) */
1141
+ [class*="awsui_dropdown-content"][class*="awsui_interior"],
1142
+ [class*="awsui_list-bottom"],
1143
+ [class*="awsui_open-dropdown"] {
1144
+ border-radius: 0 !important;
1145
+ }
1146
+
1147
+ /* Dropdown list containers */
1148
+ [class*="awsui_options-list"],
1149
+ [class*="awsui_items-list-container"],
1150
+ ul[class*="awsui_options"] {
1151
+ border-radius: 0 !important;
1152
+ }
1153
+
1154
+ /* Individual dropdown/menu items - remove all rounded corners */
1155
+ [class*="awsui_item-element"],
1156
+ li[class*="awsui_option"],
1157
+ [class*="awsui_highlighted"] {
1158
+ border-radius: 0 !important;
1159
+ }
1160
+
1161
+ /* First and last items in dropdown lists */
1162
+ [class*="awsui_options-list"] li:first-child,
1163
+ [class*="awsui_options-list"] li:last-child,
1164
+ [class*="awsui_items-list-container"] li:first-child,
1165
+ [class*="awsui_items-list-container"] li:last-child {
1166
+ border-radius: 0 !important;
1167
+ }
1168
+
1169
+ /*
1170
+ * DROPDOWN BORDER RADIUS OVERRIDE - Scoped to dropdown portals only
1171
+ * CRITICAL: Use body > div[class*="awsui_dropdown"] to avoid affecting tables
1172
+ */
1173
+ body > div[class*="awsui_dropdown"] [class*="awsui_dropdown-content-wrapper"],
1174
+ body > div[class*="awsui_dropdown"] [class*="awsui_interior"],
1175
+ body > div[class*="awsui_dropdown"][class*="awsui_open"],
1176
+ body > div[class*="awsui_dropdown"] ul[class*="awsui_options-list"],
1177
+ body > div[class*="awsui_dropdown"] ul[class*="awsui_items-list"],
1178
+ body > div[class*="awsui_dropdown"] [class*="awsui_items-list-container"],
1179
+ body > div[class*="awsui_dropdown"] li[class*="awsui_option"],
1180
+ body > div[class*="awsui_dropdown"] li[class*="awsui_item-element"],
1181
+ body > div[class*="awsui_dropdown"] li[class*="awsui_highlighted"],
1182
+ body > div[class*="awsui_dropdown"] li,
1183
+ body > div[class*="awsui_dropdown"] li:first-child,
1184
+ body > div[class*="awsui_dropdown"] li:last-child {
1185
+ border-radius: 0 !important;
1186
+ border-top-left-radius: 0 !important;
1187
+ border-top-right-radius: 0 !important;
1188
+ border-bottom-left-radius: 0 !important;
1189
+ border-bottom-right-radius: 0 !important;
1190
+ }
1191
+
1192
+ /* Global header dropdown theme - wrapper containers get rounded corners */
1193
+ body .app-shell-apps-dropdown [class*="awsui_dropdown-content-wrapper"],
1194
+ body .app-shell-search-autosuggest [class*="awsui_dropdown-content-wrapper"],
1195
+ body .app-shell-categories-dropdown [class*="awsui_dropdown-content-wrapper"] {
1196
+ background-color: #171717 !important;
1197
+ color: #f5f5f5 !important;
1198
+ border-radius: var(--dropdown-border-radius) !important;
1199
+ overflow: hidden !important;
1200
+ }
1201
+
1202
+ /* Global header dropdown theme - interior elements no radius */
1203
+ body .app-shell-apps-dropdown [class*="awsui_dropdown"],
1204
+ body .app-shell-search-autosuggest [class*="awsui_dropdown"],
1205
+ body .app-shell-apps-dropdown [class*="awsui_dropdown-content"],
1206
+ body .app-shell-search-autosuggest [class*="awsui_dropdown-content"],
1207
+ body .app-shell-apps-dropdown [class*="awsui_items-list-container"],
1208
+ body .app-shell-search-autosuggest [class*="awsui_items-list-container"],
1209
+ body .app-shell-apps-dropdown [class*="awsui_options-list"],
1210
+ body .app-shell-search-autosuggest [class*="awsui_options-list"],
1211
+ body .app-shell-apps-dropdown ul[class*="awsui"],
1212
+ body .app-shell-search-autosuggest ul[class*="awsui"],
1213
+ body .app-shell-categories-dropdown [class*="awsui_dropdown"],
1214
+ body .app-shell-categories-dropdown [class*="awsui_dropdown-content"],
1215
+ body .app-shell-categories-dropdown [class*="awsui_items-list-container"],
1216
+ body .app-shell-categories-dropdown [class*="awsui_options-list"],
1217
+ body .app-shell-categories-dropdown ul[class*="awsui"] {
1218
+ background-color: #171717 !important;
1219
+ color: #f5f5f5 !important;
1220
+ border-radius: 0 !important;
1221
+ }
1222
+
1223
+ /* Force Apps dropdown to be wide enough for 4 columns */
1224
+ body .app-shell-apps-dropdown [class*="awsui_dropdown"],
1225
+ body .app-shell-apps-dropdown [class*="awsui_dropdown-content-wrapper"],
1226
+ body .app-shell-apps-dropdown [class*="awsui_dropdown-content"],
1227
+ body .app-shell-apps-dropdown [class*="awsui_items-list-container"],
1228
+ body [class*="awsui_dropdown"]:has([aria-label="Apps"]),
1229
+ body [class*="awsui_dropdown-content-wrapper"]:has([aria-label="Apps"]),
1230
+ body [class*="awsui_dropdown-content"]:has([aria-label="Apps"]),
1231
+ body [class*="awsui_items-list-container"]:has([aria-label="Apps"]) {
1232
+ width: 1000px !important;
1233
+ min-width: 1000px !important;
1234
+ max-width: 1180px !important;
1235
+ }
1236
+
1237
+ /* Search results dropdown: keep dark background, text-only hover */
1238
+ body .app-shell-search-autosuggest [class*="awsui_dropdown-content-wrapper"],
1239
+ body .app-shell-search-autosuggest [class*="awsui_dropdown-content"],
1240
+ body .app-shell-search-autosuggest [class*="awsui_interior"],
1241
+ body .app-shell-search-autosuggest [class*="awsui_options-list"],
1242
+ body .app-shell-search-autosuggest [class*="awsui_virtual-list"],
1243
+ body .app-shell-search-autosuggest ul {
1244
+ background-color: #171717 !important;
1245
+ color: #f5f5f5 !important;
1246
+ }
1247
+
1248
+ body .app-shell-search-autosuggest li,
1249
+ body .app-shell-search-autosuggest [class*="awsui_option"],
1250
+ body .app-shell-search-autosuggest [class*="awsui_selectable-item"],
1251
+ body .app-shell-search-autosuggest [class*="awsui_item-element"],
1252
+ body .app-shell-search-autosuggest [class*="awsui_option-content"] {
1253
+ background-color: transparent !important;
1254
+ box-shadow: none !important;
1255
+ border: none !important;
1256
+ outline: none !important;
1257
+ color: #f5f5f5 !important;
1258
+ }
1259
+
1260
+ body .app-shell-search-autosuggest li:hover,
1261
+ body .app-shell-search-autosuggest [class*="awsui_option"]:hover,
1262
+ body .app-shell-search-autosuggest [class*="awsui_selectable-item"]:hover,
1263
+ body .app-shell-search-autosuggest [class*="awsui_item-element"]:hover,
1264
+ body .app-shell-search-autosuggest [class*="awsui_option-content"]:hover,
1265
+ body .app-shell-search-autosuggest [class*="awsui_item-element"]:focus,
1266
+ body .app-shell-search-autosuggest [class*="awsui_item-element"]:focus-visible,
1267
+ body .app-shell-search-autosuggest [class*="awsui_highlighted"],
1268
+ body .app-shell-search-autosuggest [aria-selected="true"] {
1269
+ background-color: transparent !important;
1270
+ box-shadow: none !important;
1271
+ border: none !important;
1272
+ outline: none !important;
1273
+ color: #26c6ff !important;
1274
+ }
1275
+
1276
+ /* Autosuggest dropdown background - force dark theme */
1277
+ [class*="awsui_autosuggest"] [class*="awsui_dropdown-content-wrapper"],
1278
+ [class*="awsui_autosuggest"] [class*="awsui_dropdown-content"],
1279
+ [class*="awsui_autosuggest"] [class*="awsui_interior"],
1280
+ [class*="awsui_autosuggest"] [class*="awsui_options-list"],
1281
+ body [class*="awsui_autosuggest"] ul {
1282
+ background-color: #171717 !important;
1283
+ color: #f5f5f5 !important;
1284
+ }
1285
+
1286
+ [class*="awsui_autosuggest"] li,
1287
+ [class*="awsui_autosuggest"] [class*="awsui_option"] {
1288
+ background-color: transparent !important;
1289
+ color: #f5f5f5 !important;
1290
+ }
1291
+
1292
+ [class*="awsui_autosuggest"] [class*="awsui_highlighted"],
1293
+ [class*="awsui_autosuggest"] li:hover {
1294
+ background-color: transparent !important;
1295
+ color: #26c6ff !important;
1296
+ }
1297
+
1298
+ /* Top navigation dropdowns (apps/search/settings/user) */
1299
+ body .awsui-context-top-navigation [class*="awsui_dropdown-content-wrapper"] {
1300
+ background-color: #171717 !important;
1301
+ border: none !important;
1302
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4) !important;
1303
+ border-radius: var(--dropdown-border-radius) !important;
1304
+ overflow: hidden !important;
1305
+ padding-block: 0 !important;
1306
+ }
1307
+
1308
+ body .awsui-context-top-navigation [class*="awsui_dropdown-content-wrapper"]::after {
1309
+ border: none !important;
1310
+ border-radius: 0 !important;
1311
+ }
1312
+
1313
+ body .awsui-context-top-navigation [class*="awsui_options-list"],
1314
+ body .awsui-context-top-navigation [class*="awsui_items-list-container"] {
1315
+ background-color: #171717 !important;
1316
+ color: #f5f5f5 !important;
1317
+ border: none !important;
1318
+ border-radius: 0 !important;
1319
+ }
1320
+
1321
+ /* Inner content elements - no radius (container handles clipping) */
1322
+ body .awsui-context-top-navigation [class*="awsui_dropdown-content"],
1323
+ body .awsui-context-top-navigation [class*="awsui_dropdown"]::after,
1324
+ body .awsui-context-top-navigation [class*="awsui_dropdown-content-wrapper"]::after {
1325
+ border-radius: 0 !important;
1326
+ border: none !important;
1327
+ box-shadow: none !important;
1328
+ }
1329
+
1330
+ body .awsui-context-top-navigation [class*="awsui_dropdown"] [class*="awsui_focus"],
1331
+ body .awsui-context-top-navigation [class*="awsui_dropdown"] [class*="awsui_focus-ring"] {
1332
+ box-shadow: none !important;
1333
+ outline: none !important;
1334
+ }
1335
+
1336
+ body .awsui-context-top-navigation [class*="awsui_item-element"],
1337
+ body .awsui-context-top-navigation [class*="awsui_option"] {
1338
+ background-color: transparent !important;
1339
+ border: none !important;
1340
+ box-shadow: none !important;
1341
+ outline: none !important;
1342
+ color: #f5f5f5 !important;
1343
+ }
1344
+
1345
+ body .awsui-context-top-navigation [class*="awsui_item-element"]:hover,
1346
+ body .awsui-context-top-navigation [class*="awsui_item-element"]:focus,
1347
+ body .awsui-context-top-navigation [class*="awsui_item-element"]:focus-visible,
1348
+ body .awsui-context-top-navigation [class*="awsui_highlighted"] {
1349
+ background-color: transparent !important;
1350
+ border: none !important;
1351
+ box-shadow: none !important;
1352
+ outline: none !important;
1353
+ color: #26c6ff !important;
1354
+ }
1355
+
1356
+ /* List elements inside dropdown - no radius (container handles clipping) */
1357
+ body ul[aria-label="Apps"],
1358
+ body ul[aria-label="Categories"],
1359
+ body ul[aria-label="Search"] {
1360
+ background-color: #171717 !important;
1361
+ color: #f5f5f5 !important;
1362
+ border-radius: 0 !important;
1363
+ }
1364
+
1365
+ body .app-shell-apps-dropdown li,
1366
+ body .app-shell-categories-dropdown li,
1367
+ body .app-shell-search-autosuggest li,
1368
+ body .app-shell-apps-dropdown [class*="awsui_item-element"],
1369
+ body .app-shell-categories-dropdown [class*="awsui_item-element"],
1370
+ body .app-shell-search-autosuggest [class*="awsui_item-element"] {
1371
+ background-color: transparent !important;
1372
+ border: none !important;
1373
+ box-shadow: none !important;
1374
+ outline: none !important;
1375
+ border-radius: 0 !important;
1376
+ color: #f5f5f5 !important;
1377
+ }
1378
+
1379
+ body ul[aria-label="Apps"] li,
1380
+ body ul[aria-label="Categories"] li,
1381
+ body ul[aria-label="Search"] li,
1382
+ body ul[aria-label="Apps"] [class*="awsui_item-element"],
1383
+ body ul[aria-label="Categories"] [class*="awsui_item-element"],
1384
+ body ul[aria-label="Search"] [class*="awsui_item-element"] {
1385
+ background-color: transparent !important;
1386
+ border: none !important;
1387
+ box-shadow: none !important;
1388
+ outline: none !important;
1389
+ border-radius: 0 !important;
1390
+ color: #f5f5f5 !important;
1391
+ }
1392
+
1393
+ body .app-shell-apps-dropdown [class*="awsui_item-element"]:hover,
1394
+ body .app-shell-categories-dropdown [class*="awsui_item-element"]:hover,
1395
+ body .app-shell-search-autosuggest [class*="awsui_item-element"]:hover,
1396
+ body .app-shell-apps-dropdown [class*="awsui_item-element"]:focus,
1397
+ body .app-shell-categories-dropdown [class*="awsui_item-element"]:focus,
1398
+ body .app-shell-search-autosuggest [class*="awsui_item-element"]:focus,
1399
+ body .app-shell-apps-dropdown [class*="awsui_item-element"]:focus-visible,
1400
+ body .app-shell-categories-dropdown [class*="awsui_item-element"]:focus-visible,
1401
+ body .app-shell-search-autosuggest [class*="awsui_item-element"]:focus-visible,
1402
+ body .app-shell-apps-dropdown [class*="awsui_highlighted"],
1403
+ body .app-shell-categories-dropdown [class*="awsui_highlighted"],
1404
+ body .app-shell-search-autosuggest [class*="awsui_highlighted"] {
1405
+ background-color: transparent !important;
1406
+ border: none !important;
1407
+ box-shadow: none !important;
1408
+ outline: none !important;
1409
+ color: #26c6ff !important;
1410
+ }
1411
+
1412
+ body ul[aria-label="Apps"] [class*="awsui_item-element"]:hover,
1413
+ body ul[aria-label="Categories"] [class*="awsui_item-element"]:hover,
1414
+ body ul[aria-label="Search"] [class*="awsui_item-element"]:hover,
1415
+ body ul[aria-label="Apps"] [class*="awsui_item-element"]:focus,
1416
+ body ul[aria-label="Categories"] [class*="awsui_item-element"]:focus,
1417
+ body ul[aria-label="Search"] [class*="awsui_item-element"]:focus,
1418
+ body ul[aria-label="Apps"] [class*="awsui_item-element"]:focus-visible,
1419
+ body ul[aria-label="Categories"] [class*="awsui_item-element"]:focus-visible,
1420
+ body ul[aria-label="Search"] [class*="awsui_item-element"]:focus-visible,
1421
+ body ul[aria-label="Apps"] [class*="awsui_highlighted"],
1422
+ body ul[aria-label="Categories"] [class*="awsui_highlighted"],
1423
+ body ul[aria-label="Search"] [class*="awsui_highlighted"] {
1424
+ background-color: transparent !important;
1425
+ border: none !important;
1426
+ box-shadow: none !important;
1427
+ outline: none !important;
1428
+ color: #26c6ff !important;
1429
+ }
1430
+
1431
+ body ul[aria-label="Apps"] a:focus-visible,
1432
+ body ul[aria-label="Categories"] a:focus-visible,
1433
+ body ul[aria-label="Search"] a:focus-visible,
1434
+ body ul[aria-label="Apps"] button:focus-visible,
1435
+ body ul[aria-label="Categories"] button:focus-visible,
1436
+ body ul[aria-label="Search"] button:focus-visible {
1437
+ outline: none !important;
1438
+ box-shadow: none !important;
1439
+ }
1440
+
1441
+ /* Make the "All services" dropdown wider + multi-column */
1442
+ body ul[aria-label="Apps"] {
1443
+ display: block !important;
1444
+ column-count: 4 !important;
1445
+ column-width: 220px !important;
1446
+ column-gap: 20px !important;
1447
+ column-fill: balance;
1448
+ min-width: 960px !important;
1449
+ max-width: 1180px !important;
1450
+ padding-block: 16px !important;
1451
+ }
1452
+
1453
+ body ul[aria-label="Apps"] > li {
1454
+ break-inside: avoid;
1455
+ }
1456
+
1457
+ body ul[aria-label="Apps"] [class*="awsui_item-element"] {
1458
+ width: 100%;
1459
+ }
1460
+
1461
+ /* Settings and User dropdown - remove gap from header */
1462
+ body ul[aria-label="Settings"],
1463
+ body ul[aria-label="User menu"] {
1464
+ padding: 4px 0 !important;
1465
+ min-width: 140px !important;
1466
+ }
1467
+
1468
+ /* Categories dropdown - match standard dropdown padding */
1469
+ body ul[aria-label="Categories"] {
1470
+ padding: 4px 0 !important;
1471
+ min-width: 220px !important;
1472
+ }
1473
+
1474
+ body ul[aria-label="Categories"] [class*="awsui_item-element"] {
1475
+ padding: 4px 12px !important;
1476
+ }
1477
+
1478
+ /* Remove the gap between header and Settings/User dropdowns */
1479
+ #global-header [class*="awsui_menu-dropdown"] [class*="awsui_dropdown-content-wrapper"],
1480
+ body .awsui-context-top-navigation [class*="awsui_menu-dropdown"] [class*="awsui_dropdown-content-wrapper"] {
1481
+ margin-top: -8px !important;
1482
+ top: 100% !important;
1483
+ padding-top: 0 !important;
1484
+ }
1485
+
1486
+ #global-header [class*="awsui_menu-dropdown"] [class*="awsui_dropdown"],
1487
+ body .awsui-context-top-navigation [class*="awsui_menu-dropdown"] [class*="awsui_dropdown"] {
1488
+ margin-top: -8px !important;
1489
+ padding-top: 0 !important;
1490
+ }
1491
+
1492
+ /* Portal dropdowns for Settings/User - force flush to header with rounded corners */
1493
+ body [class*="awsui_dropdown-content-wrapper"]:has(ul[aria-label="Settings"]),
1494
+ body [class*="awsui_dropdown-content-wrapper"]:has(ul[aria-label="User menu"]) {
1495
+ margin-top: -8px !important;
1496
+ transform: translateY(-8px) !important;
1497
+ border-radius: var(--dropdown-border-radius) !important;
1498
+ overflow: hidden !important;
1499
+ }
1500
+
1501
+ /* Target portal-rendered Settings/User dropdowns and remove gap */
1502
+ body > div[class*="awsui"] [class*="awsui_dropdown-content-wrapper"] {
1503
+ margin-top: 0 !important;
1504
+ }
1505
+
1506
+ body > div[class*="awsui"][class*="awsui_dropdown"] {
1507
+ margin-top: 0 !important;
1508
+ padding-top: 0 !important;
1509
+ }
1510
+
1511
+ body ul[aria-label="Settings"] [class*="awsui_item-element"],
1512
+ body ul[aria-label="User menu"] [class*="awsui_item-element"] {
1513
+ padding: 4px 12px !important;
1514
+ }
1515
+
1516
+ /* General top navigation dropdown list padding */
1517
+ body .awsui-context-top-navigation [class*="awsui_items-list-container"] ul {
1518
+ padding: 4px 0 !important;
1519
+ }
1520
+
1521
+ body .awsui-context-top-navigation [class*="awsui_items-list-container"] [class*="awsui_item-element"] {
1522
+ padding: 4px 12px !important;
1523
+ }
1524
+
1525
+ /*
1526
+ * Comprehensive dropdown border-radius styling
1527
+ * Targets: Apps dropdown, Autosuggest, ButtonDropdown, all menu types
1528
+ * Uses --dropdown-border-radius variable for consistent rounded corners
1529
+ */
1530
+
1531
+ /* Autosuggest dropdown containers - apply rounded corners */
1532
+ [class*="awsui_autosuggest"] [class*="awsui_dropdown-content-wrapper"] {
1533
+ border-radius: var(--dropdown-border-radius) !important;
1534
+ overflow: hidden !important;
1535
+ }
1536
+ [class*="awsui_autosuggest"] [class*="awsui_interior"],
1537
+ [class*="awsui_autosuggest"] [class*="awsui_dropdown-content"],
1538
+ [class*="awsui_autosuggest"] ul,
1539
+ [class*="awsui_autosuggest"] li {
1540
+ border-radius: 0 !important;
1541
+ }
1542
+
1543
+ /* ButtonDropdown containers (Apps button, Settings, Profile) - apply rounded corners */
1544
+ [class*="awsui_button-dropdown"] [class*="awsui_dropdown-content-wrapper"] {
1545
+ border-radius: var(--dropdown-border-radius) !important;
1546
+ overflow: hidden !important;
1547
+ }
1548
+ [class*="awsui_button-dropdown"] [class*="awsui_interior"],
1549
+ [class*="awsui_button-dropdown"] [class*="awsui_dropdown-content"],
1550
+ [class*="awsui_button-dropdown"] ul,
1551
+ [class*="awsui_button-dropdown"] li {
1552
+ border-radius: 0 !important;
1553
+ }
1554
+
1555
+ /* Top navigation menu containers - apply rounded corners */
1556
+ [class*="awsui_menu-dropdown"] [class*="awsui_dropdown-content-wrapper"] {
1557
+ border-radius: var(--dropdown-border-radius) !important;
1558
+ overflow: hidden !important;
1559
+ }
1560
+ [class*="awsui_menu-dropdown"] [class*="awsui_interior"],
1561
+ [class*="awsui_menu-dropdown"] ul,
1562
+ [class*="awsui_menu-dropdown"] li {
1563
+ border-radius: 0 !important;
1564
+ }
1565
+
1566
+ /* Select component dropdown containers - apply rounded corners */
1567
+ [class*="awsui_select"] [class*="awsui_dropdown-content-wrapper"],
1568
+ [class*="awsui_select-dropdown"] [class*="awsui_dropdown-content-wrapper"] {
1569
+ border-radius: var(--dropdown-border-radius) !important;
1570
+ overflow: hidden !important;
1571
+ }
1572
+ [class*="awsui_select"] [class*="awsui_interior"],
1573
+ [class*="awsui_select"] [class*="awsui_dropdown-content"],
1574
+ [class*="awsui_select"] ul,
1575
+ [class*="awsui_select"] li,
1576
+ [class*="awsui_select-dropdown"] [class*="awsui_interior"],
1577
+ [class*="awsui_select-dropdown"] ul,
1578
+ [class*="awsui_select-dropdown"] li {
1579
+ border-radius: 0 !important;
1580
+ }
1581
+
1582
+ /* Multiselect component dropdown containers - apply rounded corners */
1583
+ [class*="awsui_multiselect"] [class*="awsui_dropdown-content-wrapper"] {
1584
+ border-radius: var(--dropdown-border-radius) !important;
1585
+ overflow: hidden !important;
1586
+ }
1587
+ [class*="awsui_multiselect"] [class*="awsui_interior"],
1588
+ [class*="awsui_multiselect"] [class*="awsui_dropdown-content"],
1589
+ [class*="awsui_multiselect"] ul,
1590
+ [class*="awsui_multiselect"] li {
1591
+ border-radius: 0 !important;
1592
+ }
1593
+
1594
+ /*
1595
+ * DROPDOWN PORTAL STYLES - All scoped to body > div[class*="awsui_dropdown"]
1596
+ * CRITICAL: Avoids affecting table cells which also use "interior" class patterns
1597
+ * Uses --dropdown-border-radius for consistent rounded corners on containers
1598
+ */
1599
+
1600
+ /* Portal-rendered dropdown containers - apply rounded corners */
1601
+ body > div[class*="awsui_dropdown"] [class*="awsui_dropdown-content-wrapper"],
1602
+ body > div[class*="awsui_select"] [class*="awsui_dropdown-content-wrapper"],
1603
+ body > div[class*="awsui_multiselect"] [class*="awsui_dropdown-content-wrapper"] {
1604
+ border-radius: var(--dropdown-border-radius) !important;
1605
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
1606
+ outline: none !important;
1607
+ border: none !important;
1608
+ overflow: hidden !important;
1609
+ }
1610
+
1611
+ /* Universal portal dropdown wrappers - ensure rounded corners for all Cloudscape dropdowns */
1612
+ body > div[class*="awsui"][class*="dropdown"] [class*="awsui_dropdown-content-wrapper"],
1613
+ body > div[class*="awsui"] > [class*="awsui_dropdown-content-wrapper"],
1614
+ body > div[class*="awsui"] [class*="awsui_dropdown-content-wrapper"] {
1615
+ border-radius: var(--dropdown-border-radius) !important;
1616
+ overflow: hidden !important;
1617
+ }
1618
+
1619
+ /* Interior and list elements - no rounded corners (container handles it) */
1620
+ body > div[class*="awsui_dropdown"] [class*="awsui_interior"],
1621
+ body > div[class*="awsui_dropdown"] [class*="awsui_content-wrapper"],
1622
+ body > div[class*="awsui_dropdown"] ul[class*="awsui"],
1623
+ body > div[class*="awsui_dropdown"] li[class*="awsui"],
1624
+ body > div[class*="awsui_select"] [class*="awsui_interior"],
1625
+ body > div[class*="awsui_select"] ul[class*="awsui"],
1626
+ body > div[class*="awsui_select"] li[class*="awsui"],
1627
+ body > div[class*="awsui_multiselect"] [class*="awsui_interior"],
1628
+ body > div[class*="awsui_multiselect"] ul[class*="awsui"],
1629
+ body > div[class*="awsui_multiselect"] li[class*="awsui"] {
1630
+ border-radius: 0 !important;
1631
+ }
1632
+
1633
+ /* List items inside dropdown portals only */
1634
+ body > div[class*="awsui_dropdown"] [class*="awsui_list"] li,
1635
+ body > div[class*="awsui_dropdown"] ul li {
1636
+ border-radius: 0 !important;
1637
+ }
1638
+
1639
+ /* Interior wrapper inside dropdown portals */
1640
+ body > div[class*="awsui_dropdown"] [class*="awsui_interior"],
1641
+ body > div[class*="awsui_select"] [class*="awsui_interior"],
1642
+ body > div[class*="awsui_multiselect"] [class*="awsui_interior"] {
1643
+ border-radius: 0 !important;
1644
+ box-shadow: none !important;
1645
+ outline: none !important;
1646
+ border: none !important;
1647
+ }
1648
+
1649
+ /* Inner elements inside dropdown portals */
1650
+ body > div[class*="awsui_dropdown"] [class*="awsui_dropdown-content-wrapper"] > *,
1651
+ body > div[class*="awsui_dropdown"] [class*="awsui_dropdown-content"],
1652
+ body > div[class*="awsui_dropdown"] [class*="awsui_dropdown-content"] > * {
1653
+ border-radius: 0 !important;
1654
+ box-shadow: none !important;
1655
+ outline: none !important;
1656
+ border: none !important;
1657
+ }
1658
+
1659
+ /* Pseudo-elements inside dropdown portals */
1660
+ body > div[class*="awsui_dropdown"]::before,
1661
+ body > div[class*="awsui_dropdown"]::after,
1662
+ body > div[class*="awsui_dropdown"] *::before,
1663
+ body > div[class*="awsui_dropdown"] *::after {
1664
+ border-radius: 0 !important;
1665
+ box-shadow: none !important;
1666
+ outline: none !important;
1667
+ border: none !important;
1668
+ display: none !important;
1669
+ }
1670
+
1671
+ /* Options list inside dropdown portals */
1672
+ body > div[class*="awsui_dropdown"] [class*="awsui_optionsList"],
1673
+ body > div[class*="awsui_dropdown"] [class*="awsui_options-list"],
1674
+ body > div[class*="awsui_dropdown"] [class*="awsui_virtual-list"],
1675
+ body > div[class*="awsui_select"] [class*="awsui_optionsList"],
1676
+ body > div[class*="awsui_select"] [class*="awsui_options-list"],
1677
+ body > div[class*="awsui_select"] [class*="awsui_virtual-list"],
1678
+ body > div[class*="awsui_multiselect"] [class*="awsui_optionsList"],
1679
+ body > div[class*="awsui_multiselect"] [class*="awsui_options-list"],
1680
+ body > div[class*="awsui_multiselect"] [class*="awsui_virtual-list"] {
1681
+ border-radius: 0 !important;
1682
+ box-shadow: none !important;
1683
+ border: none !important;
1684
+ }
1685
+
1686
+ /* Focus rings inside dropdown portals */
1687
+ body > div[class*="awsui_dropdown"] *:focus,
1688
+ body > div[class*="awsui_dropdown"] *:focus-visible,
1689
+ body > div[class*="awsui_dropdown"] *:focus-within {
1690
+ outline: none !important;
1691
+ box-shadow: none !important;
1692
+ }
1693
+
1694
+ /* All element types inside dropdown portals */
1695
+ body > div[class*="awsui_dropdown"] div,
1696
+ body > div[class*="awsui_dropdown"] ul,
1697
+ body > div[class*="awsui_dropdown"] li,
1698
+ body > div[class*="awsui_dropdown"] span,
1699
+ body > div[class*="awsui_dropdown"] a,
1700
+ body > div[class*="awsui_dropdown"] button {
1701
+ border-radius: 0 !important;
1702
+ }
1703
+
1704
+ /* Hover styling inside dropdown portals */
1705
+ body > div[class*="awsui_dropdown"] [role="option"]:hover,
1706
+ body > div[class*="awsui_dropdown"] [role="menuitem"]:hover,
1707
+ body > div[class*="awsui_dropdown"] [role="menuitemcheckbox"]:hover,
1708
+ body > div[class*="awsui_dropdown"] [role="menuitemradio"]:hover,
1709
+ body > div[class*="awsui_dropdown"] [role="option"][aria-selected="true"],
1710
+ body > div[class*="awsui_dropdown"] [role="menuitem"][aria-selected="true"] {
1711
+ color: #26c6ff !important;
1712
+ background-color: transparent !important;
1713
+ }
1714
+
1715
+ body > div[class*="awsui_dropdown"] [role="option"]:hover *,
1716
+ body > div[class*="awsui_dropdown"] [role="menuitem"]:hover *,
1717
+ body > div[class*="awsui_dropdown"] [role="menuitemcheckbox"]:hover *,
1718
+ body > div[class*="awsui_dropdown"] [role="menuitemradio"]:hover *,
1719
+ body > div[class*="awsui_dropdown"] [role="option"][aria-selected="true"] *,
1720
+ body > div[class*="awsui_dropdown"] [role="menuitem"][aria-selected="true"] * {
1721
+ color: #26c6ff !important;
1722
+ }
1723
+
1724
+ /* ---break---
1725
+ */
1726
+
1727
+ .dark {
1728
+ /* Core shadcn/ui dark mode variables */
1729
+ --background: oklch(0.145 0 0);
1730
+ --foreground: oklch(0.985 0 0);
1731
+ --card: oklch(0.205 0 0);
1732
+ --card-foreground: oklch(0.985 0 0);
1733
+ --popover: oklch(0.205 0 0);
1734
+ --popover-foreground: oklch(0.985 0 0);
1735
+ --primary: oklch(0.922 0 0);
1736
+ --primary-foreground: oklch(0.205 0 0);
1737
+ --secondary: oklch(0.269 0 0);
1738
+ --secondary-foreground: oklch(0.985 0 0);
1739
+ --muted: oklch(0.269 0 0);
1740
+ --muted-foreground: oklch(0.708 0 0);
1741
+ --accent: oklch(0.269 0 0);
1742
+ --accent-foreground: oklch(0.985 0 0);
1743
+ --destructive: oklch(0.704 0.191 22.216);
1744
+ --border: oklch(1 0 0 / 10%);
1745
+ --input: oklch(1 0 0 / 15%);
1746
+ --ring: oklch(0.556 0 0);
1747
+ --chart-1: oklch(0.488 0.243 264.376);
1748
+ --chart-2: oklch(0.696 0.17 162.48);
1749
+ --chart-3: oklch(0.769 0.188 70.08);
1750
+ --chart-4: oklch(0.627 0.265 303.9);
1751
+ --chart-5: oklch(0.645 0.246 16.439);
1752
+
1753
+ /* Sidebar dark mode */
1754
+ --sidebar: oklch(0.205 0 0);
1755
+ --sidebar-foreground: oklch(0.985 0 0);
1756
+ --sidebar-primary: oklch(0.488 0.243 264.376);
1757
+ --sidebar-primary-foreground: oklch(0.985 0 0);
1758
+ --sidebar-accent: oklch(0.269 0 0);
1759
+ --sidebar-accent-foreground: oklch(0.985 0 0);
1760
+ --sidebar-border: oklch(1 0 0 / 10%);
1761
+ --sidebar-ring: oklch(0.556 0 0);
1762
+
1763
+ /* Alert/status dark mode */
1764
+ --destructive-foreground: var(--color-red-600);
1765
+ --success: var(--color-emerald-500);
1766
+ --success-foreground: var(--color-emerald-600);
1767
+ --info: var(--color-violet-500);
1768
+ --info-foreground: var(--color-violet-600);
1769
+ --warning: var(--color-yellow-500);
1770
+ --warning-foreground: var(--color-yellow-600);
1771
+ --invert: var(--color-zinc-700);
1772
+ --invert-foreground: var(--color-zinc-50);
1773
+ }
1774
+
1775
+ /* ---break---
1776
+ */
1777
+
1778
+ @theme inline {
1779
+ /* Radius mappings for Tailwind classes */
1780
+ --radius-sm: calc(var(--radius) - 4px);
1781
+ --radius-md: calc(var(--radius) - 2px);
1782
+ --radius-lg: var(--radius);
1783
+ --radius-xl: calc(var(--radius) + 4px);
1784
+ --radius-2xl: calc(var(--radius) + 8px);
1785
+ --radius-3xl: calc(var(--radius) + 12px);
1786
+ --radius-4xl: calc(var(--radius) + 16px);
1787
+
1788
+ /* Core color mappings for Tailwind classes (bg-background, text-foreground, etc.) */
1789
+ --color-background: var(--background);
1790
+ --color-foreground: var(--foreground);
1791
+ --color-card: var(--card);
1792
+ --color-card-foreground: var(--card-foreground);
1793
+ --color-popover: var(--popover);
1794
+ --color-popover-foreground: var(--popover-foreground);
1795
+ --color-primary: var(--primary);
1796
+ --color-primary-foreground: var(--primary-foreground);
1797
+ --color-secondary: var(--secondary);
1798
+ --color-secondary-foreground: var(--secondary-foreground);
1799
+ --color-muted: var(--muted);
1800
+ --color-muted-foreground: var(--muted-foreground);
1801
+ --color-accent: var(--accent);
1802
+ --color-accent-foreground: var(--accent-foreground);
1803
+ --color-destructive: var(--destructive);
1804
+ --color-destructive-foreground: var(--destructive-foreground);
1805
+ --color-border: var(--border);
1806
+ --color-input: var(--input);
1807
+ --color-ring: var(--ring);
1808
+ --color-chart-1: var(--chart-1);
1809
+ --color-chart-2: var(--chart-2);
1810
+ --color-chart-3: var(--chart-3);
1811
+ --color-chart-4: var(--chart-4);
1812
+ --color-chart-5: var(--chart-5);
1813
+
1814
+ /* Sidebar color mappings */
1815
+ --color-sidebar: var(--sidebar);
1816
+ --color-sidebar-foreground: var(--sidebar-foreground);
1817
+ --color-sidebar-primary: var(--sidebar-primary);
1818
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
1819
+ --color-sidebar-accent: var(--sidebar-accent);
1820
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
1821
+ --color-sidebar-border: var(--sidebar-border);
1822
+ --color-sidebar-ring: var(--sidebar-ring);
1823
+
1824
+ /* Status color mappings */
1825
+ --color-success: var(--success);
1826
+ --color-success-foreground: var(--success-foreground);
1827
+ --color-info: var(--info);
1828
+ --color-info-foreground: var(--info-foreground);
1829
+ --color-warning: var(--warning);
1830
+ --color-warning-foreground: var(--warning-foreground);
1831
+ --color-invert: var(--invert);
1832
+ --color-invert-foreground: var(--invert-foreground);
1833
+ }
1834
+
1835
+ /* ---break---
1836
+ */
1837
+
1838
+ @layer base {
1839
+ * {
1840
+ border-color: var(--border, currentColor);
1841
+ outline-color: color-mix(in oklch, var(--ring, currentColor) 50%, transparent);
1842
+ }
1843
+ body {
1844
+ background-color: var(--background);
1845
+ color: var(--foreground);
1846
+ }
1847
+ }
1848
+
1849
+ /* ---break---
1850
+ */
1851
+
1852
+ @layer base {
1853
+ * {
1854
+ @apply border-border outline-ring/50;
1855
+ }
1856
+ body {
1857
+ @apply bg-background text-foreground;
1858
+ }
1859
+ }