import React, { useState } from 'react'; import { View, Text, StyleSheet, ScrollView, Pressable, Platform, Modal, SafeAreaView, useWindowDimensions, } from 'react-native'; import { Ux4gBottomNavigationBar, Ux4gBottomNavItem, Ux4gBottomNavIndicatorVariant, Ux4gBottomNavVariant, Ux4gPillBottomNavBar, Ux4gBarBottomNavBar, Ux4gPlainBottomNavBar, Ux4gFloatingBottomNavBar, Ux4gCenterActionBottomNavBar, } from '../components/bottom-navigation-bar'; import { UX4GColors } from '../foundation/colors'; import { useUx4gTheme } from '../theme/Ux4gThemeContext'; export const BottomNavigationBarShowcase: React.FC = () => { const theme = useUx4gTheme(); const { isDark, toggleTheme } = theme; const { width } = useWindowDimensions(); // Full screen interactive mode state const [isFullScreenOpen, setIsFullScreenOpen] = useState(false); const [fullScreenActiveTab, setFullScreenActiveTab] = useState(0); const [fullScreenIndicator, setFullScreenIndicator] = useState('pill'); const [fullScreenVariant, setFullScreenVariant] = useState('labelled'); const [isQuickActionModalOpen, setIsQuickActionModalOpen] = useState(false); // Showcase state for live playground const [activePlaygroundIndex, setActivePlaygroundIndex] = useState(0); const [selectedIndicator, setSelectedIndicator] = useState('pill'); const [selectedVariant, setSelectedVariant] = useState('labelled'); const [showBadges, setShowBadges] = useState(true); const [lastActionMessage, setLastActionMessage] = useState('Home tab selected'); // Matrix tab states (5 rows x 3 columns) const [matrixIndices, setMatrixIndices] = useState([ [0, 0, 0], // Labelled (Pill, Bar, Plain) [0, 0, 0], // Top-rounded (Pill, Bar, Plain) [0, 0, 0], // Icon only (Pill, Bar, Plain) [0, 0, 0], // Centre action (Pill, Bar, Plain) [0, 0, 0], // Pill floating (Pill, Bar, Plain) ]); const updateMatrixIndex = (row: number, col: number, idx: number, label: string) => { setMatrixIndices((prev) => { const next = prev.map((r, rIdx) => rIdx === row ? r.map((c, cIdx) => (cIdx === col ? idx : c)) : [...r] ); return next; }); setLastActionMessage(`[Row ${row + 1}, Col ${col + 1}] selected "${label}"`); }; // Base 5 navigation items matching the design image const standardItems: Ux4gBottomNavItem[] = [ { key: 'home', label: 'Home', icon: 'home' }, { key: 'services', label: 'Services', icon: 'services' }, { key: 'status', label: 'Status', icon: 'status' }, { key: 'alerts', label: 'Alerts', icon: 'alerts', badge: showBadges ? 3 : undefined }, { key: 'profile', label: 'Profile', icon: 'profile' }, ]; // 4 items for Centre Action mode (Home, Services | Status, Alerts) const centreActionItems: Ux4gBottomNavItem[] = [ { key: 'home', label: 'Home', icon: 'home' }, { key: 'services', label: 'Services', icon: 'services' }, { key: 'status', label: 'Status', icon: 'status' }, { key: 'alerts', label: 'Alerts', icon: 'alerts', badge: showBadges ? '!' : undefined }, ]; const rows: { label: string; variant: Ux4gBottomNavVariant; items: Ux4gBottomNavItem[] }[] = [ { label: 'Labelled', variant: 'labelled', items: standardItems }, { label: 'Top-rounded', variant: 'top-rounded', items: standardItems }, { label: 'Icon only', variant: 'icon-only', items: standardItems }, { label: 'Centre action', variant: 'centre-action', items: centreActionItems }, { label: 'Pill (floating)', variant: 'floating-pill', items: standardItems }, ]; const cols: { title: string; indicator: Ux4gBottomNavIndicatorVariant }[] = [ { title: 'Pill', indicator: 'pill' }, { title: 'Bar', indicator: 'bar' }, { title: 'Plain', indicator: 'plain' }, ]; // Full Screen Screen Content per Tab const renderFullScreenTabContent = () => { const isDarkBg = isDark; const activeLabel = fullScreenVariant === 'centre-action' ? centreActionItems[fullScreenActiveTab]?.label || 'Home' : standardItems[fullScreenActiveTab]?.label || 'Home'; switch (activeLabel) { case 'Home': return ( {/* Greeting Hero Card */} DIGITAL CITIZEN PORTAL Welcome, Priya Sharma ๐Ÿ‘‹ Your citizen services, documents, and active requests in one place. 4 Active Apps 8 Verified Docs 2 Pending Tasks {/* Quick Actions Grid */} Popular Quick Actions {[ { title: 'Apply Certificate', icon: '๐Ÿ“„', color: UX4GColors.primary50 }, { title: 'Pay Utility Bill', icon: 'โšก', color: '#FFF5EA' }, { title: 'Locker & Aadhaar', icon: '๐Ÿ”’', color: '#F6EFFB' }, { title: 'File Grievance', icon: '๐Ÿ“ข', color: '#EFF6FF' }, ].map((item, i) => ( setLastActionMessage(`Action "${item.title}" tapped`)} style={[ styles.fsQuickCard, { backgroundColor: isDarkBg ? UX4GColors.neutral900 : UX4GColors.neutral0, borderColor: isDarkBg ? UX4GColors.neutral800 : UX4GColors.neutral200, }, ]} > {item.icon} {item.title} ))} {/* Recent Application Tracker */} Recent Status Trackers Domicile Certificate #DL-98231 Submitted on 22 Sep 2026 In Review Step 3 of 4: District Officer Verification ); case 'Services': return ( All Citizen Services {[ { cat: 'Identity & Certificates', count: '14 Services', icon: '๐Ÿ†”' }, { cat: 'Revenue & Land Records', count: '9 Services', icon: '๐Ÿ“œ' }, { cat: 'Electricity & Water Utilities', count: '6 Services', icon: '๐Ÿ’ก' }, { cat: 'Transport & Driving Licenses', count: '12 Services', icon: '๐Ÿš—' }, { cat: 'Public Grievance Portal (CPGRAMS)', count: 'Direct Filing', icon: '๐Ÿ“ฃ' }, ].map((s, i) => ( {s.icon} {s.cat} {s.count} โ€บ ))} ); case 'Status': return ( Application Status Pipeline {[ { id: 'APP-99824', name: 'Income Certificate', status: 'Approved', step: 'Ready to Download', color: UX4GColors.green600 }, { id: 'APP-99810', name: 'Water Connection Request', status: 'In Review', step: 'Site Inspection', color: UX4GColors.primary600 }, { id: 'APP-99754', name: 'Driving License Renewal', status: 'Submitted', step: 'Payment Verified', color: UX4GColors.orange600 }, ].map((st, i) => ( {st.name} Ref: {st.id} {st.status} Current Status: {st.step} ))} ); case 'Alerts': return ( Notifications & Alerts {[ { title: 'Certificate Issued!', desc: 'Your Income Certificate #IC-2026 is generated and ready to download.', time: '10 mins ago', unread: true }, { title: 'Electricity Bill Due', desc: 'Bill of โ‚น 1,420 due on 28 Sep 2026. Pay now to avoid late fee.', time: '2 hours ago', unread: true }, { title: 'DigiLocker Synced', desc: 'Driving license was automatically synced with DigiLocker.', time: 'Yesterday', unread: false }, ].map((notif, i) => ( {notif.title} {notif.desc} {notif.time} {notif.unread && } ))} ); case 'Profile': return ( ๐Ÿ‘ฉโ€๐Ÿ’ผ Priya Sharma priya.sharma@example.gov.in โœ“ Aadhaar & DigiLocker Verified {[ { title: 'Personal Information', icon: '๐Ÿ‘ค' }, { title: 'Linked Documents & Certificates', icon: '๐Ÿ“‘' }, { title: 'Payment Methods & History', icon: '๐Ÿ’ณ' }, { title: 'App Security & Biometrics', icon: '๐Ÿ›ก๏ธ' }, { title: 'Language (English / เคนเคฟเคจเฅเคฆเฅ€)', icon: '๐ŸŒ' }, ].map((setting, i) => ( {setting.icon} {setting.title} โ€บ ))} ); default: return null; } }; return ( {/* โ”€โ”€โ”€ FULL SCREEN INTERACTIVE APP MODAL โ”€โ”€โ”€ */} setIsFullScreenOpen(false)} > {/* Top Bar with Controller Tools and Exit Button */} Full Screen Live App Indicator: {fullScreenIndicator} | Shape: {fullScreenVariant} {isDark ? 'โ˜€๏ธ' : '๐ŸŒ™'} setIsFullScreenOpen(false)} style={styles.fsCloseButton} > โœ• Exit Full Screen {/* Quick Style Switcher Bar inside Full Screen */} INDICATOR: {(['pill', 'bar', 'plain'] as Ux4gBottomNavIndicatorVariant[]).map((ind) => ( setFullScreenIndicator(ind)} style={[ styles.fsSwitcherPill, fullScreenIndicator === ind && { backgroundColor: UX4GColors.primary600 }, ]} > {ind} ))} SHAPE: {( [ 'labelled', 'top-rounded', 'icon-only', 'centre-action', 'floating-pill', ] as Ux4gBottomNavVariant[] ).map((v) => ( { setFullScreenVariant(v); if (v === 'centre-action' && fullScreenActiveTab >= 4) { setFullScreenActiveTab(0); } }} style={[ styles.fsSwitcherPill, fullScreenVariant === v && { backgroundColor: UX4GColors.primary600 }, ]} > {v} ))} {/* Active Screen Tab View */} {renderFullScreenTabContent()} {/* Fixed Bottom Navigation Bar */} setFullScreenActiveTab(idx)} centerAction={ fullScreenVariant === 'centre-action' ? { onPress: () => setIsQuickActionModalOpen(true), } : undefined } useSafeArea={true} testID="fullscreen-bottom-nav" /> {/* Centre Action Quick Action Sheet Modal */} setIsQuickActionModalOpen(false)} > setIsQuickActionModalOpen(false)} > Quick Actions (+) Create a new application or perform instant service request: {[ { label: 'New Application', icon: '๐Ÿ“', color: UX4GColors.primary50 }, { label: 'Upload Document', icon: '๐Ÿ“ค', color: '#EFF6FF' }, { label: 'Scan QR Code', icon: '๐Ÿ“ท', color: '#F6EFFB' }, { label: 'Raise Grievance', icon: '๐Ÿšจ', color: '#FFF5EA' }, ].map((act, i) => ( setIsQuickActionModalOpen(false)} style={[ styles.modalActionCard, { backgroundColor: isDark ? UX4GColors.neutral950 : UX4GColors.neutral50, borderColor: isDark ? UX4GColors.neutral800 : UX4GColors.neutral200, }, ]} > {act.icon} {act.label} ))} setIsQuickActionModalOpen(false)} style={styles.modalDismissBtn} > Close {/* โ”€โ”€โ”€ MAIN SHOWCASE SCROLL VIEW โ”€โ”€โ”€ */} {/* โ”€โ”€โ”€ Header โ”€โ”€โ”€ */} UX4G NAVIGATION {/* Prominent Full Screen Launch Button */} setIsFullScreenOpen(true)} style={styles.fullScreenLaunchHeroBtn} > ๐Ÿ“ฑ Open Full Screen Demo {isDark ? 'โ˜€๏ธ Light' : '๐ŸŒ™ Dark'} Bottom Navigation Bar Complete design system matrix featuring Pill, Bar, and Plain active indicators across Labelled, Top-rounded, Icon only, Centre action (+ FAB), and Pill (floating) shapes. {/* โ”€โ”€โ”€ Full Screen Quick Callout Banner โ”€โ”€โ”€ */} setIsFullScreenOpen(true)} style={[ styles.fullScreenBannerCard, { backgroundColor: UX4GColors.primary600 }, ]} > ๐Ÿ“ฑ Experience Full Screen Mobile Demo Preview the Bottom Navigation Bar anchored in a realistic full-screen mobile app with live feeds, citizen dashboard, notifications, and tab navigation! Launch โ†— {/* โ”€โ”€โ”€ Action Toast Banner โ”€โ”€โ”€ */} Event Log: {lastActionMessage} {/* โ”€โ”€โ”€ SECTION 1: DESIGN SYSTEM MATRIX (5x3 GRID) โ”€โ”€โ”€ */} Design System Variants Matrix (Exact UI & Design Flow) Tap any tab in the matrix below to interact with that specific variant live. {/* Column Header Titles */} {cols.map((col) => ( {col.title} ))} {/* Matrix Rows (Labelled, Top-rounded, Icon only, Centre action, Pill floating) */} {rows.map((row, rowIdx) => ( {/* Row Header Label */} {row.label} {/* 3 Columns: Pill, Bar, Plain */} {cols.map((col, colIdx) => ( updateMatrixIndex(rowIdx, colIdx, idx, item.label)} centerAction={ row.variant === 'centre-action' ? { onPress: () => setLastActionMessage( `[Row ${rowIdx + 1}, Col ${colIdx + 1}] Center Action (+) pressed!` ), } : undefined } useSafeArea={false} testID={`matrix-${row.variant}-${col.indicator}`} /> ))} ))} {/* โ”€โ”€โ”€ SECTION 2: INTERACTIVE LIVE PLAYGROUND โ”€โ”€โ”€ */} Interactive Live Playground Customize indicators, layout variants, center action, and badges in real-time. {/* Controls */} {/* Indicator Variant Selector */} Indicator Variant {(['pill', 'bar', 'plain'] as Ux4gBottomNavIndicatorVariant[]).map((ind) => ( setSelectedIndicator(ind)} style={[ styles.selectorPill, selectedIndicator === ind ? { backgroundColor: UX4GColors.primary600 } : { backgroundColor: isDark ? UX4GColors.neutral800 : UX4GColors.neutral100 }, ]} > {ind.toUpperCase()} ))} {/* Layout Variant Selector */} Shape / Layout Variant {( [ 'labelled', 'top-rounded', 'icon-only', 'centre-action', 'floating-pill', ] as Ux4gBottomNavVariant[] ).map((v) => ( setSelectedVariant(v)} style={[ styles.selectorPill, selectedVariant === v ? { backgroundColor: UX4GColors.primary600 } : { backgroundColor: isDark ? UX4GColors.neutral800 : UX4GColors.neutral100 }, ]} > {v} ))} {/* Badges Toggle */} Options setShowBadges(!showBadges)} style={[ styles.selectorPill, showBadges ? { backgroundColor: UX4GColors.blue600 } : { backgroundColor: isDark ? UX4GColors.neutral800 : UX4GColors.neutral100 }, ]} > {showBadges ? 'โœ“ Badges On' : 'Badges Off'} {/* Live Device Simulator */} {/* Simulated App Screen Content */} {selectedVariant === 'centre-action' ? centreActionItems[activePlaygroundIndex]?.label || 'Active Tab' : standardItems[activePlaygroundIndex]?.label || 'Active Tab'} Active Indicator: {selectedIndicator} | Variant: {selectedVariant} Active Tab Content Currently displaying screen for{' '} {selectedVariant === 'centre-action' ? centreActionItems[activePlaygroundIndex]?.label : standardItems[activePlaygroundIndex]?.label} . {/* Render Active Component */} { setActivePlaygroundIndex(idx); setLastActionMessage(`Switched to tab: ${item.label} (Index ${idx})`); }} centerAction={ selectedVariant === 'centre-action' ? { onPress: () => setLastActionMessage('Center Action (+) Pressed in Live Playground!'), } : undefined } useSafeArea={false} testID="playground-bottom-nav" /> {/* โ”€โ”€โ”€ SECTION 3: PRESET COMPONENTS QUICK CODE REFERENCE โ”€โ”€โ”€ */} Developer Usage & Component Presets Use modular props on <Ux4gBottomNavigationBar /> or quick presets: {`import { Ux4gBottomNavigationBar, Ux4gPillBottomNavBar, Ux4gBarBottomNavBar, Ux4gPlainBottomNavBar, Ux4gFloatingBottomNavBar, Ux4gCenterActionBottomNavBar } from 'ux4g-react-native-components'; // 1. Standard Pill Navigation Bar setIndex(index)} /> // 2. Top-Rounded Bar Indicator setIndex(index)} /> // 3. Centre Action Button Bar (+) openCreateModal(), }} /> // 4. Floating Capsule Navigation Bar `} ); }; // โ”€โ”€โ”€ STYLES โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ const styles = StyleSheet.create({ outerContainer: { flex: 1, }, container: { flex: 1, }, contentContainer: { padding: 16, paddingBottom: 48, }, header: { marginBottom: 16, }, titleRow: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginBottom: 8, flexWrap: 'wrap', gap: 8, }, titleBadge: { backgroundColor: UX4GColors.primary100, paddingHorizontal: 8, paddingVertical: 4, borderRadius: 6, }, titleBadgeText: { color: UX4GColors.primary700, fontSize: 11, fontWeight: '700', letterSpacing: 0.5, }, fullScreenLaunchHeroBtn: { backgroundColor: UX4GColors.primary600, paddingHorizontal: 12, paddingVertical: 6, borderRadius: 8, shadowColor: UX4GColors.primary600, shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.25, shadowRadius: 4, elevation: 3, }, fullScreenLaunchHeroBtnText: { color: UX4GColors.neutral0, fontSize: 12, fontWeight: '700', }, themeToggle: { paddingHorizontal: 12, paddingVertical: 6, borderRadius: 8, }, mainTitle: { fontSize: 26, fontWeight: '700', marginBottom: 6, }, subtitle: { fontSize: 14, lineHeight: 20, }, fullScreenBannerCard: { flexDirection: 'row', alignItems: 'center', padding: 16, borderRadius: 14, marginBottom: 16, gap: 12, shadowColor: UX4GColors.primary600, shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.2, shadowRadius: 8, elevation: 4, }, fsBannerTitle: { color: UX4GColors.neutral0, fontSize: 16, fontWeight: '700', marginBottom: 4, }, fsBannerSub: { color: `${UX4GColors.neutral0}EE`, fontSize: 12, lineHeight: 17, }, fsBannerBtn: { backgroundColor: UX4GColors.neutral0, paddingHorizontal: 14, paddingVertical: 8, borderRadius: 8, }, fsBannerBtnText: { color: UX4GColors.primary700, fontWeight: '700', fontSize: 13, }, actionBanner: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 14, paddingVertical: 10, borderRadius: 10, borderWidth: 1, marginBottom: 20, gap: 8, }, actionBannerLabel: { fontSize: 12, fontWeight: '700', color: UX4GColors.neutral500, }, actionBannerText: { fontSize: 13, fontWeight: '600', flex: 1, }, card: { borderRadius: 16, borderWidth: 1, padding: 16, marginBottom: 20, overflow: 'hidden', }, cardHeader: { marginBottom: 16, }, cardTitle: { fontSize: 18, fontWeight: '700', marginBottom: 4, }, cardSubtitle: { fontSize: 13, lineHeight: 18, }, matrixScrollView: { marginHorizontal: -16, paddingHorizontal: 16, }, matrixContainer: { paddingVertical: 8, minWidth: 960, }, matrixHeaderRow: { flexDirection: 'row', alignItems: 'center', marginBottom: 16, }, rowLabelHeaderCell: { width: 130, }, matrixHeaderCell: { width: 320, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 8, }, matrixHeaderTitle: { fontSize: 16, fontWeight: '700', marginBottom: 6, }, headerIndicatorLine: { width: 220, height: 2, backgroundColor: `${UX4GColors.primary400}66`, borderRadius: 1, }, matrixRow: { flexDirection: 'row', alignItems: 'center', marginBottom: 24, }, rowLabelCell: { width: 130, paddingRight: 12, }, rowLabelText: { fontSize: 14, fontWeight: '600', }, matrixCell: { width: 320, paddingHorizontal: 8, }, cellDeviceFrame: { borderRadius: 12, borderWidth: 1, overflow: 'hidden', shadowColor: UX4GColors.neutral1000black, shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.05, shadowRadius: 4, elevation: 2, }, cellMockBody: { height: 48, padding: 8, justifyContent: 'center', alignItems: 'center', }, cellMockContentPlaceholder: { width: '60%', height: 8, backgroundColor: `${UX4GColors.neutral400}22`, borderRadius: 4, }, controlsGrid: { gap: 12, marginBottom: 16, }, controlGroup: { gap: 6, }, controlLabel: { fontSize: 12, fontWeight: '600', textTransform: 'uppercase', letterSpacing: 0.5, }, pillSelectorRow: { flexDirection: 'row', flexWrap: 'wrap', gap: 8, }, selectorPill: { paddingHorizontal: 12, paddingVertical: 6, borderRadius: 8, }, selectorPillText: { fontSize: 12, fontWeight: '600', }, playgroundDevice: { borderRadius: 16, borderWidth: 1, overflow: 'hidden', minHeight: 280, justifyContent: 'space-between', }, playgroundScreenBody: { padding: 16, }, playgroundAppHeader: { marginBottom: 16, }, playgroundAppHeaderTitle: { fontSize: 20, fontWeight: '700', }, playgroundAppHeaderSub: { fontSize: 12, marginTop: 2, }, playgroundCardItem: { borderRadius: 12, borderWidth: 1, padding: 16, }, codeBlock: { borderRadius: 12, padding: 16, marginTop: 12, }, codeText: { color: '#86E1FC', fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace', fontSize: 12, lineHeight: 18, }, // โ”€โ”€โ”€ FULL SCREEN MODAL STYLES โ”€โ”€โ”€ fullScreenModalWrapper: { flex: 1, }, fsTopBar: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', paddingHorizontal: 16, paddingVertical: 12, borderBottomWidth: 1, }, fsTopBarTitle: { fontSize: 18, fontWeight: '700', }, fsTopBarSub: { fontSize: 11, color: UX4GColors.neutral500, marginTop: 2, }, fsIconButton: { width: 36, height: 36, borderRadius: 8, alignItems: 'center', justifyContent: 'center', }, fsCloseButton: { backgroundColor: UX4GColors.red600, paddingHorizontal: 12, paddingVertical: 8, borderRadius: 8, }, fsCloseButtonText: { color: UX4GColors.neutral0, fontSize: 12, fontWeight: '700', }, fsSwitcherBar: { maxHeight: 48, borderBottomWidth: 1, paddingVertical: 6, }, fsSwitcherPill: { paddingHorizontal: 10, paddingVertical: 4, borderRadius: 6, backgroundColor: 'transparent', }, fsSwitcherPillText: { fontSize: 11, fontWeight: '600', color: UX4GColors.neutral500, }, fsSwitcherDivider: { width: 1, height: 18, backgroundColor: UX4GColors.neutral400, marginHorizontal: 4, }, fullScreenContentArea: { flex: 1, }, fullScreenScrollContent: { padding: 16, paddingBottom: 24, }, fullScreenBottomNavWrapper: { width: '100%', }, fsHeroCard: { borderRadius: 16, padding: 20, marginBottom: 20, shadowColor: UX4GColors.primary600, shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.25, shadowRadius: 8, elevation: 4, }, fsHeroBadge: { backgroundColor: '#FFFFFF22', paddingHorizontal: 8, paddingVertical: 4, borderRadius: 6, alignSelf: 'flex-start', marginBottom: 10, }, fsHeroBadgeText: { color: UX4GColors.neutral0, fontSize: 10, fontWeight: '700', letterSpacing: 0.5, }, fsHeroTitle: { color: UX4GColors.neutral0, fontSize: 22, fontWeight: '700', marginBottom: 6, }, fsHeroSub: { color: `${UX4GColors.neutral0}CC`, fontSize: 13, lineHeight: 18, marginBottom: 16, }, fsHeroStatsRow: { flexDirection: 'row', alignItems: 'center', backgroundColor: '#FFFFFF18', borderRadius: 12, paddingVertical: 10, paddingHorizontal: 8, justifyContent: 'space-around', }, fsHeroStatBox: { alignItems: 'center', }, fsHeroStatNum: { color: UX4GColors.neutral0, fontSize: 18, fontWeight: '700', }, fsHeroStatLabel: { color: `${UX4GColors.neutral0}BB`, fontSize: 11, marginTop: 2, }, fsHeroStatDivider: { width: 1, height: 24, backgroundColor: '#FFFFFF33', }, fsSectionHeader: { fontSize: 16, fontWeight: '700', marginBottom: 12, marginTop: 4, }, fsQuickGrid: { flexDirection: 'row', flexWrap: 'wrap', gap: 12, marginBottom: 20, }, fsQuickCard: { width: '48%', flexGrow: 1, borderRadius: 12, borderWidth: 1, padding: 14, alignItems: 'center', gap: 8, }, fsQuickIconCircle: { width: 44, height: 44, borderRadius: 22, alignItems: 'center', justifyContent: 'center', }, fsQuickTitle: { fontSize: 12, fontWeight: '600', textAlign: 'center', }, fsStatusCard: { borderRadius: 14, borderWidth: 1, padding: 16, marginBottom: 14, }, fsStatusHeader: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'flex-start', marginBottom: 12, }, fsStatusTitle: { fontSize: 15, fontWeight: '700', }, fsStatusSub: { fontSize: 12, color: UX4GColors.neutral500, marginTop: 2, }, fsStatusBadgeInProgress: { backgroundColor: `${UX4GColors.primary600}22`, paddingHorizontal: 8, paddingVertical: 4, borderRadius: 6, }, fsStatusBadgeGeneric: { paddingHorizontal: 8, paddingVertical: 4, borderRadius: 6, }, fsStatusBadgeText: { color: UX4GColors.primary600, fontSize: 11, fontWeight: '700', }, fsProgressBarTrack: { height: 6, backgroundColor: `${UX4GColors.neutral400}33`, borderRadius: 3, overflow: 'hidden', marginBottom: 8, }, fsProgressBarFill: { height: '100%', backgroundColor: UX4GColors.primary600, borderRadius: 3, }, fsStatusStepInfo: { fontSize: 11, color: UX4GColors.neutral500, }, fsServiceListItem: { flexDirection: 'row', alignItems: 'center', padding: 14, borderRadius: 12, borderWidth: 1, marginBottom: 10, }, fsServiceItemTitle: { fontSize: 14, fontWeight: '600', }, fsServiceItemSub: { fontSize: 12, color: UX4GColors.neutral500, marginTop: 2, }, fsNotifCard: { flexDirection: 'row', alignItems: 'center', padding: 14, borderRadius: 12, borderWidth: 1, marginBottom: 10, gap: 10, }, fsNotifTitle: { fontSize: 14, fontWeight: '700', marginBottom: 2, }, fsNotifDesc: { fontSize: 12, lineHeight: 16, marginBottom: 4, }, fsNotifTime: { fontSize: 11, color: UX4GColors.neutral400, }, fsUnreadDot: { width: 8, height: 8, borderRadius: 4, backgroundColor: UX4GColors.primary600, }, fsProfileCard: { alignItems: 'center', padding: 20, borderRadius: 16, borderWidth: 1, marginBottom: 16, }, fsProfileAvatarCircle: { width: 64, height: 64, borderRadius: 32, backgroundColor: UX4GColors.primary100, alignItems: 'center', justifyContent: 'center', marginBottom: 10, }, fsProfileName: { fontSize: 18, fontWeight: '700', marginBottom: 2, }, fsProfileEmail: { fontSize: 12, color: UX4GColors.neutral500, marginBottom: 10, }, fsAadhaarVerifiedBadge: { backgroundColor: '#E6F4EA', paddingHorizontal: 10, paddingVertical: 4, borderRadius: 6, }, fsAadhaarVerifiedText: { color: UX4GColors.green700, fontSize: 11, fontWeight: '700', }, fsSettingsGroup: { gap: 8, }, fsSettingItem: { flexDirection: 'row', alignItems: 'center', padding: 14, borderRadius: 12, borderWidth: 1, }, fsSettingTitle: { fontSize: 13, fontWeight: '600', flex: 1, }, modalBackdrop: { flex: 1, backgroundColor: '#00000077', justifyContent: 'flex-end', }, modalSheet: { borderTopLeftRadius: 20, borderTopRightRadius: 20, borderTopWidth: 1, padding: 20, paddingBottom: 36, }, modalHandle: { width: 36, height: 4, backgroundColor: UX4GColors.neutral400, borderRadius: 2, alignSelf: 'center', marginBottom: 16, }, modalTitle: { fontSize: 18, fontWeight: '700', marginBottom: 4, }, modalSub: { fontSize: 12, color: UX4GColors.neutral500, marginBottom: 16, }, modalActionsGrid: { flexDirection: 'row', flexWrap: 'wrap', gap: 12, marginBottom: 20, }, modalActionCard: { width: '48%', flexGrow: 1, borderRadius: 12, borderWidth: 1, padding: 14, alignItems: 'center', gap: 8, }, modalActionIconCircle: { width: 44, height: 44, borderRadius: 22, alignItems: 'center', justifyContent: 'center', }, modalActionLabel: { fontSize: 12, fontWeight: '600', textAlign: 'center', }, modalDismissBtn: { backgroundColor: UX4GColors.neutral200, paddingVertical: 12, borderRadius: 10, alignItems: 'center', }, modalDismissText: { color: UX4GColors.neutral800, fontWeight: '700', fontSize: 14, }, });