diff --git a/packages/eui/.loki/reference/chrome_desktop_Layout_EuiBottomBar_Playground.png b/packages/eui/.loki/reference/chrome_desktop_Layout_EuiBottomBar_Playground.png
index 0e846cd94d6..9fdbb5f4f2d 100644
Binary files a/packages/eui/.loki/reference/chrome_desktop_Layout_EuiBottomBar_Playground.png and b/packages/eui/.loki/reference/chrome_desktop_Layout_EuiBottomBar_Playground.png differ
diff --git a/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Multi.png b/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Multi.png
index 012997da2b2..89086b64ec4 100644
Binary files a/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Multi.png and b/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Multi.png differ
diff --git a/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Single.png b/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Single.png
index e8b3ef6aded..29494bac354 100644
Binary files a/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Single.png and b/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Single.png differ
diff --git a/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_High_Contrast.png b/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_High_Contrast.png
new file mode 100644
index 00000000000..6bb58932d0e
Binary files /dev/null and b/packages/eui/.loki/reference/chrome_desktop_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_High_Contrast.png differ
diff --git a/packages/eui/.loki/reference/chrome_mobile_Layout_EuiBottomBar_Playground.png b/packages/eui/.loki/reference/chrome_mobile_Layout_EuiBottomBar_Playground.png
index 8c39832ab66..17d0c9f0672 100644
Binary files a/packages/eui/.loki/reference/chrome_mobile_Layout_EuiBottomBar_Playground.png and b/packages/eui/.loki/reference/chrome_mobile_Layout_EuiBottomBar_Playground.png differ
diff --git a/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Multi.png b/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Multi.png
index f2769fefd26..1a006e04af8 100644
Binary files a/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Multi.png and b/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Multi.png differ
diff --git a/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Single.png b/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Single.png
index 34ab0a5ceae..ea990687571 100644
Binary files a/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Single.png and b/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_Checkable_Single.png differ
diff --git a/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_High_Contrast.png b/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_High_Contrast.png
new file mode 100644
index 00000000000..89f1f28be1b
Binary files /dev/null and b/packages/eui/.loki/reference/chrome_mobile_Navigation_EuiKeyPadMenu_EuiKeyPadMenu_High_Contrast.png differ
diff --git a/packages/eui/src/components/bottom_bar/bottom_bar.styles.ts b/packages/eui/src/components/bottom_bar/bottom_bar.styles.ts
index eb6dd268e90..df1d825f765 100644
--- a/packages/eui/src/components/bottom_bar/bottom_bar.styles.ts
+++ b/packages/eui/src/components/bottom_bar/bottom_bar.styles.ts
@@ -7,8 +7,9 @@
*/
import { css, keyframes } from '@emotion/react';
-import { euiCanAnimate } from '../../global_styling';
import { UseEuiTheme, shade } from '../../services';
+import { euiCanAnimate, logicalCSS } from '../../global_styling';
+import { highContrastModeStyles } from '../../global_styling/functions/high_contrast';
import { euiShadowFlat } from '../../themes/amsterdam/global_styling/mixins';
const euiBottomBarAppear = keyframes`
@@ -30,8 +31,12 @@ export const euiBottomBarStyles = (euiThemeContext: UseEuiTheme) => {
// Base
// `color` is inherited from the wrapping `EuiThemeProvider colorMode="dark"`
euiBottomBar: css`
- ${euiShadowFlat(euiThemeContext)}
- background: ${shade(euiTheme.colors.lightestShade, 0.5)};
+ background-color: ${shade(euiTheme.colors.lightestShade, 0.5)};
+ ${logicalCSS('border-top', euiTheme.border.thin)}
+ ${highContrastModeStyles(euiThemeContext, {
+ none: euiShadowFlat(euiThemeContext),
+ })}
+
${euiCanAnimate} {
animation: ${euiBottomBarAppear} ${euiTheme.animation.slow}
${euiTheme.animation.resistance};
diff --git a/packages/eui/src/components/image/image.styles.ts b/packages/eui/src/components/image/image.styles.ts
index 0fd1c6e3d2a..b192f5862ea 100644
--- a/packages/eui/src/components/image/image.styles.ts
+++ b/packages/eui/src/components/image/image.styles.ts
@@ -8,6 +8,7 @@
import { css } from '@emotion/react';
import { logicalCSS } from '../../global_styling';
+import { highContrastModeStyles } from '../../global_styling/functions/high_contrast';
import { UseEuiTheme } from '../../services';
import { euiShadow } from '../../themes/amsterdam/global_styling/mixins';
@@ -27,9 +28,12 @@ export const euiImageStyles = (euiThemeContext: UseEuiTheme) => ({
position: relative;
${logicalCSS('max-height', '80vh')}
${logicalCSS('max-width', '80vw')}
+ ${highContrastModeStyles(euiThemeContext, {
+ preferred: `border: ${euiThemeContext.euiTheme.border.thin};`,
+ })}
`,
hasShadow: css`
- ${euiShadow(euiThemeContext, 's')}
+ ${euiShadow(euiThemeContext, 's', { borderAllInHighContrastMode: true })}
`,
// Sizes
// These sizes are mostly suggestions. Don't look too hard for meaning in their values.
diff --git a/packages/eui/src/components/key_pad_menu/key_pad_menu.stories.tsx b/packages/eui/src/components/key_pad_menu/key_pad_menu.stories.tsx
index 8f0ca82aa02..e730c3e30bd 100644
--- a/packages/eui/src/components/key_pad_menu/key_pad_menu.stories.tsx
+++ b/packages/eui/src/components/key_pad_menu/key_pad_menu.stories.tsx
@@ -223,3 +223,40 @@ export const CheckableMulti: Story = {
},
render: (args) => ,
};
+
+export const HighContrast: Story = {
+ tags: ['vrt-only'],
+ globals: { highContrastMode: true },
+ args: {
+ children: [
+
+
+ ,
+
+
+ ,
+
+
+ ,
+
+
+ ,
+
+
+ ,
+
+
+ ,
+ ],
+ },
+};
diff --git a/packages/eui/src/components/key_pad_menu/key_pad_menu_item.styles.ts b/packages/eui/src/components/key_pad_menu/key_pad_menu_item.styles.ts
index 36b74f003ef..5c851c77aff 100644
--- a/packages/eui/src/components/key_pad_menu/key_pad_menu_item.styles.ts
+++ b/packages/eui/src/components/key_pad_menu/key_pad_menu_item.styles.ts
@@ -15,6 +15,7 @@ import {
euiCanAnimate,
euiFontSize,
} from '../../global_styling';
+import { highContrastModeStyles } from '../../global_styling/functions/high_contrast';
import { euiShadow } from '../../themes/amsterdam/global_styling/mixins';
import { euiScreenReaderOnly } from '../accessibility';
@@ -38,12 +39,17 @@ export const euiKeyPadMenuItemStyles = (euiThemeContext: UseEuiTheme) => {
}
`,
enabled: css`
- &:hover,
- &:focus,
- &:focus-within {
+ &:is(:hover, :focus, :focus-within) {
cursor: pointer;
text-decoration: underline;
- ${euiShadow(euiThemeContext, 's')}
+
+ ${highContrastModeStyles(euiThemeContext, {
+ none: euiShadow(euiThemeContext, 's'),
+ // Use `outline` instead of border to avoid affecting absolutely positioned children
+ preferred: `
+ outline: ${euiTheme.border.width.thin} solid ${euiTheme.colors.primary};
+ `,
+ })}
${euiCanAnimate} {
.euiKeyPadMenuItem__icon {
@@ -61,11 +67,19 @@ export const euiKeyPadMenuItemStyles = (euiThemeContext: UseEuiTheme) => {
color: ${euiTheme.colors.title};
background-color: ${euiTheme.focus.backgroundColor};
- &,
- &:hover,
- &:focus,
- &:focus-within {
+ &:is(*, :hover, :focus, :focus-within) {
color: ${euiTheme.colors.primaryText};
+
+ ${highContrastModeStyles(euiThemeContext, {
+ // Skip checkable items (which render a