diff --git a/packages/component-header-footer/public/assets/icons/menu-search-icon.png b/packages/component-header-footer/public/assets/icons/menu-search-icon.png
new file mode 100644
index 0000000000..e3a14e52a1
Binary files /dev/null and b/packages/component-header-footer/public/assets/icons/menu-search-icon.png differ
diff --git a/packages/component-header-footer/public/assets/icons/menu-search-icon.svg b/packages/component-header-footer/public/assets/icons/menu-search-icon.svg
new file mode 100644
index 0000000000..0db8c077fb
--- /dev/null
+++ b/packages/component-header-footer/public/assets/icons/menu-search-icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/packages/component-header-footer/src/header/colors.js b/packages/component-header-footer/src/header/colors.js
new file mode 100644
index 0000000000..2a909e52be
--- /dev/null
+++ b/packages/component-header-footer/src/header/colors.js
@@ -0,0 +1,36 @@
+/**
+ * Centralized color constants for ASU Header components
+ *
+ * This file contains all color values used across header styles.
+ * Import these constants instead of using hardcoded hex values.
+ */
+
+// Primary ASU Brand Colors
+export const ASU_MAROON = "#8c1d40";
+export const ASU_GOLD = "#ffc627";
+
+// Grayscale Colors
+export const ASU_WHITE = "#ffffff";
+export const ASU_BLACK = "#000000";
+export const ASU_GRAY1 = "#191919";
+export const ASU_GRAY2 = "#484848";
+export const ASU_GRAY3 = "#747474";
+export const ASU_GRAY4 = "#BFBFBF";
+export const ASU_GRAY5 = "#d0d0d0";
+export const GASU_GRAY6 = "#e8e8e8";
+export const GRAY_BUTTON_DISABLED = "#bfbfbf";
+
+// Bootstrap/Framework Colors
+export const BOOTSTRAP_TEXT_MUTED = "#495057";
+
+// Semantic Color Aliases (for better readability in context)
+export const TEXT_PRIMARY = ASU_GRAY1;
+export const TEXT_SECONDARY = ASU_GRAY2;
+export const TEXT_MUTED = BOOTSTRAP_TEXT_MUTED;
+export const BACKGROUND_PRIMARY = ASU_WHITE;
+export const BACKGROUND_SECONDARY = GASU_GRAY6;
+export const BORDER_PRIMARY = ASU_GRAY5;
+export const BORDER_SECONDARY = ASU_GRAY4;
+export const BORDER_DARK = ASU_GRAY3;
+export const ACCENT_PRIMARY = ASU_MAROON;
+export const ACCENT_SECONDARY = ASU_GOLD;
diff --git a/packages/component-header-footer/src/header/components/Button/index.js b/packages/component-header-footer/src/header/components/Button/index.js
index 78338d8d53..6209b6494c 100644
--- a/packages/component-header-footer/src/header/components/Button/index.js
+++ b/packages/component-header-footer/src/header/components/Button/index.js
@@ -13,14 +13,28 @@ import { ButtonWrapper } from "./index.styles";
* @returns {JSX.Element}
*/
-const Button = ({ href, color, text, classes, onClick, onFocus }) => {
+/**
+ * A reusable button component that renders a ButtonWrapper with customizable properties.
+ *
+ * @param {Object} props - The component props
+ * @param {string} [props.href] - The URL to navigate to when the button is clicked (for link buttons)
+ * @param {string} props.color - The color variant for the button styling
+ * @param {string} props.text - The text content to display inside the button
+ * @param {string} [props.classes] - Additional CSS classes to apply to the button
+ * @param {function} [props.onClick] - Event handler function called when the button is clicked
+ * @param {function} [props.onFocus] - Event handler function called when the button receives focus
+ * @param {string|React.Component} [props.as] - The element type or component to render as
+ * @returns {JSX.Element} The rendered button component
+ */
+const Button = ({ href, color, text, classes, onClick, onFocus, as, ...props }) => {
return (
onClick(event) : undefined}
+ onFocus={onFocus ? (event) => onFocus(event) : undefined}
+ as={as}
+ {...props}
>
{text}
diff --git a/packages/component-header-footer/src/header/components/Button/index.styles.js b/packages/component-header-footer/src/header/components/Button/index.styles.js
index bb59b58b54..568ec5e4de 100644
--- a/packages/component-header-footer/src/header/components/Button/index.styles.js
+++ b/packages/component-header-footer/src/header/components/Button/index.styles.js
@@ -1,9 +1,17 @@
import styled from "styled-components";
+import {
+ ASU_GRAY1,
+ ASU_BLACK,
+ ASU_WHITE,
+ GRAY_BUTTON_DISABLED,
+ ASU_GOLD,
+ ASU_MAROON
+} from "../../colors";
const ButtonWrapper = styled.a`
font-family: Arial, Helvetica, "Nimbus Sans L", "Liberation Sans", FreeSans,
sans-serif;
- color: #191919;
+ color: ${ASU_GRAY1};
padding: 0.5rem 1rem;
border-radius: 400rem;
font-weight: 700;
@@ -17,20 +25,20 @@ const ButtonWrapper = styled.a`
transform: scale(1.05);
}
&.button-light {
- background-color: #bfbfbf !important;
- color: #000000 !important;
+ background-color: ${GRAY_BUTTON_DISABLED} !important;
+ color: ${ASU_BLACK} !important;
}
&.button-gold {
- background-color: #ffc627 !important;
- color: #000000 !important;
+ background-color: ${ASU_GOLD} !important;
+ color: ${ASU_BLACK} !important;
}
&.button-dark {
- background-color: #191919 !important;
- color: #ffffff !important;
+ background-color: ${ASU_GRAY1} !important;
+ color: ${ASU_WHITE} !important;
}
&.button-maroon {
- background-color: #8c1d40 !important;
- color: #ffffff !important;
+ background-color: ${ASU_MAROON} !important;
+ color: ${ASU_WHITE} !important;
}
`;
diff --git a/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/DropdownItem/index.styles.js b/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/DropdownItem/index.styles.js
index fca47eb8b7..827d513e03 100644
--- a/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/DropdownItem/index.styles.js
+++ b/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/DropdownItem/index.styles.js
@@ -1,9 +1,10 @@
import styled from "styled-components";
+import { ASU_WHITE, ASU_GRAY5, ASU_GRAY1, ASU_MAROON } from "../../../../colors";
const DropdownWrapper = styled.div`
position: fixed;
- background-color: #ffffff;
- border: 1px solid #d0d0d0;
+ background-color: ${ASU_WHITE};
+ border: 1px solid ${ASU_GRAY5};
margin: 0;
z-index: 1031;
visibility: hidden;
@@ -34,7 +35,7 @@ const DropdownWrapper = styled.div`
&:not(:last-child) {
padding-right: 2rem;
margin-right: 2rem;
- border-right: 1px solid #d0d0d0;
+ border-right: 1px solid ${ASU_GRAY5};
}
.ul-heading {
margin-top: 0;
@@ -54,9 +55,9 @@ const DropdownWrapper = styled.div`
margin: 0.75rem 0;
position: relative;
line-height: 1rem;
- color: #191919;
+ color: ${ASU_GRAY1};
&:hover {
- color: #8c1d40;
+ color: ${ASU_MAROON};
text-decoration: underline;
}
}
@@ -71,8 +72,8 @@ const DropdownWrapper = styled.div`
}
}
.dropdown-button-container {
- border-top: 1px solid #d0d0d0;
- border-bottom: 1px solid #d0d0d0;
+ border-top: 1px solid ${ASU_GRAY5};
+ border-bottom: 1px solid ${ASU_GRAY5};
margin-top: 1rem;
> div {
max-width: 1200px;
@@ -113,7 +114,7 @@ const DropdownWrapper = styled.div`
.nav-link {
padding: 0 1rem;
&:not(:last-child) {
- border-bottom: 1px solid #d0d0d0;
+ border-bottom: 1px solid ${ASU_GRAY5};
}
a {
padding: 1rem 0;
diff --git a/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/NavItem/index.styles.js b/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/NavItem/index.styles.js
index 13e2426366..61507e5bc6 100644
--- a/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/NavItem/index.styles.js
+++ b/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/NavItem/index.styles.js
@@ -1,4 +1,5 @@
import styled from "styled-components";
+import { ASU_GRAY1, ASU_GOLD, ASU_GRAY4 } from "../../../../colors";
const NavItemWrapper = styled.li`
position: relative;
@@ -12,7 +13,7 @@ const NavItemWrapper = styled.li`
display: inline-block;
padding: 0.5rem 0.75rem;
line-height: 1rem;
- color: #191919;
+ color: ${ASU_GRAY1};
&:after {
transition: 0.5s cubic-bezier(0.19, 1, 0.19, 1);
content: "";
@@ -25,7 +26,7 @@ const NavItemWrapper = styled.li`
background-image: linear-gradient(
to right,
transparent 0.5%,
- #ffc627 0.5%
+ ${ASU_GOLD} 0.5%
);
}
&.nav-item-selected:after {
@@ -51,10 +52,10 @@ const NavItemWrapper = styled.li`
}
}
@media (max-width: ${({ breakpoint }) => breakpoint}) {
- border-bottom: 1px solid #cccccc;
+ border-bottom: 1px solid ${ASU_GRAY4};
margin: 0;
&:first-child {
- border-top: 1px solid #cccccc;
+ border-top: 1px solid ${ASU_GRAY4};
}
&:hover > a:after {
width: 100%;
@@ -66,7 +67,7 @@ const NavItemWrapper = styled.li`
padding: 1rem 2rem 0.75rem;
width: 100%;
&.open-link {
- border-bottom: 1px solid #cccccc;
+ border-bottom: 1px solid ${ASU_GRAY4};
}
&:after {
right: 0;
diff --git a/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/index.js b/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/index.js
index eceb7adeb1..9f272a197b 100644
--- a/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/index.js
+++ b/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/index.js
@@ -71,7 +71,6 @@ const NavbarContainer = () => {