export type Locale = 'en' | 'fr' | 'ar'; export type Direction = 'ltr' | 'rtl'; export type EvidenceStatus = 'approved' | 'illustrative' | 'pending' | 'expired' | 'rejected'; export type ThemePreference = 'light' | 'dark' | 'system'; export interface LinkModel { id: string; label: string; href: string; external?: boolean; } export interface SiteHeaderProps { locale: Locale; direction: Direction; links: LinkModel[]; login?: LinkModel; onDemo(): void; } export interface DrawerProps extends SiteHeaderProps { open: boolean; onOpenChange(open: boolean): void; returnFocusRef?: HTMLElement | null; } export interface LocaleSelectorProps { locale: Locale; routeId: string; hash?: string; onLocaleChange(locale: Locale): void; } export interface ThemeSelectorProps { preference: ThemePreference; onPreferenceChange(value: ThemePreference): void; } export interface HeroModel { eyebrow: string; title: string; body: string; primaryLabel: string; secondaryLabel: string; } export interface ProductPreviewModel { status: EvidenceStatus; caption: string; locale: Locale; direction: Direction; theme: 'light' | 'dark'; assetId?: string; } export interface LifecycleItem { id: string; title: string; description: string; icon: string; } export interface ComparisonModel { title: string; body: string; before: { title: string; items: string[] }; after: { title: string; items: string[] }; } export interface WorkflowStep { id: string; ordinal: string; title: string; description: string; } export interface RoleCard { id: string; title: string; description: string; } export interface ModuleCard { id: string; title: string; description: string; evidenceStatus: EvidenceStatus; } export interface MetricDefinition { id: string; title: string; definition: string; publishedValue?: never; } export interface IntegrationCategory { id: string; label: string; verifiedPartners?: never; } export interface SecurityCheck { id: string; title: string; description: string; certificationBadge?: never; } export interface PricingModel { mode: 'quote-only' | 'approved-pricing'; title: string; body: string; factors: string[]; note: string; } export interface FaqItem { id: string; question: string; answer: string; } export interface DemoFormValues { fullName: string; workEmail: string; company: string; fleetSize: string; market?: string; preferredLanguage?: Locale; message?: string; } export type DemoFormState = | 'idle' | 'validating' | 'submitting' | 'success' | 'recoverable_error' | 'terminal_error'; export interface DemoFormProps { state: DemoFormState; values: DemoFormValues; fieldErrors: Partial>; formError?: string; onSubmit(values: DemoFormValues): Promise; } export interface TourProps { steps: WorkflowStep[]; activeIndex: number; open: boolean; onOpenChange(open: boolean): void; onStepChange(index: number): void; }