diff --git a/app/components/Avatar.js b/app/components/Avatar.js
new file mode 100644
index 0000000..2abbefe
--- /dev/null
+++ b/app/components/Avatar.js
@@ -0,0 +1,18 @@
+export default function Avatar({
+ src,
+ alt,
+ size = "small",
+ className = "",
+ ...props
+}) {
+ const sizeStyles = {
+ small: "w-[16px] h-[16px]",
+ medium: "w-[18px] h-[18px]",
+ large: "w-[24px] h-[24px]",
+ xlarge: "w-[32px] h-[32px]",
+ };
+
+ const baseStyles = `rounded-[var(--radius-measures-radius-full)] object-cover ${sizeStyles[size]} ${className}`;
+
+ return
;
+}
diff --git a/app/components/AvatarContainer.js b/app/components/AvatarContainer.js
new file mode 100644
index 0000000..55ecfff
--- /dev/null
+++ b/app/components/AvatarContainer.js
@@ -0,0 +1,21 @@
+export default function AvatarContainer({
+ children,
+ size = "small",
+ className = "",
+ ...props
+}) {
+ const sizeStyles = {
+ small: "flex -space-x-2",
+ medium: "flex -space-x-[9px]",
+ large: "flex -space-x-[10px]",
+ xlarge: "flex -space-x-[13px]",
+ };
+
+ const baseStyles = `items-center ${sizeStyles[size]} ${className}`;
+
+ return (
+
+ {children}
+
+ );
+}
diff --git a/app/components/Button.js b/app/components/Button.js
new file mode 100644
index 0000000..f120a79
--- /dev/null
+++ b/app/components/Button.js
@@ -0,0 +1,96 @@
+export default function Button({
+ children,
+ variant = "default",
+ size = "xsmall",
+ className = "",
+ disabled = false,
+ type = "button",
+ onClick,
+ href,
+ target,
+ rel,
+ ariaLabel,
+ ...props
+}) {
+ const sizeStyles = {
+ xsmall:
+ "px-[var(--spacing-scale-006)] py-[var(--spacing-scale-004)] gap-[var(--spacing-scale-001)]",
+ small:
+ "px-[var(--spacing-measures-spacing-008)] py-[var(--spacing-measures-spacing-008)] gap-[var(--spacing-scale-004)]",
+ large:
+ "px-[var(--spacing-scale-012)] py-[var(--spacing-scale-010)] gap-[var(--spacing-scale-004)]",
+ xlarge:
+ "px-[var(--spacing-scale-020)] py-[var(--spacing-scale-012)] gap-[var(--spacing-scale-008)]",
+ };
+
+ const fontStyles = {
+ xsmall:
+ "font-['Inter'] text-[10px] leading-[12px] font-medium tracking-[0%]",
+ small:
+ "font-['Inter'] text-[12px] leading-[14px] font-medium tracking-[0%]",
+ large:
+ "font-['Inter'] text-[16px] leading-[20px] font-medium tracking-[0%]",
+ xlarge:
+ "font-['Inter'] text-[24px] leading-[28px] font-normal tracking-[0%]",
+ };
+
+ const variantStyles = {
+ default:
+ "bg-[var(--color-surface-inverse-primary)] text-[var(--color-content-inverse-primary)] hover:bg-[var(--color-surface-inverse-primary)] hover:text-[var(--color-content-inverse-brand-primary)] hover:outline-[var(--border-color-default-brandprimary)] hover:outline-inset hover:scale-[1.02] hover:shadow-lg active:bg-[var(--color-surface-inverse-brand-primary)] active:text-[var(--color-content-inverse-primary)] active:outline-[var(--border-color-default-brandprimary)] active:outline-offset-1 active:scale-[0.98] disabled:bg-[var(--color-surface-default-secondary)] disabled:text-[var(--color-content-inverse-tertiary)] disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:scale-100 disabled:active:scale-100 disabled:hover:shadow-none",
+ secondary:
+ "bg-transparent text-[var(--color-content-default-brand-primary)] hover:text-[var(--color-content-default-primary)] hover:scale-[1.02] hover:bg-[var(--color-surface-default-tertiary)] focus:outline-1 focus:outline-inset focus:outline-[var(--border-color-default-tertiary)] focus:shadow-[0_0_10px_1px_#FFFDD2] focus:blur-[0px] active:outline-[1.5px] active:outline-inset active:outline-[var(--color-content-default-brand-primary)] active:bg-[var(--color-surface-default-brand-primary)] active:text-[var(--color-content-inverse-primary)] active:scale-[0.98] disabled:bg-[var(--color-surface-default-secondary)] disabled:text-[var(--color-content-inverse-tertiary)] disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:scale-100 disabled:active:scale-100",
+ };
+
+ const hoverOutlineStyles = {
+ xsmall: "hover:outline-1",
+ small: "hover:outline-1",
+ large: "hover:outline-2",
+ xlarge: "hover:outline-[2.5px]",
+ };
+
+ const focusStyles =
+ "focus:shadow-[0_0_10px_1px_#FFFDD2] focus:outline-none focus:ring-1 focus:ring-[var(--color-content-default-brand-primary)] focus:ring-offset-1 focus:scale-[1.02]";
+
+ const baseStyles = `inline-flex items-center justify-start box-border ${sizeStyles[size]} rounded-[var(--radius-measures-radius-full)] ${fontStyles[size]} transition-all duration-200 ease-in-out cursor-pointer ${variantStyles[variant]} ${hoverOutlineStyles[size]} ${focusStyles}`;
+
+ let finalVariant = variant;
+ if (disabled) {
+ finalVariant = "default";
+ }
+
+ const combinedStyles = `${baseStyles} ${className}`;
+
+ const accessibilityProps = {
+ ...(ariaLabel && { "aria-label": ariaLabel }),
+ ...(disabled && { "aria-disabled": "true" }),
+ ...(target && { target }),
+ ...(rel && { rel }),
+ tabIndex: disabled ? -1 : 0,
+ ...props,
+ };
+
+ if (href && !disabled) {
+ return (
+
+ {children}
+
+ );
+ }
+
+ return (
+
+ );
+}
diff --git a/app/components/Header.js b/app/components/Header.js
new file mode 100644
index 0000000..0720f01
--- /dev/null
+++ b/app/components/Header.js
@@ -0,0 +1,177 @@
+import Logo from "./Logo";
+import MenuBar from "./MenuBar";
+import MenuBarItem from "./MenuBarItem";
+import Button from "./Button";
+import AvatarContainer from "./AvatarContainer";
+import Avatar from "./Avatar";
+
+export default function Header({ onToggle }) {
+ const navigationItems = [
+ { href: "#", text: "Use cases", extraPadding: true },
+ { href: "#", text: "Learn" },
+ { href: "#", text: "About" },
+ ];
+
+ const avatarImages = [
+ { src: "/assets/Avatar_1.png", alt: "Avatar 1" },
+ { src: "/assets/Avatar_2.png", alt: "Avatar 2" },
+ { src: "/assets/Avatar_3.png", alt: "Avatar 3" },
+ ];
+
+ const logoConfig = [
+ { breakpoint: "block sm:hidden", size: "header", showText: false },
+ { breakpoint: "hidden sm:block md:hidden", size: "header", showText: true },
+ {
+ breakpoint: "hidden md:block lg:hidden",
+ size: "headerMd",
+ showText: true,
+ },
+ {
+ breakpoint: "hidden lg:block xl:hidden",
+ size: "headerLg",
+ showText: true,
+ },
+ { breakpoint: "hidden xl:block", size: "headerXl", showText: true },
+ ];
+
+ const renderNavigationItems = (size) => {
+ return navigationItems.map((item, index) => (
+
+ {item.text}
+
+ ));
+ };
+
+ const renderAvatarGroup = (containerSize, avatarSize) => {
+ return (
+
+ {avatarImages.map((avatar, index) => (
+
+ ))}
+
+ );
+ };
+
+ const renderLoginButton = (size) => {
+ return (
+
+ Log in
+
+ );
+ };
+
+ const renderCreateRuleButton = (buttonSize, containerSize, avatarSize) => {
+ return (
+
+ );
+ };
+
+ const renderLogo = (size, showText) => {
+ return ;
+ };
+
+ return (
+
+
+
+ );
+}
diff --git a/app/components/HeaderTab.js b/app/components/HeaderTab.js
new file mode 100644
index 0000000..262add2
--- /dev/null
+++ b/app/components/HeaderTab.js
@@ -0,0 +1,34 @@
+export default function HeaderTab({
+ children,
+ className = "",
+ stretch = false,
+ ...props
+}) {
+ const stretchClasses = stretch
+ ? "flex-1 sm:mr-[var(--spacing-scale-008)] md:mr-[185px] lg:mr-[var(--spacing-scale-024)] xl:mr-[var(--spacing-scale-032)]"
+ : "";
+
+ return (
+
+ );
+}
diff --git a/app/components/HomeHeader.js b/app/components/HomeHeader.js
new file mode 100644
index 0000000..5832af7
--- /dev/null
+++ b/app/components/HomeHeader.js
@@ -0,0 +1,229 @@
+"use client";
+
+import { useState } from "react";
+import Logo from "./Logo";
+import MenuBar from "./MenuBar";
+import MenuBarItem from "./MenuBarItem";
+import Button from "./Button";
+import AvatarContainer from "./AvatarContainer";
+import Avatar from "./Avatar";
+import HeaderTab from "./HeaderTab";
+import Header from "./Header";
+
+export default function HomeHeader() {
+ const [showRegularHeader, setShowRegularHeader] = useState(false);
+
+ const navigationItems = [
+ { href: "#", text: "Use cases", extraPadding: true },
+ { href: "#", text: "Learn" },
+ { href: "#", text: "About" },
+ ];
+
+ const avatarImages = [
+ { src: "/assets/Avatar_1.png", alt: "Avatar 1" },
+ { src: "/assets/Avatar_2.png", alt: "Avatar 2" },
+ { src: "/assets/Avatar_3.png", alt: "Avatar 3" },
+ ];
+
+ const logoConfig = [
+ {
+ breakpoint: "block sm:hidden",
+ size: "homeHeaderXsmall",
+ showText: false,
+ },
+ {
+ breakpoint: "hidden sm:block md:hidden",
+ size: "homeHeaderSm",
+ showText: true,
+ },
+ {
+ breakpoint: "hidden md:block lg:hidden",
+ size: "homeHeaderMd",
+ showText: true,
+ },
+ {
+ breakpoint: "hidden lg:block xl:hidden",
+ size: "homeHeaderLg",
+ showText: true,
+ },
+ { breakpoint: "hidden xl:block", size: "homeHeaderXl", showText: true },
+ ];
+
+ const renderNavigationItems = (size) => {
+ return navigationItems.map((item, index) => (
+ setShowRegularHeader(!showRegularHeader)}
+ ariaLabel={`Navigate to ${item.text} page`}
+ >
+ {item.text}
+
+ ));
+ };
+
+ const renderAvatarGroup = (containerSize, avatarSize) => {
+ return (
+
+ {avatarImages.map((avatar, index) => (
+
+ ))}
+
+ );
+ };
+
+ const renderLoginButton = (size) => {
+ return (
+
+ Log in
+
+ );
+ };
+
+ const renderCreateRuleButton = (buttonSize, containerSize, avatarSize) => {
+ return (
+
+ );
+ };
+
+ const renderLogo = (size, showText) => {
+ return ;
+ };
+
+ if (showRegularHeader) {
+ return